什么是三次握手和四次挥手?它们在 TCP 连接中的作用是什么?
推荐答案
TCP 的三次握手与四次挥手详解
总结回答
三次握手是 TCP 建立连接的过程,确保双方都能发送和接收数据;四次挥手是 TCP 断开连接的过程,确保双方都能优雅地关闭连接。它们共同保证了 TCP 连接的可靠性和有序性。
三次握手详解
三次握手是 TCP 建立连接的标准过程:
- 第一次握手:客户端发送 SYN=1 和初始序列号 seq=x 的报文给服务器,进入 SYN_SENT 状态
- 第二次握手:服务器收到 SYN 后,发送 SYN=1, ACK=1, ack=x+1 和初始序列号 seq=y 的报文,进入 SYN_RCVD 状态
- 第三次握手:客户端收到后,发送 ACK=1, ack=y+1 的报文,进入 ESTABLISHED 状态;服务器收到后也进入 ESTABLISHED 状态
作用:
- 确认双方的发送和接收能力都正常
- 同步初始序列号,为后续可靠传输做准备
- 防止历史重复连接初始化造成的资源浪费
四次挥手详解
四次挥手是 TCP 断开连接的标准过程:
- 第一次挥手:主动关闭方发送 FIN=1 和序列号 seq=u 的报文,进入 FIN_WAIT_1 状态
- 第二次挥手:被动关闭方收到 FIN 后,发送 ACK=1, ack=u+1 的报文,进入 CLOSE_WAIT 状态;主动方收到后进入 FIN_WAIT_2 状态
- 第三次挥手:被动关闭方准备好关闭后,发送 FIN=1, ACK=1, seq=v, ack=u+1 的报文,进入 LAST_ACK 状态
- 第四次挥手:主动关闭方收到后,发送 ACK=1, ack=v+1 的报文,进入 TIME_WAIT 状态;被动方收到后关闭连接
作用:
- 确保双方都能完成数据传输后再关闭连接
- 处理网络中可能滞留的报文,避免影响新连接
- 保证连接的可靠释放,防止出现半关闭状态
为什么是三次握手和四次挥手
- 三次握手:因为第二次握手时服务器可以同时发送 SYN 和 ACK,合并为一个报文
- 四次挥手:因为 TCP 是全双工的,每个方向需要单独关闭。被动关闭方收到 FIN 后可能还有数据要发送,所以 ACK 和 FIN 不能合并发送