← 返回
408

TCP 三次握手与四次挥手

首发 2026/05/28 阅读 0 评论 0 更新 2026/05/28

TCP 三次握手与四次挥手

1. 一句话总结

三次握手确认双方收发能力并同步初始序列号,四次挥手让双方分别关闭发送方向。

2. 通俗解释

建立连接像双方确认我能发、你能收、你也能发、我也能收。关闭连接像两个人分别说我说完了,但对方可能还有话要说,所以常要四步。

3. 核心概念

  • SYN:建立连接请求标志。
  • ACK:确认标志。
  • seq:序列号,标识字节流位置。
  • 三次握手:SYN → SYN+ACK → ACK。
  • 四次挥手:FIN → ACK → FIN → ACK。
  • TIME_WAIT:主动关闭方等待 2MSL。
  • CLOSE_WAIT:被动方收到 FIN 但应用未关闭。

4. 底层原理

  • 三次握手确认双方发送和接收能力。
  • 两次握手无法防止历史连接请求造成误连接。
  • TCP 全双工,两个方向要分别关闭。
  • TIME_WAIT 保证最后 ACK 可重传,并让旧报文过期。
  • 大量 CLOSE_WAIT 通常说明应用没有正确 close。

5. 面试标准回答

TCP 三次握手用于建立可靠连接。客户端发送 SYN 和初始序列号,服务端回复 SYN+ACK 并带上自己的初始序列号,客户端再回复 ACK。这样双方确认彼此发送和接收能力,并同步序列号。断开连接时,因为 TCP 是全双工,两个方向要分别关闭,所以通常需要四次挥手:主动方 FIN,被动方 ACK;被动方数据发完后 FIN,主动方 ACK。主动关闭方进入 TIME_WAIT 等待 2MSL,确保最后 ACK 能重传并让旧报文过期。

6. 高频追问

追问 1:TCP 三次握手与四次挥手面试第一句话怎么答?

先给结论:SYN:建立连接请求标志。 再补充它解决的问题和使用场景,避免一上来背长定义。

追问 2:它为什么需要底层机制支撑?

三次握手确认双方发送和接收能力。 面试官追问时要把“现象”落到“机制”和“代价”。

追问 3:常见误区是什么?

不要把平均情况说成绝对结论,也不要忽略边界条件、退化情况和工程成本。

追问 4:如果继续追问怎么展开?

可以沿着“定义 → 原理 → 对比 → 场景 → 缺点 → 优化”展开,重点说清:两次握手无法防止历史连接请求造成误连接。

追问 5:实际开发中怎么体现?

SYN Flood 会耗尽半连接队列,需要防护。 这类联系能把基础知识从“背概念”变成“解释工程选择”。

追问 6:回答时怎么收尾?

最后用一句话总结适用条件和代价,说明什么时候该用、什么时候不该用。

7. 易混淆点

易混点 正确理解 面试提醒
SYN 请求建立连接 消耗半连接队列资源
ACK 确认收到 握手挥手都常见
FIN 关闭发送方向 不代表马上释放所有资源
TIME_WAIT 主动关闭方等待 不是异常
CLOSE_WAIT 被动方等应用关闭 大量出现要排查代码

8. 实际开发联系

  • SYN Flood 会耗尽半连接队列,需要防护。
  • HTTP 长连接可减少频繁握手成本。
  • 大量 CLOSE_WAIT 要检查应用是否正确关闭连接。

9. 背诵速记

三次握手:SYN、SYN+ACK、ACK,确认双方收发能力并同步 seq。四次挥手是因为 TCP 全双工。TIME_WAIT 在主动关闭方,CLOSE_WAIT 多通常是应用未正确关闭。

专题路径

相关文章