TCP的定时器-jpeg标准的中文文档pdf
第25章 TCP的定时器
25.1 引言
从本章起,我们开始详细讨论TCP的实现代码,首先熟悉一下在绝大多数TCP函数里都会遇到的各种定时器。TCP为每条连接建立了七个定时器。按照它们在一条连接生存期内出现的次序,简要介绍如下。
1) “连接建立(connection establishment)”定时器 在发送SYN报文段建立一条新连接时启动。如果没有在75秒内收到响应,连接建立将中止。你想知道更多关于这个定时器的工作原理吗?你可以查看这篇计算机网络TCP协议分析。
2) “重传(retransmission)”定时器 在TCP发送数据时设定。如果定时器已超时而对端的确认还未到达,TCP将重传数据。重传定时器的值(即TCP等待对端确认的时间)是动态计算的,取决于TCP为该连接测量的往返时间和该报文段已被重传的次数。更多细节请参阅TCP IP网络协议。
3) “延迟ACK(delayed ACK)”定时器 在TCP收到必须被确认但无需马上发出确认的数据时设定。TCP等待200 ms后发送确认响应。如果,在这200 ms内,有数据要在该连接上发送,延迟的ACK响应就可随着数据一起发送回对端,称为捎带确认。关于这种机制的详细分析,你可以参考网络协议TCP IP实验三TCP协议分析实验。
4) “持续(persist)”定时器 在连接对端通告接收窗口为0,阻止TCP继续发送数据时设定。由于连接对端发送的窗口通告不可靠(只有数据才会被确认,ACK不会被确认),允许TCP继续发送数据的后续窗口更新有可能丢失。因此,如果TCP有数据要发送,但对端通告接收窗口为0,则持续定时器启动,超时后向对端发送1字节的数据,判定对端接收窗口是否已打开。与重传定时器类似,持续定时器的值也是动态计算的,取决于连接的往返时间,在5秒到60秒之间取值。更详细的解释可查看计算机网络复习笔记- TCP/IP协议详解。
5) “保活(keepalive)”定时器 在应用进程选取了插口的SO_KEEPALIVE选项时生效。如果连接的连续空闲时间超过2小时,保活定时器超时,向对端发送连接探测报文段,强迫对端响应。如果收到了期待的响应,TCP可确定对端主机工作正常,在该连接再次空闲超过2小时之前,TCP不会再进行保活测试。如果收到的是其他响应,TCP可确定对端主机已重启。如果连续若干次保活测试都未收到响应,TCP就假定对端主机已崩溃,尽管它无法区分是主机故障(系统崩溃而尚未重启),还是连接故障(中间的路由器发生故障或电话线断了)。关于保活定时器的实际应用,推荐阅读基于TCP协议网络聊天程序计算机网络课设。
6) FIN_WAIT_2定时器 当某个连接从FIN_WAIT_1状态变迁到FIN_WAIT_2状态(图24-15),并且不能再接收任何新数据时(意味着应用进程调用了close,而非shutdown,没有利用TCP的半关闭功能),FIN_WAIT_2定时器启动,设为10分钟。定时器超时后,重新设为75秒,第二次超时后连接被关闭。加入这个定时器的目的是为了避免如果对端一直不发送FIN,某个连接会永远滞留在FIN_WAIT_2状态。更多细节请看TCP IP网络协议课件。
7) TIME_WAIT定时器,一般也称为2MSL定时器。2MSL指两倍的MSL,24.8节定义的最大报文段生存时间。当连接转移到TIME_WAIT状态,即连接主动关闭时,定时器启动。关于TIME_WAIT定时器的深入理解,建议查看UDP TCP网络协议PPT。
每一种定时器的存在,都是为了确保TCP连接的可靠性和稳定性。如果你对这些定时器的具体实现有更多的兴趣,不妨下载相关资料进行详细阅读。