1) 【一句话结论】TCP通过三次握手建立可靠连接,四次挥手终止连接,确保数据可靠传输与资源释放,是设备与服务器通信时保障通信稳定的基础机制。
2) 【原理/概念讲解】
TCP三次握手是建立连接的过程,核心是同步双方序列号并确认连接有效性:
- 第一步(SYN):客户端发送“同步序列号”报文(SYN=1,初始序列号seq=x),请求建立连接;
- 第二步(SYN-ACK):服务器收到后,回复“同步确认”报文(SYN=1,ACK=1,确认号=x+1,自身序列号seq=y),表示同意建立连接并同步自身序列号;
- 第三步(ACK):客户端收到后,发送“确认”报文(ACK=1,确认号=y+1),完成连接建立。
类比:两人打电话,先“打招呼(SYN)”,对方“回应并确认(SYN-ACK)”,你“再确认(ACK)”,连接建立。
TCP四次挥手是终止连接的过程,因TCP全双工(双方可同时收发数据),需双方都释放资源:
- 第一步(FIN):主动关闭方(如客户端)发送“终止”报文(FIN=1,序列号seq=z),表示无数据发送;
- 第二步(ACK):被动方(服务器)回复“确认”报文(ACK=1,确认号=z+1),表示收到终止请求;
- 第三步(FIN):被动方发送自身“终止”报文(FIN=1,序列号seq=w);
- 第四步(ACK):主动方回复“确认”报文(ACK=1,确认号=w+1),完成连接终止。
为什么需要四次?因为全双工模式下,双方都有数据传输,需各自关闭发送通道并确认对方已关闭,避免资源占用。
结合设备与服务器通信场景:比如设备(客户端)访问服务器(服务器)的API,三次握手建立连接后,设备发送请求、服务器返回响应,数据传输过程中若出现异常(如设备断电),三次握手能保证连接的可靠性(防止已失效的连接请求报文干扰);四次挥手则确保连接完全断开,避免服务器因资源未释放而无法处理新请求。
3) 【对比与适用场景】
| 特性 | 三次握手(建立连接) | 四次挥手(终止连接) |
|---|
| 目的 | 同步序列号,建立可靠连接 | 双向释放资源,终止连接 |
| 步骤 | SYN → SYN-ACK → ACK | FIN → ACK → FIN → ACK |
| 作用 | 防止已失效连接请求干扰 | 确保全双工下双方资源释放 |
| 场景 | 客户端与服务器建立通信 | 客户端/服务器主动关闭连接 |
4) 【示例】
以HTTP请求为例:
- 三次握手:设备(客户端)发送SYN(seq=100),服务器回复SYN-ACK(seq=200,ack=101),设备ACK(ack=201);
- 数据传输:设备发送GET请求(seq=101),服务器返回响应(seq=201,ack=102);
- 四次挥手:设备发送FIN(seq=103),服务器ACK(ack=104);服务器发送FIN(seq=205),设备ACK(ack=206)。
5) 【面试口播版答案】
“TCP的三次握手是为了建立可靠连接,步骤是客户端发送SYN,服务器返回SYN-ACK,客户端ACK,完成连接。四次挥手是因为TCP全双工,双方都要关闭,步骤是客户端FIN,服务器ACK,服务器FIN,客户端ACK,确保资源释放。比如设备访问服务器时,三次握手建立连接,保证数据可靠传输,四次挥手断开连接,避免资源占用。”
6) 【追问清单】
- 问:为什么三次握手不能是两次?
答:防止已失效的连接请求报文突然到达服务端,导致服务端误认为客户端又发起连接请求,造成错误。
- 问:四次挥手为什么是四次而不是三次?
答:TCP是全双工模式,双方都有数据传输,需双方都发送FIN和ACK,确保双方资源完全释放。
- 问:如果客户端发送SYN后,服务器没有响应,会发生什么?
答:客户端超时重传SYN报文,直到成功建立连接。
7) 【常见坑/雷区】
- 混淆三次握手与四次挥手的步骤(如认为四次挥手是三次);
- 认为三次握手是为了传输数据(实际是建立连接);
- 忘记四次挥手的原因是全双工(而非单工);
- 举例错误(如用单工通信场景解释四次挥手)。