TCP协议通过四种核心计时器来保障数据传输的可靠性和连接的有效管理。下面的表格汇总了它们的基本信息,方便你快速把握要点。
| 计时器名称 | 主要触发场景 | 核心功能 | 典型设置/行为 |
|---|---|---|---|
| 重传计时器 | 发送数据后等待确认 | 防止数据包丢失,确保可靠性 | 超时未收到确认则重传,时间基于RTT动态计算 |
| 坚持计时器 | 收到接收方"零窗口"通知 | 解决"零窗口"死锁,保持窗口更新 | 定时发送窗口探测报文,采用指数退避策略 |
| 保活计时器 | 连接长时间空闲 | 检测连接另一端是否依然有效 | 发送探测报文段,若多次无响应则断开连接 |
| 时间等待计时器 | 主动关闭连接后进入TIME_WAIT状态 | 保证连接彻底关闭,避免旧数据混淆 | 持续时间通常为2MSL(两倍报文最大生存时间) |
🔍 深入了解各种计时器
1. 重传计时器
这是TCP可靠传输的基石。每当发送一个数据段后,这个计时器就会启动。它的核心任务是确保数据能送达对方。关键在于超时时间(RTO) 的设置,它基于往返时间(RTT) 动态计算。如果计时器超时前收到确认(ACK),计时器关闭;如果超时仍未收到,则重传该数据段并重置计时器。为解决重传时无法确定ACK是针对哪次发送的歧义,TCP采用了Karn算法,即在计算新RTT时忽略重传报文段的样本。
2. 坚持计时器
此计时器专门解决接收方通告零窗口 后可能出现的死锁。当发送方收到零窗口通知,会暂停发送。如果之后接收方窗口有空间了,其发送的"窗口更新"报文若丢失,双方会陷入无限等待:接收方等数据,发送方等窗口更新。此时,坚持计时器发挥作用,它到期后,发送方会发送一个探测报文 (仅1字节),提醒接收端重传窗口信息。其超时时间也采用指数退避策略增长,以避免过多探测报文加重网络负担。
3. 保活计时器
用于检测长时间空闲的连接是否有效。服务器端通常每2小时(默认值)若未收到客户端任何数据,会发送一个探测报文。客户端主机可能的状态包括:
-
正常运行且可达:服务器收到正常响应,计时器复位。
-
崩溃或不可达:服务器收不到响应,在连续发送多个(如10个)探测报文均失败后,判定连接失效并中断。
需要注意的是,保活功能可能增加系统负担,且TCP标准不建议默认开启,应用层的心跳机制常是更好选择。
4. 时间等待计时器
在主动关闭连接的一方进入TIME_WAIT 状态时启动,持续时间为2MSL。这段时间有两个关键作用:
-
确保最后的ACK能到达:如果被动关闭方未收到对FIN的ACK,会重传FIN,主动关闭方还能响应。
-
让旧连接报文彻底消散:防止之前连接延迟的报文段被新建立的相同连接错误接收。
💎 总结
这四个计时器各司其职又相互配合:重传计时器 保障单次发送可靠;坚持计时器 确保流量控制机制不僵死;保活计时器 管理连接生命周期;时间等待计时器保证连接优雅关闭。它们共同构成了TCP协议可靠、稳定特性的重要基础。
希望这些解释能帮助你清晰地理解TCP的四种计时器。如果对某个细节还想深入了解,我们可以继续探讨。