TCP 三次握手和四次挥手讲一下?
五个经典回答示范
三次握手:客户端发 SYN 带初始序号,服务器回 SYN+ACK,客户端再回 ACK,连接建立。为什么三次:双方都要确认自己和对方的收发能力,两次的话服务器无法确认客户端能收到自己的包,历史重复的 SYN 还会建立无效连接。四次挥手是因为 TCP 半关闭——被动方收到 FIN 后可能还有数据要发,先回 ACK,发完再发自己的 FIN。
我会把 TIME_WAIT 讲透:主动关闭方发完最后 ACK 要等 2MSL,一是保证最后的 ACK 丢失后能重收 FIN 重发,二是让旧连接的数据在网络中消亡,避免污染相同四元组的新连接。实践中处理过短连接风暴导致 TIME_WAIT 数万的问题:改长连接复用、开启端口范围扩容,而不是简单回收 TW。
握手挥手我会延伸到工程关联:握手成本与连接复用——HTTP keep-alive、HTTP2 单连接多路复用都是在摊薄握手开销;TLS 结合时握手套握手怎么优化——TCP Fast Open、TLS1.3 与 0-RTT;拥塞控制在连接建立后的慢启动对首包的影响。把协议行为落到性能与体验,是这道题的高级答法。
追问『SYN 洪泛攻击』:半连接队列被打满,防御是 syncookie——不保存半连接状态,把信息编码进序号;『大量 CLOSE_WAIT 说明什么』:被动关闭方应用没调 close,代码泄漏,是应用层 bug 信号;『RST 出现的场景』:访问未监听端口、异常终止、防火墙拦截。
『三次握手就是客户端问一下、服务器答一下、客户端再确认一下,很礼貌,四次挥手就是再多确认两次,协议设计者规定的,背下来就行。』——点评:用『礼貌』解释协议,说明不理解设计动机——确认能力与历史连接问题;『背下来就行』的态度直接暴露知其然不知其所以然。
- 打开 模拟练习,选择「后端开发」方向,限时 3 分钟作答本题。
- 对照上方答题框架,逐点检查:哪些要素没覆盖、哪里表达啰嗦。
- 用自己项目的真实经历替换框架中的占位内容,重讲一遍并录音回听。
这类题在真实面试中常被追问细节,
建议进入限时模式练一遍。