TCP四次挥手过程分析

tcp 四次挥手是为了关闭链接,tcp 连接是全双工的,因此每个方向都必须单独关闭,双方都可以主动关闭链接,首先发起关闭的一方执行主动关闭,而另一方执行被动关闭,关闭之后主机的资源将被释放。
四次挥手的过程如下:
第一次挥手:客户端发送一个 fin=1,sep=u 的报文告诉服务器它打算关闭连接,不再发送数据,但可以接收数据,报文发出之后客户端将连接的状态变为 fin_wait_1第二次挥手:服务端接收到客户端的 fin 报文之后,返回一个 ack=1,sep=v,acknum=u+1 的应答报文,接着服务端进入 close_wait 状态。客户端接收到服务端的 ack 应答报文后进入 fin_wait_2 状态 第三次挥手:服务器处理完数据之后,向客户端发送 fin 报文,表明它不再发送数据,接着服务端进入 last_ack 状态。 第四次挥手:客户端接收到 fin 报文后,向服务端发送 ack 应答报文,接着客户端进入 time_wait 状态,等待 2msl 一段时间后客户端自动进入 closed 状态,服务器收到 ack 应答报文后进入 closed 状态。
为什么挥手需要四次?
tcp 连接是全双工的,双方可以同时发送和接收数据。第一次客户端发送 fin 报文后只表示它不再发送数据,但还是能接受数据。服务端接收到 fin 报文,回一个 ack 应答报文,这次服务端可以还有数据需要处理和发送,等它处理完成,发送一个 fin 报文表示不再发送数据,客户端再回一个 ack 应答报文。由于服务端处理数据需要时间,因此服务端的 ack 和 fin 报文是发送的,所以需要四次挥手。
tcp 四次挥手可以变成三次挥手吗?
如果被动关闭方没有数据需要发送,并且开启了tcp 延迟确认机制,那么第二次和第三次挥手就会合并传输,四次挥手变成三次挥手。
为什么主动关闭方需要等待 2msl 后才关闭连接
msl 是报文的最大生存时间,它是任何报文在网络上存在的最大时间,超过这个时间报文将丢失。如果第四次挥手的 ack 报文丢失,被动关闭方将重发 fin 报文,主动关闭方的 time_wait 时间为 2msl 表示允许第四次挥手的 ack 报文丢失一次
为什么主动关闭方需要 time_wait 状态
防止历史连接中的数据被后续相同四元组连接错误的接收:time_wait 设置成 2msl 可以保证两个方向上发送的数据都能被丢失。
确保被动关闭方能正常关闭。
四元组指的是:目的地址、目的端口、源地址和源端口。通过四元组可以唯一确定一个连接。

GD32 MCU在家电行业的全面智能化升级中的作用表现
一文详解CMOS模拟开关
中兴Blade A7重新定义百元机
农残快检设备的简单介绍
安防与人工智能密切相关,是人工智能的主要落脚点
TCP四次挥手过程分析
三星显示器获得向华为公司供应许可
2020中国企业专利实力500强发布 前三名是华为、中兴通讯、京东方
中国三家新造车势力的潜力评估
华为发布了首款光纤传感产品OptiXsense EF3000
储能bms是什么意思
报警器8脚otp声音ic,NV020C漏电报警器语音芯片方案
光电转换器的作用和工作原理
1.5A单电阻器坚固型线性稳压器LT3081
区块链技术对WordPress网站的好处是什么
超小尺寸、低功耗CDMA收发器解决方案
现代化高科技的产物,智能镜面显示屏强势来袭
看点:大厂的机器学习参考架构
自动重合闸的分类_自动重合闸的优缺点
Vishay推出卡扣式功率铝电容器提高功率密度,延长使用寿命