大家好,又见面了,我是你们的朋友全栈君。
四次挥手主要用到了两个标志位(ACK&FIN):
- ACK 示意参考:TCP三次握手
- FIN: 终止数据传输标志位—->当FIN为1的时候代表此数据为终止断开连接的请求
四次挥手流程:
由于TCP连接是双向传输的对等的模式即双工 wiki百科定义:
全双工(full-duplex)的系统允许二台设备间同时进行双向资料传输。全双工的系统可以用复线铁路类比。两个方向的车辆因使用不同的轨道,因此不会互相影响。
一般的电话、手机就是全双工的系统,因为在讲话时同时也可以听到对方的声音
意思是说双方都可以同时向对方发送或接收数据。当客户端要关闭连接时,会发送请求告知服务器我要关闭连接了。这时服务器会回一个确认数据,这时客户端到服务器的连接关闭。但是服务器到客户端的连接并没断开仍然可继续传输数据,等到服务器发送完了所有的数据后,会发送一个FIN段来关闭此方向上的连接。客户端发送ACK确认关闭连接 此时双方的连接都关闭了即挥手成功
第一次挥手:
客户端向服务器请求断开连接
- seq:我(client)这条数据的序列号是300
- FIN:我(client)已经没有数据给你发送了 我要断开连接
当服务器收到客户端终止连接请求的时候需要做出响应即第二次挥手
第二次挥手:
服务器表示已经收到了客户端断开连接的请求
- ack: 我(server)已经收到你(client)序列号为300的数据了
- ACK:服务器表示你(client)断开连接的请求我(server)这边已经正确收到了
至此客户端到服务器的连接关闭,但服务器还存在部分数据没有发送给客户端的情况 当服务器发送完成数据会向客户端发送断开连接的请求即第三次挥手
第三次挥手:
服务器收到客户端断开连接且已经没有数据需要发送给客户端的时候向客户端请求断开连接
- seq:我(server)这条数据的序列号400
- FIN:我(server)已经没有数据给你发送了 我要断开连接
当客户端收到服务器终止连接请求的时候需要做出响应即第四次挥手
第四次挥手:
服务器表示已经收到了客户端断开连接的请求
- ack: 我(client)已经收到你(server)序列号为400的数据了
- ACK:客户端表示你(server)断开连接的请求我(client)这边已经正确收到了
至此服务器到客户端的连接关闭 客户端到服务器的连接也关闭了 四次挥手保证了双端正确的断开连接
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/139535.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...