我知道TCP非常可靠,无论发送什么都能保证到达目的地。但是如果在数据包被发送后,在到达服务器之前,服务器宕机了怎么办?当数据包最初被发送时,成功发送的确认是否会因为服务器存在而触发,还是只有当数据包成功到达服务器时才会触发?
换句话说,如果服务器在发送和接收数据包之间宕机,客户端会知道吗?
换句话说,如果服务器在发送和接收数据包之间宕机,客户端会知道吗?
其实这并不重要,但以下是一些细节:
您需要区分服务器机器宕机和服务器进程崩溃。
如果服务器机器崩溃,那么很明显就没有东西可以接收数据包。发送方客户端将不会收到任何重试请求、成功或失败的确认。在完全没有收到任何反馈的情况下,客户端最终会超时,认为连接已断开。这几乎与意外切断电缆相同。
然而,如果服务器机器仍在运行,但由于编程错误导致服务器进程崩溃,则接收TCP堆栈(它是操作系统而不是进程的函数)可能会对数据包进行ACK,以及任何其他到达的数据包。这将持续到操作系统通知TCP堆栈该进程不再活动为止。TCP堆栈可能会向客户端发送RST(复位)通知,或者删除连接(如上所述)。