【网络】拔掉网线后,TCP连接还存在吗?

这个网络问题,需要分两个场景进行讨论。【CS,指客户端与服务器】

CS 之间存在数据传输

具体场景:拔掉网线之前,服务端发出数据,等待客户端响应。

  1. 响应等待超时后,会进行重传。在重传次数达到最大值或最大超时时间前,网线插回,则连接恢复正常。
    (重传次数默认值为15次,默认最大超时间时间15.2mins。)
    (在重传报文且一直没有收到对方响应的情况时,先达到「最大重传次数」或者「最大超时时间」这两个的其中一个条件后,就会停止重传,随后就会断开 TCP 连接。)

  2. 响应等待超时后,会进行重传。在重传次数达到最大值前,网线都未进行插回,则连接会断开。
    (后续,若插回了网线,客户端发回了响应包,服务端会返回RST报文,则客户端的连接也就断开了。)

CS 之间不存在数据传输

具体场景:拔掉网线之前,双方均未发送数据。

  1. 若双方均未开启 TCP keepalive,网线拔出后,一直未插回,则客户端和服务端的 TCP 连接状态将会一直保持存在。

  2. 若双方均开启 TCP keepalive,网线拔出后,一直未插回,保活探测包达到最大探测次数后,双方会进行断开连接。若在保活探测期间,插回了网线,则连接将会恢复正常。
    (保活探测默认时间:7200 + (75 * 9) = 7875s, 大约 2 小时 11 分 15 秒)

其他场景

服务端发出数据包后。

  1. 客户端设备宕机
    同网线拔出相同。

  2. 客户端接收进程被杀掉
    客户端内核会向服务端发送 FIN 报文,双方进行四次挥手。

猜你喜欢

转载自blog.csdn.net/qq_37286579/article/details/130574113