假设我们有一个主机A和一个主机B
我从A到B发送5段,序列号从100开始,每段长20个字节
如果没有数据包丢失,那么我应该期望来自B的ACK = 200
但是有一个数据包丢失了,B除第二个以外都获得了所有分段
我应该从B得到4个ACK,即120,表示第二段丢失了
我重新发送第二段后,来自B的ACK是什么,它将是140还是200?
如果是140,则表示B没有缓冲第3、4、5段
如果是200,则表示B仅需要第二段
哪个是真正的答案?
答案 0 :(得分:0)
乱序数据包的缓冲技术不是TCP协议的一部分。因此,这取决于接收方的TCP实现。
在这两个选项中,TCP发送方都会正确处理这种情况。
在Linux TCP中处理乱序数据包的技术在这里得到了很好的描述:
Johannessen, Mads. Investigate reordering in Linux TCP. MS thesis. 2015.
https://www.duo.uio.no/bitstream/handle/10852/47651/1/thesis-madsjoh.pdf
根据这项研究,Linux TCP可能会缓冲第3、4和5段(如果有足够的空间)并以ACK = 200答复重传。