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 多通常是应用未正确关闭。
专题路径
上一篇
TCP 与 UDP