如果已经建立了连接,但是客户端出现故障了怎么办?
这要分成两种情况。
第一种情况是服务端发数据给客户端,因为客户端此时已经崩溃了,所以没办法 ACK 服务端的报文。那么会触发服务端的重试功能,在超过重试上限之后,服务端会判定连接不可用,直接关闭连接。
第二种情况是,服务端和客户端之间没有啥报文要发的,而且开启了保活机制,那么超过保活期限,那么服务端也会关闭连接。
具体来说,TCP 设有一个保活计时器。服务器每收到一次客户端的数据,都会重新复位这个计时器,时间通常是设置为 2 小时。若 2 小时还没有收到客户端的任何数据,服务器就开始重试:每隔 75 分钟发送一个探测报文段,若一连发送 10 个探测报文后客户端依然没有回应,那么服务器就认为连接已经断开了。
服务端最终认定客户端崩了,关闭连接;