在计算机网络中,TCP(传输控制协议)通过三次握手建立连接,通过四次挥手终止连接。这两个过程是确保数据可靠传输的核心机制,下面从原理、步骤和应用场景展开分析。
一、三次握手:建立连接的“默契确认”
1. 第一次握手(SYN)
客户端发送一个SYN(同步)报文,携带随机生成的初始序列号(如x=1234567
),进入SYN_SENT
状态,等待服务器确认。
作用:表明客户端请求建立连接,并同步序列号。
2. 第二次握手(SYN-ACK)
服务器收到SYN报文后,回复一个SYN-ACK报文,携带自己的初始序列号(如y=7654321
)和确认号ack=x+1
,进入SYN_RECV
状态。
作用:确认收到客户端请求,并同步自身序列号。
3. 第三次握手(ACK)
客户端收到SYN-ACK报文后,发送ACK报文确认服务器的序列号(ack=y+1
),进入ESTABLISHED
状态。服务器收到ACK后也进入该状态,连接建立完成。
作用:确保双方序列号一致,防止旧连接干扰(如历史报文延迟到达)。
核心意义
- 同步序列号:为后续数据传输提供顺序依据。
- 验证可达性:三次交互确认双方通信正常。
- 防止半开连接:避免无效请求占用资源。
二、四次挥手:优雅断连的“礼貌告别”
1. 第一次挥手(FIN)
主动关闭方(如客户端)发送FIN报文,表示数据发送完毕,进入FIN_WAIT_1
状态。
注意:此时客户端仍可接收数据。
2. 第二次挥手(ACK)
被动方(服务器)收到FIN后,发送ACK确认(ack=u+1
),进入CLOSE_WAIT
状态,客户端进入FIN_WAIT_2
状态。
作用:确认收到关闭请求,但允许被动方继续发送残留数据。
3. 第三次挥手(FIN)
被动方完成数据发送后,发送FIN报文,进入LAST_ACK
状态。
注意:全双工特性要求双方独立关闭连接。
4. 第四次挥手(ACK)
主动方收到FIN后,发送ACK确认(ack=w+1
),进入TIME_WAIT
状态,等待2MSL(约4分钟)后关闭。被动方收到ACK后立即关闭。
作用:确保ACK可靠传输,避免旧连接报文干扰新连接。
核心意义
- 全双工关闭:允许双方独立完成数据传输。
- 防止数据丢失:TIME_WAIT状态确保延迟报文被丢弃。
- 资源释放:彻底关闭连接,避免端口占用。
三、为什么需要三次握手?为什么四次挥手?
- 三次握手:两次握手可能导致旧连接干扰(如延迟报文被误认为新请求),三次交互可避免此类问题。
- 四次挥手:TCP是全双工协议,需分别关闭双向通道;若仅两次挥手,被动方可能仍有数据未发送。
四、总结
三次握手与四次挥手是TCP协议可靠性的基石:
- 建立连接:通过序列号同步和状态确认,确保双方准备就绪。
- 断开连接:通过全双工关闭和超时机制,避免资源泄漏和数据丢失。
这两个过程虽然增加了通信开销,却为互联网数据传输提供了坚实的保障。