我知道TCP非常可靠,所发送的内容保证可以到达目的地.但是如果在发送数据包之后但在它到达服务器之前服务器发生故障会发生什么呢?在数据包最初发送时,或者数据包成功到达服务器时,是否确认已成功发送数据包?
基本上我要问的是 - 如果服务器在发送和接收数据包之间发生故障,客户端会知道吗?
这没关系,但这里有一些更精细的细节:
您需要区分Server-Machine关闭和Server-Process关闭.
如果服务器机器崩溃了,那么显然没有什么可以接收数据包.发送客户端将不会获得重试请求,也不会确认成功或失败.在没有收到任何反馈后,客户端最终会收到超时,并认为连接已断开.这与意外切割的电缆非常相似.
但是,如果服务器机器仍在运行,但服务器进程由于编程错误而崩溃,则接收TCP堆栈(可能是操作系统的功能,而不是进程的功能)可能会对数据包进行确认,并且到达的其他人.这将继续,直到操作系统通知TCP堆栈该进程不再处于活动状态.TCP堆栈可能会向客户端发送RST(重置)通知,或者可能会丢弃连接(如上所述)