TCP/IP学习(13)-TCP坚持定时器、TCP保活定时器,-tcp定时器


TCP一共有四个主要的定时器,前面已经提到了一个-超时定时器-是TCP里面最发杂的一个,另外三个是:

坚持定时器                         保活定时器                     2MSL定时器

其中坚持定时器用于防止通告窗口为0以后双方互相等待死锁的情况;而保活定时器则是为了处理半开放链接

1. 坚持定时器

坚持定时器的原理很简单,当TCP服务器收到了客户端的0滑动窗口报文的时候,就启动了一个定时器来计时,并在定时器溢出的时候向客户端查询窗口是否已经增大,如果得到非零的窗口就重新开始发生数据,如果得到0窗口就再开一个新的定时器准备下一次查询。通过观察可以得知,TCP坚持定时器使用1,2,4,8,16,,,,64秒这样的普通指数退避序列来作为每一次的溢出时间。

糊涂窗口综合症

TCP的窗口协议,会引起一种通常叫做糊涂窗口综合症的问题,具体表现为,当客户端通告一个小的非零窗口时,服务器立刻发送小数据给客户端并充满其缓冲区,一来二去就会让网络中充满小TCP数据报,从而影响网络利用率。对于发送方和接收方的这种糊涂行为,TCP给出了一些建议(或规定)。

1. 接收方不通告小窗口。通常的算法是接收方不通告一个比当前窗口大的窗口(可以为0),除非窗口可以增加一个报文段的大小

(也就是将要接收的MSS)或者可以增加接收方的缓存空间的一半,不论实际有多少。

2. 发送方避免出现糊涂窗口综合症的措施是只有以下条件之一满足时才发送数据:

(a) 可以发送一个满长度的报文段

(b) 可以发送至少是接收方通告窗口大小一半的报文段

(c) 可以发送任何数据并且不希望接收ACK(也就是说,我们没有还未被确认的数据)或者该连接上不能使用Nagle算法

可以发现TCP很多规定都是为了在一次传送中发送尽量多的数据,如捎带ACK报文的策略,Nagle算法,重传时发送包含原数据报文的策略等。

2. 保活定时器

保活定时器更加简单,还记得FTP或者HTTP服务器都有SesstionTime机制吗?因为TCP是面向连接的,所以就会出现只连接不传数据的“半开放连接”,服务器当然要检测到这种连接并且在某些情况下释放这种连接,这就是保活定时器的作用。其时限根据服务器的实现不同而不同。另外,当其中一端如果崩溃并重新启动的情况下,如果收到该端“前生”的保活探索,则要发送一个RST数据报文帮助另一端结束连接。

相关内容

    暂无相关文章