3

例如,在 TCP Tahoe 连接中,如果发生大文件传输。突然接收进程或主机关闭或挂起,我知道我们将有一个超时,此时窗口大小将被重置等。据我了解,我们将重新发送未确认的数据包,然后再试一次,并可能再次?

不过,我想知道,在这样的超时之后,在假定接收器不再存在并且数据将停止发送之前,数据将被重新发送多少次。如果进程从挂起状态恢复,它是否能够继续接收数据?

我知道在三次重复确认或超时后重新传输数据。但是,如果多次重新传输失败,或者接收进程突然停止接收,我找不到太多可阅读的内容。

4

1 回答 1

9

如果接收进程退出或被杀死,则其末端的套接字将被关闭。当发送方继续发送数据包时,应该提示RST数据包,这将立即导致错误(ECONNRESET)。

如果接收主机干净关闭,它应该杀死所有进程,这将导致上述情况发生。

如果接收主机和进程都处于活动状态,但进程处于挂起状态(例如 Ctl-z),则在 TCP 级别不会检测到问题。窗口最终会填满,但接收系统将继续确认零窗口探测。要检测这种情况,您需要一个应用层的保活机制。

如果接收主机崩溃、断电,或者它的网络连接失败,这就是重传超时变得相关的时候。重传的次数和频率取决于实现,也可以由系统配置参数控制。我不知道什么是典型参数。

如果接收系统在超时发生之前重启,它会以 RST 数据包响应下一次重传,这将导致 ECONNRESET 错误。

于 2012-11-07T09:03:57.137 回答