TCP的重传规则是什么?

时间:2012-10-18 14:11:18

标签: networking tcp

Wikipedia article on TCP表示传输TCP段的IP数据包有时会丢失,而TCP“请求重传丢失的数据”。

请求重新传输丢失数据的规则究竟是什么?在什么时候频率是重传请求执行?这个号码有上限吗?客户端是否有功能指示服务器忘记IP数据包丢失时丢失哪个部分的整个TCP段?

2 个答案:

答案 0 :(得分:51)

请求重新传输丢失数据的规则究竟是什么?

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

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

详见RFC 3366

重播请求的频率是什么时候?

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

超时是根据RTT(往返时间)次数来衡量的。但是,由于快速重新传输在接收到 3个重复ACK 时启动,因此不需要经常这样做。

数字是否有上限?

是的。经过一定次数的重试后,主机被认为是“关闭”,发送方放弃并断开TCP连接。

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

重点是可靠的沟通。如果您希望客户端忘记某个部分,那么您首先不会使用TCP。 (也许是UDP?)

答案 1 :(得分:11)

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

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

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

最重要的是,没有关于何时重新发送的严格规则。这取决于实施。 所有重传都是由发送方基于接收方缺乏响应而触发的。

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