Wikipedia article on TCP表示传输TCP段的IP数据包有时会丢失,而TCP“请求重传丢失的数据”。
请求重新传输丢失数据的规则究竟是什么?在什么时候频率是重传请求执行?这个号码有上限吗?客户端是否有功能指示服务器忘记IP数据包丢失时丢失哪个部分的整个TCP段?
答案 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 从不删除数据所以没有,没有办法表明服务器应该忘记某个段。