有人能解释一下与TCP选择性确认的数据包交互是如何工作的吗?我在维基百科上找到了这个定义,但我不能清楚地了解选择性确认与积极确认和消极确认相比到底有什么作用。
发布于 2011-04-09 09:27:23
TCP将其发送的信息分成多个段...本质上,段是不大于从另一端接收的TCP MSS (最大段大小)的当前值的数据块。这些块具有递增的序列号(基于TCP会话中发送的总数据字节计数),这允许TCP知道在传输过程中丢失了什么;第一个TCP序列号是随机选择的,为了安全起见,它不应该是伪随机数。大多数情况下,您的本地以太网的MTU小于MSS,因此在您确认之前,它们可能会向您发送多个数据段。
在标准化的时间序列中思考这些事情是有帮助的……
首先是肯定确认,它是一种机制,用于告诉发送者您收到了数据,您确认的序列号是他发送的每个TCP块(也称为段)接收的最大字节序列。
我将在下面演示,但在我的示例中,您将看到小的TCP段编号,如1、2、3、4、5……在现实中,这些字节序列数字将是大的、递增的,并且它们之间有间隙(但这是正常的……TCP通常以至少500字节长的块发送数据)。
因此,让我们假设发送者在发送第一个ACK之前发送了编号为1,2,3,4,5的数据段。如果一切顺利,您发送1、2、3、4、5的ACK,生活就很好。如果2丢失,则所有内容都将暂停,直到发送方意识到2从未被确认;他知道,因为您为1发送了重复的ACK。在适当的超时后,发送方再次发送2,3,4,5。
然后提出了选择性确认作为一种更有效的方法。在相同的示例中,您确认1和SACK段3到5(如果使用嗅探器,您将看到来自您的ACK数据包的类似" ACK :1,SACK:3-5“的内容)。这样,发送方知道它只需重新传输TCP数据段2...所以生活更美好了。还要注意,SACK定义了您收到的连续数据的边缘;但是,可以同时对多个不连续的数据段进行SACK。
否定确认是一种仅告知发送者丢失数据的机制。如果你不告诉他们丢失了什么,他们就会一直发送数据,直到你哭得不可开交。
HTH,\m
https://stackoverflow.com/questions/5325630
复制相似问题