我正在模拟 TCP,但我不知道它应该何时发送确认。
例如,一旦一个段丢失,我们应该发送确认还是我们应该花费一些时间,如果是这样的话,段可能会在一点延迟后到达,我们应该等待多长时间?
我正在模拟 TCP,但我不知道它应该何时发送确认。
例如,一旦一个段丢失,我们应该发送确认还是我们应该花费一些时间,如果是这样的话,段可能会在一点延迟后到达,我们应该等待多长时间?
我建议阅读 RFC 1122“Internet 主机要求——通信层”,第 4.2.3.2 节“何时发送 ACK 段”,然后从那里跟进。
https://www.rfc-editor.org/rfc/rfc1122
乔纳森。
TCP 不发送确认以响应丢弃的数据包。我相信您要问的是,发件人应该在什么时候重新传输一段。
在典型的 TCP 实现中,有一个指定的“超时”时间段,如果在那个时间之前没有收到确认,或者如果收到了三个重复的序列号更高的确认,则重新传输原始段。
在发送方接收到三个重复的 ACK 之后或一旦“超时”期限过去,则假定数据包已被丢弃。这就是为什么根据数据包的估计 RTT(往返时间)正确设置初始“超时”很重要的原因。请参阅以下内容以了解如何设置初始超时:https ://www.quora.com/How-does-TCP-round-trip-time-RTT-estimation-work-How-different-is-the-implementation-跨操作系统
一旦您了解如何设置并随后增加您的“超时”时间,您将能够解决您的问题。还记得在收到三个重复的 ACK 后重新传输,因为此时,数据包很可能已被丢弃。