(22)TCP的坚持定时器
一、简介
ACK的传输并不可靠,也就是说,TCP不对ACK报文段进行确认,TCP只确认那些包含数据的ACK报文段。为了防止因为ACK报文段丢失而双方进行等待的问题,发送方用一个坚持定时器来周期性地向接收方查询。这些从发送方发出地报文段称为窗口探查。
如果一个确认丢失了,则双方就有可能因为等待对方而使连接终止:接收方等待接收数据(因为已经向发送方通告了一个非0的窗口),而发送方在等待允许它继续发送数据的窗口更新。为了防止这种死锁情况的发生,发送方使用一个坚持定时器来周期性的向对方查询,以便发现窗口是否已增大。这些从发送方发出的报文段称为窗口探查。
二、糊涂窗口综合征
糊涂窗口综合征,此现象可能发生在两端中的任何一端:接收方可以通告一个小的窗口,而发送方也可以发送少量的数据。同样,可以在任何一端采取措施避免出现糊涂窗口综合征的现象:
(1)接收方不通告窗口。通常的算法是接收方不通告一个比当前窗口打的窗口,除非窗口可以增加一个报文段大小(MSS)或者可以增加接收方缓冲空间的一半,不论实际有多少;
(2)发送方避免出现糊涂窗口综合征的措施是只有以下条件之一满足时才发送数据:a)可以发送一个满长度的报文段;b)可以发送至少是接收方通告窗口大小一半的报文段;c)可以发送任何数据并且不希望接收ACK或者在该连接上不能使用Nagle算法。