tcp握手和挥手对应的timeout

1. TCP 握手(三次握手)超时
  • (1) SYN 发送超时(主动连接方)
    状态:客户端发送 SYN 后进入 SYN_SENT,等待 SYN+ACK
    tcp_syn_retries

  • (2) SYN+ACK 接收超时(服务端)
    状态:服务端发送 SYN+ACK 后进入 SYN_RECV,等待 ACK
    tcp_synack_retries

2. TCP 挥手(四次挥手)超时
  • (1) FIN_WAIT1 超时(主动关闭方)
    状态:主动方发送 FIN 后进入 FIN_WAIT1,等待 ACK 或 FIN+ACK。
    无直接可调参数,依赖 tcp_retries2(默认 15 次,约 924秒),超时后强制关闭连接
  • (2) FIN_WAIT2 超时(主动关闭方)
    状态:收到 ACK 后进入 FIN_WAIT2,等待对端 FIN
    tcp_fin_timeout
  • (3) CLOSE_WAIT 超时(被动关闭方)
    状态:被动方收到 FIN 后进入 CLOSE_WAIT,等待应用调用 close()
    由应用控制,无内核超时。若应用未关闭,连接会一直挂起(需代码层面解决)
  • (4) LAST_ACK 超时(被动关闭方)
    状态:被动方发送 FIN 后进入 LAST_ACK,等待最终 ACK
    依赖 tcp_retries2
  • (5) TIME_WAIT 超时(主动关闭方)
    状态:主动方发送最终 ACK 后进入 TIME_WAIT
    固定值:2 * MSL(默认为 60秒,MSL=30s),不可动态修改(需重新编译内核调整 MSL)
3. 可调与不可调参数总结
超时阶段                可调参数                    默认值   是否可修改
SYN 重传          tcp_syn_retries                 6次(约127秒)   ✅ 可调
SYN+ACK 重传      tcp_synack_retries              5次(约180秒)   ✅ 可调
FIN_WAIT2 超时    tcp_fin_timeout                 60秒            ✅ 可调
LAST_ACK 重传    依赖 tcp_retries2                15次(约924秒)       ✅ 可调
TIME_WAIT 时长    依赖 MSL                        60秒(2*MSL)    ❌ 需改内核常量
CLOSE_WAIT 超时    无                             无限             ❌ 依赖应用层

4. 握手挥手
image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容