56

关于 TCP的Wikipedia 文章指出传输 TCP 段的 IP 数据包有时会丢失,并且 TCP“请求重新传输丢失的数据”。

请求重传丢失数据的具体规则是什么?以什么时间频率执行重传请求?数字有上限吗?当 IP 数据包丢失时,客户端是否有功能向服务器指示忘记整个 TCP 段丢失的部分?

4

2 回答 2

59

请求重传丢失数据的具体规则是什么?

接收方不请求重传。发送方等待发送给客户端的字节范围的 ACK,如果未收到,则在特定时间间隔后重新发送数据包。这是ARQ(自动重复请求)。有几种实现方式。

Stop-and-wait ARQ
Go-Back-N ARQ
Selective Repeat ARQ

RFC 3366中有详细说明。

以什么时间频率执行重传请求?

标准不强制执行重传次数和尝试次数。它由不同的操作系统以不同的方式实现,但方法是固定的。(也许是指纹操作系统的一种方法?)

超时是根据 RTT(往返时间)时间来衡量的。但这并不是经常需要的,因为当接收到3 个重复的 ACK时会启动快速重传。

数字有上限吗?

就在这里。经过一定次数的重试后,主机被认为“宕机”,发送方放弃并断开 TCP 连接。

当 IP 数据包丢失时,客户端是否有功能向服务器指示忘记整个 TCP 段丢失的部分?

关键是可靠的通信。如果您希望客户端忘记某些部分,那么您一开始就不会使用 TCP。(也许是UDP?)

于 2012-10-18T14:17:11.427 回答
14

没有固定的重传时间。简单的实现会估计 RTT(往返时间),如果在 2 倍的时间内没有收到发送数据的 ACK,那么它们会重新发送。

然后,他们将等待时间加倍,如果再次没有回复,则再次重新发送。冲洗。重复。

更复杂的系统可以更好地估计 ACK 应该花费多长时间,并准确猜测哪些数据已经丢失。

底线是对于何时重新传输没有硬性规定。这取决于实施。 所有重传都是由发送者根据接收者没有响应而单独触发的。

TCP从不丢弃数据,所以不,没有办法表明服务器应该忘记某个段。

于 2012-10-18T14:18:10.667 回答