- 四次挥手的过程
假设客户端主动发起。
-
第一次挥手:客户端向服务器 发送 FIN,表示 自己要断开数连接。随后,客户端 进入 FIN-WAIT-1 状态;服务器收到后,变为CLOSE_WAIT状态
-
第二次挥手:服务器 发送ACK 作为响应,客户端收到后 进入 FIN-WAIT-2状态
-
第三次挥手:服务器 发送 FIN 给客户端,表示自己也要断开连接,发送后 服务器 变为 LAST-ACK 状态
-
第四次挥手:客户端 收到 FIN报文后,发送ACK 作为回应,随后进入 TIME-WAIT 状态。服务器 ACK 后 进入CLOSE 状态。客户端 等待2MSL后没有收到回复,则进入CLOSE状态,关闭连接。
- 为什么需要四次挥手
-
如果改成三次挥手的话,一般指的是第二次和第三次挥手的合并,也就是 ACK报文和FIN报文 合并。第一次挥手,客户端发送FIN报文,表示客户端不能再发送数据了,但还可以接收数据。第二次挥手的ACK表示 服务器收到了客户端的FIN报文,而此时 服务端可能还有数据需要处理和发送,把这些数据发送完毕后 才会发送FIN报文。
-
所以说,在 ACK 和 FIN 之间,服务器可能还需要处理和发送数据,所以是四次挥手。当这两者之间没有数据要发送时,其实是可能会发送三次挥手的。