Mat*_*art 6 sockets networking tcp
任何人都能解释一下TCP Selective Acknowledgment的数据包交互是如何工作的吗?我在维基百科上找到了这个定义,但我无法清楚地了解选择性确认与积极确认和否定确认相比的真实情况.
TCP将它发送的信息分成多个段......本质上,段是不大于从另一端接收的TCP MSS(最大段大小)的当前值的数据块.这些块具有递增的序列号(基于TCP会话中发送的总数据字节计数),允许TCP知道何时在飞行中丢失了某些内容; 第一个TCP序列号是随机选择的,出于安全考虑,它不应该是伪随机数.大多数情况下,本地以太网的MTU小于MSS,因此在您可以确认之前,他们可以向您发送多个段.
按照标准化的时间顺序考虑这些事情是有帮助的......
首先是肯定确认,这是告诉发送方您获得数据的机制,您确认的序列号是他发送的每个TCP块(也称为段)接收的最大字节序列.
我将在下面进行演示,但在我的示例中,您将看到像1,2,3,4,5这样的小TCP段号...实际上这些字节序列号会很大,递增,并且它们之间有间隙(但这是normal ... 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定义了您收到的连续数据的边缘 ; 但是,可以同时对多个非连续数据段进行SACK.
否定确认是仅向发送方告知丢失数据的机制.如果你没有告诉他们缺少某些东西,他们会继续发送数据,直到你为叔叔哭泣.
HTH,\ m
| 归档时间: |
|
| 查看次数: |
3717 次 |
| 最近记录: |