高频面试题:服务端宕机后客户端TCP是否还存在

客户端和服务端在建立连接的时候会使用三次握手来建立可靠的会话,一旦服务器端因为异常导致连接断开,客户端在没有感知的情况下继续发消息给服务端一定会失败,此时客户端连接会怎么处理呢?

先来了解一下TCP的四次挥手的过程:

TCP四次挥手的主要目的是确保数据在关闭过程中能够被完整传输,同时也允许延迟的数据包在关闭后仍然能够被接收。TIME_WAIT状态的存在是为了处理可能的重复数据包,以确保连接的完全关闭。

现在如果服务端宕机,客户端和服务端经过三次握手建立的连接是否还存在呢?

当客户端向已经断开服务的服务端发送消息的时候,TCP会尝试发送数据包,但是服务端已经不再响应所以这个数据包没有办法到达服务端,而TCP协议为了确保这个消息包可以被投递,TCP会多次尝试发送(TCP协议最大的重传次数是6次)如果到达这个重传次数后仍然没有收到确认消息,那么TCP协议会认为这个连接已经失败了并且会关闭连接。

服务端断开,客户端直接关闭连接是否安全呢?

客户端会多次的尝试重传FIN数据包,但最终会因为没有收到服务器的响应而放弃发送FIN这个数据包并直接去关闭这个连接,那么此时是安全的。

7