TCP四次挥手

 

 关于TCP三次握手以及为什么要握三次的原因可以看我的另外一篇博客《TCP三次握手》

第一次挥手:

在完成数据传输后客户端和服务端都可以发起关闭连接请求,假设是客户端发起到的。客户端给服务端发送了一个FIN包表示要关闭连接,客户端自己进入终止等待1状态。因为客户端就好比谈恋爱要分手总得要告知下对方,看下对方什么反应吧。

第二次挥手

服务端接收到后,给客户端发送一个ACK包,表示我知道了,我这还要进行一些收尾工作,发一些还没发完的数据,你给我等着。于是服务端进入了关闭等待状态,此时它还可以发表临终遗言,还可以发数据,客户端还可以接收数据,听听看服务端还有啥说的没有,就进入终止等待2状态。

第三次挥手,

服务端数据处理完后,就可以给客户端发送一个FIN包,告知客户端我这没啥说的了。

第四次挥手

客户端收到FIN包后,给服务端发送一个ACK包,确认一下我知道这边关好了,服务端收到ACK包后立刻关闭连接,客户端则进入超时等待状态,过了超时时间后客户端就关闭连接。

 

 

图来源于《“三次握手,四次挥手”这么讲,保证你忘不了”》

 

问题少年:为什么要客户端最后要进行超时等待?

答:因为如果客户端一发送ACK后立马关闭连接,那如果就这么不巧,服务端就是没收到这个ACK包,那么服务端将一直苦苦地等待,一直狂call客服端,你那边关了没有啊?咋不理我啊?而此时客户端早已跑路。如果客户端有等一下,在这超时时间内,服务端如果没收到ACK包,就可以回到第三步重发FIN包,客户端则会响应这个FIN包。

问题少年:简单点说TCP四次挥手

答:

房东:今天退租是吗?

租客:是的,我收拾一下东西。

租客:我收拾好了。

房东:好,那咱们就退租了。

 

posted @ 2022-04-06 23:16  Sofiaღ  阅读(26)  评论(0编辑  收藏  举报