TCP一共有四个主要的定时器,前面已经讲到了一个--超时定时器--是TCP里面最复杂的一个,另外的三个是: 算法
其中坚持定时器用于防止通告窗口为0之后双方互相等待死锁的状况;而保活定时器则用于处理半开放链接 缓存
坚持定时器的原理是简单的,当TCP服务器收到了客户端的0滑动窗口报文的时候,就启动一个定时器来计时,并在定时器溢出的时候向向客户端查询窗口是否已经增大,若是获得非零的窗口就从新开始发送数据,若是获得0窗口就再开一个新的定时器准备下一次查询。经过观察能够得知,TCP的坚持定时器使用1,2,4,8,16……64秒这样的普通指数退避序列来做为每一次的溢出时间。 服务器
糊涂窗口综合症 网络
TCP的窗口协议,会引发一种一般叫作糊涂窗口综合症的问题,具体表现为,当客户端通告一个小的非零窗口时,服务器马上发送小数据给客户端并充满其缓冲区,一来二去就会让网络中充满小TCP数据报,从而影响网络利用率。对于发送方和接收端的这种糊涂行为。TCP给出了一些建议(或者是规定)。 spa
ok,如今咱们回忆一下,能够发现TCP的不少规定都是为了在一次传送中发送尽可能多的数据,例如捎带ACK数据报文的策略,Nagle算法,重传时发送包含原数据报文的策略,等等。 io
保活定时器更加的简单,还记得FTP或者Http服务器都有Sesstion Time机制么?由于TCP是面向链接的,因此就会出现只链接不传送数据的“半开放链接”,服务器固然要检测到这种链接而且在某些状况下释放这种链接,这就是保活定时器的做用。其时限根据服务器的实现不一样而不通。另外要提到的是,当其中一端若是崩溃并从新启动的状况下,若是收到该端“前生”的保活探察,则要发送一个RST数据报文帮助另外一端结束链接。 原理