TCP/IP协议 四次挥手

刚开始双方都处于 establised 状态,假如是客户端先发起关闭请求的,则:

1、第一次挥手:客户端发送一个 FIN 报文,在报文里面FIN标志位置1,也会指定一个序列号。此时客户端处于FIN_WAIT1状态;

2、第二次挥手:当服务端收到这报文之后,我就知道了客户端想要和我断开连接,但是此时服务端不一定能做好准备,因为当客户端发起断开连接的时候,对于服务端而言它极有可能有未发送完的的消息,它还要继续发送;所以此时服务端会发送 ACK 报文,且把客户端的序列号值 + 1 作为 ACK 报文中ack值,表明已经收到客户端的报文了,即告诉客户端,我知道你要和我断开连接了,但是我这还可能没有做好准备,你还需要等我一下,等会我会告诉你,此时服务端处于CLOSE_WAIT状态;

3.第三次挥手:如果服务端也想断开连接了,和客户端的第一次挥手一样,发给 FIN 报文,且指定一个序列号,这个报文表示了服务端已经做好了断开连接的准备。此时服务端处于LAST_ACK状态;

4.第四次挥手:客户端收到 FIN 之后,一样发送一个 ACK 报文作为应答,且把服务端的序列号值 + 1 作为自己 ACK报文中ack的值,此时客户端处于 TIME_WAIT状态;需要过一阵子以确保服务端收到自己的 ACK 报文之后才会进入 CLOSED 状态;

5.服务端收到 ACK 报文之后,就处于关闭连接了,处于 CLOSED 状态。

一共有四次,通过这四次的相互沟通和连接,我就知道了,不管是服务端还是客户端都已经做好了断开连接的准备,于是连接就可以被断开了。

猜你喜欢

转载自blog.csdn.net/weixin_43595755/article/details/121857677