分享

TCP定时器

 昵称45777050 2018-05-11

Tcp为每个连接建立了七个定时器。按照它们在一条连接生存期内出现的次序,简要介绍如下:
1)“连接建立(connection establishment)”定时器在发送syn报文段建立一条新连接时启动。如果在75s内未收到响应,连接建立将中止。
2)“重传(retransmission)”定时器在Tcp发送数据时设置。如果定时器已超时而对端的确认还未到达,Tcp将重传数据。重传定时器的值是动态计算的,取决于Tcp为该连接测量的往返时间和报文段已被重传的次数。
3)“延时Ackdelayed Ack)”定时器在Tcp收到必须被确认但无需马上发出确认的数据时设定。Tcp等待200ms后发送确认响应。如果,在这200ms内,有数据要在该连接上发送,延迟的Ack响应就可随着数据一起发送到对端,称为捎带确认。
4)“持续(persist)”定时器在连接对端通告接收窗口为0,阻止Tcp继续发送数据时设定。由于连接对端发送的窗口通告不可靠(只有数据才会被确认,Ack不会被确认),允许Tcp继续发送数据的后续窗口更新有可能丢失。因此,如果Tcp有数据要发送,但对端通告接收窗口为0,则持续定时器启动,超时后向对端发送1字节的数据,判断对端接收窗口是否已打开。与重传定时器类似,持续定时器的值也是动态计算的,取决于连接的往返时间,在5s60s之间取值。
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分钟。定时器超时后,重新设为75s,第二次超时后连接被关闭。加入这个定时器的目的是为了避免如果对端一直不发送FIN,某个连接会永远滞留在FIN_WAIT_2状态。
​7)TIME_WAIT定时器,一般也称为2MSL定时器。2MSL指两倍的MSL。当连接转移到TIME_WAIT状态,即连接主动关闭时,定期器启动。连接进入TIME_WAIT状态时,定时器设置为1分钟,超时后,Tcp控制块和Internet PCB被删除,端口号可重新使用。

​Tcp包括两个定时器函数:一个函数每200ms调用一次(快速定时器);另外函数每500ms调用一次(慢速定时器)。延迟Ack定时器与其他6个定时器有所不同:如果某个连接上设定了延时Ack定时器,那么下次200ms定时器超时后,延迟的Ack必须被发送(Ack的延迟时间必须在0-200ms之间)。其他的定时器每500ms递减一次,计数器为0时,就触发相应的动作。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多