即使前一个分段丢失,TCP缓冲区也会分段吗?

时间:2018-10-30 02:44:55

标签: networking

假设我们有一个主机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仅需要第二段

哪个是真正的答案?

1 个答案:

答案 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答复重传。