首页/网络/协议速查/四次挥手与半关闭
TCP 与 UDP54 条

四次挥手与半关闭

关闭是全双工的:一方发 FIN 表示「我没数据要发了」,对方 ACK 后仍可继续发数据(半关闭),等它也发 FIN 才彻底关闭。

协议速查网络更新于 2026-10-12

抓包观察

抓包观察
tcpdump -nn -c 4 'tcp port 8080'
# A.51234 > B.8080: Flags [F.], seq ...      # 主动关闭
# B.8080 > A.51234: Flags [.],  ack ...      # 确认
# B.8080 > A.51234: Flags [F.], seq ...      # 反向关闭
# A.51234 > B.8080: Flags [.],  ack ...      # 最终确认
主动方状态FIN_WAIT_1 → FIN_WAIT_2 → TIME_WAIT
被动方状态CLOSE_WAIT → LAST_ACK → CLOSED
合并情况对方无数据可发时 ACK 与 FIN 常合并成一个包(看起来像三次)
被动方收到 FIN 后如果应用长时间不 close,就停在 CLOSE_WAIT——这是应用泄漏的典型信号。

易错点

  • 服务端只做关闭不读残留数据(未读缓冲还有数据时 close)可能触发 RST,表现为客户端偶发「连接被重置」

数据来源与参考

  • RFC 9293 §3.3.2
  • RFC 9293 §3.5

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌