文章目录
这个网络问题,需要分两个场景进行讨论。【CS,指客户端与服务器】
CS 之间存在数据传输
具体场景:拔掉网线之前,服务端发出数据,等待客户端响应。
-
响应等待超时后,会进行重传。在重传次数达到最大值或最大超时时间前,网线插回,则连接恢复正常。
(重传次数默认值为15次,默认最大超时间时间15.2mins。)
(在重传报文且一直没有收到对方响应的情况时,先达到「最大重传次数」或者「最大超时时间」这两个的其中一个条件后,就会停止重传,随后就会断开 TCP 连接。) -
响应等待超时后,会进行重传。在重传次数达到最大值前,网线都未进行插回,则连接会断开。
(后续,若插回了网线,客户端发回了响应包,服务端会返回RST报文,则客户端的连接也就断开了。)
CS 之间不存在数据传输
具体场景:拔掉网线之前,双方均未发送数据。
-
若双方均未开启 TCP keepalive,网线拔出后,一直未插回,则客户端和服务端的 TCP 连接状态将会一直保持存在。
-
若双方均开启 TCP keepalive,网线拔出后,一直未插回,保活探测包达到最大探测次数后,双方会进行断开连接。若在保活探测期间,插回了网线,则连接将会恢复正常。
(保活探测默认时间:7200 + (75 * 9) = 7875s, 大约 2 小时 11 分 15 秒)
其他场景
服务端发出数据包后。
-
客户端设备宕机
同网线拔出相同。扫描二维码关注公众号,回复: 15183160 查看本文章 -
客户端接收进程被杀掉
客户端内核会向服务端发送 FIN 报文,双方进行四次挥手。