TCP的坚持定时器

引言

在TCP中存在一种场景,如果接收方处理不及时,导致缓冲区满,就是发送win为0的ACK,此时发送方会停止发送数据。当接收方缓过来时,会发送携带win值的ACK,告知发送方可以发送数据了。那么网络是不可靠的,如果这个携带win的ACK丢失,就有可能双方一直处于等待状态
为了防止这种死锁情况的发送,发送方使用一个坚持定时器(persist timer)来周期性地向接收方查询,以便发现窗口是否增加。这些从发送方发出的报文段称为窗口探查(window probe)

例子

发送方向不处理数据的接收方发送数据的tcpdump
《TCP/IP 卷1》笔记:TCP的坚持定时器
TCP是间隔5、6、12、24、48、60发送一次

糊涂窗口综合症

基于窗口的流量控制方案,如TCP所使用的,会导致一种被称为“糊涂窗口综合征SWS”的状况。如果发送这种情况,则少量的数据将通过连接进行交换,而不是满长度的报文段。
该现象可发生在两端中的任何一端:接收方可以通告一个小的窗口(而不是一直等到有大的窗口才通告),而发送方也可以发送少量的数据(而不是发送一个大的报文段)可以在任何一端采用措施避免出现糊涂窗口综合征的现象

  1. 接收方不通告小窗口。直到窗口大小增加到一个报文段大小(MSS)或者增加接收方缓存控件的一半
  2. 发送方可以通过a)等待发送一个满长度的报文段b)可以发送至少是接收方通告窗口大小一半的报文段 c)可以发送任何数据并且不希望接收ACK(也就是说,我们没有还未被确认的数据)或者该链接上不使用nagle算法

相关文章: