TCP定时器介绍

时间:2022-08-03 23:29:13

TCP/IP中关于定时器的介绍,TCP为每条连接建立七个定时器,分别为:

    1.连接建立定时器,在发送SYN报文段建立一条新连接时启动。如果没有在75S内收到响应,连接建立将终止。

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

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

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

    5.保活定时器在应用进程选取了插口的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定时器。MSL指最大报文段生存时间。当连接转移到TIME_WAIT状态,即连接主动关闭时,定时器启动。连接进入TIME_WAIT状态时,定时器设定为1分钟,超时后,TCP控制块和InternetPCB被删除,端口号可重新使用。

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