TCP的四次挥手过程

TCP连接是双向传输的对等的模式(全双工模式),就是说双方都可以同时向对方发送或接收数据。

而断开的时候,也是双方都可以主动断开,此时需要经过四次挥手的过程,流程如下图所示:

  1. 主动方发送FIN包给被动方,主动方状态变成FIN_WAIT_1,等待被动方的确认。此时主动方不能再发送数据。
  2. 被动方收到FIN之后,返回ACK包给主动方,确认自己收到这个包,被动方状态变成CLOSE_WAIT,等待关闭连接(等待缓存数据都发送过去)
  3. 主动方收到ACK之后,状态变成FIN_WAIT_2,等待被动方的FIN包。
  4. 被动方将缓冲区剩余的数据发送给主动方。
  5. 被动方发送FIN给主动方,被动方状态变成LAST_ACK状态。
  6. 主动方收到FIN之后,返回ACK包给被动方,主动方变成TIME_WAIT状态。
  7. 被动方收到ACK确认后,变成CLOSE状态。
  8. 主动方在经过2MSL时间之后,变成CLOSE状态。

MSL(Maximum Segment Lifetime)指报文最大生存时间,它是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。

为什么握手需要三次,而挥手需要四次?

因为 TCP连接是全双工模式,一方断开连接,另一方还是可以继续发送数据,所以无法像三次握手一样,将 FIN和 ACK合并到一起,而是需要等待被动方处理完所有数据,不再有数据发送时,才会发送 FIN,来关闭被动方的连接。

为什么需要 TIME_WAIT状态?

需要 TIME_WAIT 状态,主要是两个原因:

  1. 防止历史连接中的数据,被后面相同四元组的连接错误的接收:
    在连接关闭过程中,可能会存在一些延迟的数据包在网络中,这些数据包可能在连接关闭后到达目的地。TIME_WAIT 状态的存在可以确保在这段时间内不会接收到与当前连接相关的旧数据包,防止这些数据包造成连接的混乱。
  2. 保证「被动关闭连接」的一方,能被正确的关闭:
    如果主动方收到 FIN,发出 ACK之后,直接进入 CLOSE状态,那么当这个 ACK丢失时,被动方收不到 ACK则会重发一个 FIN,但此时主动方已经是 CLOSE状态,无法再给被动方发送 ACK了。

如果两端同时关闭,会出现什么情况?

前面说过,TCP连接双方都可以主动断开,那如果两边同时断开,会怎样呢?

从上图可以看到,一方发出FIN,进入FIN_WAIT_1状态,原本期待收到ACK,但此时收到了FIN,则会变成CLOSING状态,等到收到ACK时,再进入TIME_WAIT状态,同样要经过2MSL时间变成CLOSE状态。

参考资料

相关推荐
垆边人似月.1 小时前
5G 网络建设(300 分档)
网络·5g
国科安芯2 小时前
低轨卫星导航授时载荷中高精度定时控制器的时钟稳定性与抗辐射特性研究
网络·人工智能·低轨卫星·商业航天·授时·抗辐射·时钟稳定
白帽攻防录2 小时前
SRC 挖洞:V8 Turbofan 沙箱逃逸深度复盘,CVE-2026-6307 一根长矛怎么刺穿 Chrome 两道边界
网络·chrome·安全·网络安全·浏览器安全
pt10432 小时前
CML网络仿真入门-3:Cisco Modeling Labs 网络工具功能详解
网络
欣欣之王来了2 小时前
5G网络基础:5G的核心特性,eMBB、uRLLC、mMTC的应用场景
网络·学习·计算机网络·安全·教程
杭州领祺科技2 小时前
保信子站深度解析:继电保护信息采集与故障诊断的关键枢纽
linux·服务器·网络·新能源·储能·虚拟电厂
howdoyoudo2026063 小时前
当新案例冲击旧框架:分类系统的宿命与修正路径
大数据·网络·数据库·人工智能·安全·ai·分类
万联WANFLOW3 小时前
越南电商市场演变:内容驱动下的增长与合规
网络·业界资讯·跨境电商
释厄6233 小时前
学术引用本体论——WorkBuddy 学术科学文化三违反
网络·人工智能·算法
道尔柯南3 小时前
从 0 到 1 理解计算机网络:从网络基础到 Socket 编程
网络·计算机网络