TCP 四次挥手过程?

计算机网络面试题发布于

一、过程

  1. 客户端发 FIN=1, seq=u,进入 FIN_WAIT_1。
  2. 服务端回 ACK=1, ack=u+1,进入 CLOSE_WAIT;客户端进入 FIN_WAIT_2。
  3. 服务端发完数据后发 FIN=1, seq=w,进入 LAST_ACK。
  4. 客户端回 ACK=1, ack=w+1,进入 TIME_WAIT;服务端收到后关闭。

二、为什么挥手是四次

握手时服务端 SYN+ACK 合并,挥手时 ACK 和 FIN 不能合并,因为服务端可能还有数据要发,先发 ACK 确认,数据发完再发 FIN。

三、TIME_WAIT

  • 客户端回 ACK 后等待 2MSL 才关闭。
  • 原因:确保最后一个 ACK 到达服务端(丢了可重传);让本次连接的所有报文在网络中消失,避免影响新连接。
  • 大量 TIME_WAIT 可通过 tcp_tw_reuse 优化。