TCP 内部维护了如下七种定时器:
- 建立连接定时器:主要用于 TCP 三次握手时,发送完 SYN 包后启动定时器,如果 3S 内没有收到 ACK,重发 SYN 包,直到达到最大重传此时
- 重传定时器:主要用于 TCP 超时重传,TCP 发送报文时创建重传计时器,指定时间内返回则撤销定时器,否则超时重发并复位定时器
- 坚持定时器:TCP 通过让接收方指明窗口大小实现流量控制,当接收方窗口已满时告诉发送方暂时不要发送,直到接收方窗口不满时返回 ACK 报文告诉发送方可以发送数据。为了防止该 ACK 报文丢失,双方都一直等待,发送方会启动坚持定时器,定期检查接收方窗口大小,判断是否可以发送数据
- 延迟应答定时器:延迟应答时用到,方便不直接返回 ACK 报文,而是等会判断对方是否需要某些数据,如果有需要,就连数据带 ACK 一起返回,减少交互的次数
- 保活定时器:TCP 连接建立后,当长期没有数据交互时,通过它判断对端是否存活
- FIN-WAIT-2 定时器:为了避免四次挥手中,被动关闭的一方异常停止,主动关闭的一方永远收不到 FIN 报文。该定时器的作用就是避免这种情况,达到指定时间没收到 FIN 就直接断开连接
- TIME-WAIT 定时器:等待 2 * MSL 时间,保证服务端收到 ACK 报文并正常进入 Close 状态
|