写点什么

TCP 四次挥手

用户头像
W🌥
关注
发布于: 23 小时前

什么是四次挥手?

  • 四次挥手即终止 TCP 连接,就是指断开一个 TCP 链接时,需要客户端和服务端总共发送四个包以确认连接的断开


如图:

注:中断连接端可以是客户端,也可以是服务器端

  • 第一次挥手:

客户端(以客户端请求中断连接为例)发送一个 FIN = M 的报文,用来关闭客户端到服务器端的数据传送,客户端进入 FIN_WAIT_1 状态。“我客户端没有数据发给你了,但是你服务器端如果还有数据没有发送完成,不用急着关闭连接,可以继续发送数据”

  • 第二次挥手

服务器端收到 FIN 后,先发送一个 ack = M + 1,告诉客户端,“你的请求我收到了,但是我还没准备好,请你继续等待我的消息”。这时候客户端进入 FIN WAIT 2 的状态,继续等待服务器端的 FIN 报文。

  • 第三次

当服务器端确定数据已经发送完成,则向客户端发送 FIN = N 的报文,告诉客户端,“我这边数据发完了,准备好关闭连接了”。然后服务器端进入 LAST_ACK 状态。

  • 第四次

客户端收到 FIN = N 报文后,就知道可以关闭连接了,但它还是不相信网络,怕服务器端不知道要关闭,所以发送 ack = N + 1 后进入 TIME_WAIT 状态,如果服务器端没有收到 ACK 可以重传。服务器端收到 ACK 后,就知道可以断开连接了。客户端在等待了一定时间后依然没有得到回复,则证明服务器端已经正常关闭,于是客户端也可以关闭了。至此四次挥手结束。

 

为什么要四次?

在客服端第 1 次挥手时,服务端可能还在发送数据。所以第 2 次挥手和第 3 次挥手不能合并。

发布于: 23 小时前阅读数: 5
用户头像

W🌥

关注

还未添加个人签名 2021.08.04 加入

还未添加个人简介

评论

发布
暂无评论
TCP 四次挥手