标题:tcp定时器


TCP为每条连接建立了七个定时器,按照每个定时器在一条连接生存期内出现的次序依次是:

(1)连接建立(connection establishment)定时器,在发送SYN报文段建立一条新连接时启动。如果没有在75秒内收到响应,连接建立将中止。

      

(2)重传( retransmission )定时器,在TCP发送数据时设定。如果定时器已超时而对端的确认还未到达,TCP将重传数据。重传定时器的值(TCP等待对端确认的时间)是动态计算的,取决于TCP为该连接测量的往返时间和该报文段已被重传的次数。

 

(3)延迟ACK(delayed ACK)定时器,在TCP收到必须被确认但无需马上发出确认的数据时设定。TCP等待200 ms后发送确认响应。如果,在这200 ms内,有数据要在该连接上发送,延迟的ACK响应就可随着数据一起发送回对端,称为捎带确认。

 

(4)持续(persist )定时器,在连接对端通告接收窗口为0,阻止TCP继续发送数据时设定。由于连接对端发送的窗口通告不可靠(只有数据才会被确认,ACK不会被确认),允许TCP继续发送数据的后续窗口更新有可能丢失。因此,如果TCP有数据要发送,但对端通告接收窗口为0,则持续定时器启动,超时后向对端发送1字节的数据,判定对端接收窗口是否已打开。与重传定时器类似,持续定时器的值也是动态计算的,取决于连接的往返时间,在5秒到6 0秒之间取值。

 

(5)保活( keepalive )定时器,在应用进程选取了插口的SO _ KEEPALIVE选项时生效。如果连接的连续空闲时间超过2小时,保活定时器超时,向对端发送连接探测报文段,强迫对端响应。如果收到了期待的响应,TCP可确定对端主机工作正常,在该连接再次空闲超过2小时之前,TCP不会再进行保活测试。如果收到的是其他响应,TCP可确定对端主机已重启。如果连续若干次保活测试都未收到响应,TCP就假定对端主机已崩溃,尽管它无法区分是主机故障(例如,系统崩溃而尚未重启),还是连接故障(例如,中间的路由器发生故障或电话线断了)

 

(6)FIN_WAIT_2 定时器,当某个连接从FIN_WAIT_1状态变迁到FIN_WAIT_2状态,并且不能再接收任何新数据时(意味着应用进程调用了close,而非shutdown,没有利用TCP的半关闭功能)FIN_WAIT_2定时器启动,设为10分钟。定时器超时后,重新设为75秒,第二次超时后连接被关闭。加入这个定时器的目的是为了避免如果对端一直不发送FIN,某个连接会永远滞留在FIN_WAIT_2状态。

 

(7)TIME_WAIT 定时器,一般也称为2MSL定时器。2MSL指两倍MSL,即最大报文段生存时间。当连接转移到TIME_WA I T状态,即连接主动关闭时,定时器启动。



看文字不过瘾?点击我,进入周哥教IT视频教学
麦洛科菲长期致力于IT安全技术的推广与普及,我们更专业!我们的学员已经广泛就职于BAT360等各大IT互联网公司。详情请参考我们的 业界反馈 《周哥教IT.C语言深学活用》视频

我们的微信公众号,敬请关注