如果两个主机(A 和 B)之间建立了 TCP 连接,假设主机 A 已向主机 B 发送了 5 个八位字节,然后主机 B 崩溃了(由于未知原因)。
主机 A 将等待确认,但如果没有收到确认,将重新发送八位字节并减小发送者窗口大小。
这将重复几次,直到窗口大小由于数据包丢失而缩小到零。我的问题是,接下来会发生什么?
在这种情况下,TCP 最终会超时等待 ack,并向应用程序返回错误。应用程序必须从 TCP 套接字读取/接收才能了解该错误,后续的写入/发送调用也将失败。直到 TCP 确定连接消失为止,写入/发送调用都不会失败,从应用程序中可以看出它们会成功,或者如果套接字缓冲区已满,则会阻塞。
如果主机 B 在发送 ACK 后消失,主机 A 不会知道这一点,直到它向 B 发送某些内容,这最终也会超时,或导致 ICMP 错误。 (通常,第一个写入/发送调用不会失败,因为 TCP 不会立即使连接失败,并且请记住,写入/发送调用在完成之前不会等待 ACK)。
另请注意,重传不会减小窗口大小。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)