四次挥手,江湖再见
一旦有了感情(连接),再分手就难了,难到需要四次挥手。不像 UDP 那样,没有连接,说分就分。
当客户端和服务端双方发送数据完成后,一般会由客户端主动发起断开连接的请求,当然,也有少数情况是服务端主动发起。
以最常见的客户端发起断开连接为例,说一下四次挥手的过程。
1、第一次挥手
客户端设置序号(Sequence Number)和确认序号(Acknowledgment Number),发送一个 FIN 段给服务器。这时,客户端进入 FIN_WAIT_1状态,意味着客户端没有数据要发送了。
2、第二次挥手
服务端收到 FIN 报文段,向客户端发送一个 ACK 段,客户端进入 FIN_WAIT_2 状态。表示服务端已同意连接关闭请求。
3、第三次挥手
服务端向客户端发送 FIN 段,请求关闭连接,同时服务端进入 LAST_ACK 状态。
4、第四次挥手
客户端收到服务端发来的 FIN 段,向服务端发送 ACK 段,之后客户端进入TIME_WAIT状态。服务端收到客户端的ACK 段以后,就关闭连接。
上面就是由客户端主动发起关闭连接的过程。
半关闭状态
TCP 是一个全双工的字节流服务,意思就是说两个端点都可以同时发送和接收消息。
正常情况下需要四次挥手才能完成连接的完全断开。但是有一种情况是这样的,只主动关闭自己到对方的连接,但是对方还是可以给自己发送数据