数据包与TCP选择性确认的交互如何工作?

时间:2011-03-16 13:01:08

标签: sockets networking tcp

有人可以解释数据包与TCP选择性确认的交互是如何工作的吗? 我在维基百科上找到了这个定义,但是我无法清楚地了解选择性确认与积极确认和否定确认相比的真实情况。

1 个答案:

答案 0 :(得分:6)

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的确认,生活是美好的。如果2丢失,一切都处于保持状态,直到发送者意识到2从未被确认过;他知道,因为你发送重复的ACK为1.在适当的超时,发送者再次发出2,3,4,5。

然后提出选择性确认作为提高效率的方法。在同一个例子中,你是ACK 1,SACK段3到5连同它(如果你使用嗅探器,你会看到类似“ACK:1,SACK:3-5”的信息来自你的ACK数据包)。这样,发送者知道它只需重新传输TCP段2 ...所以生活更好。另请注意,SACK定义了您收到的连续数据的 edge ;但是,可以同时对多个非连续数据段进行SACK。

否定确认是仅告知发件人丢失数据的机制。如果你没有告诉他们缺少某些东西,他们会继续发送数据,直到你为叔叔哭泣。

HTH,\ m