Wikipedia article on TCP指示传输TCP段的IP分组有时会丢失,并且TCP“请求重传丢失的数据”。
请求重传丢失数据的规则到底是什么?重传请求的频率是多少?这个数字有上限吗?客户端是否有功能指示服务器在IP数据包丢失时忽略丢失部分的整个TCP数据段?
发布于 2012-10-18 22:17:11
请求重传丢失数据的规则到底是什么?
接收器不请求重传。发送者等待发送到客户端的字节范围的ACK,并且当没有接收到时,在特定间隔之后重新发送分组。这是 (Automatic Repeat reQuest)。这有几种实现方式。
Stop-and-wait ARQ
Go-Back-N ARQ
Selective Repeat ARQ在中有详细介绍。
以什么时间频率执行重新传输请求?
重传次数和尝试次数不是标准强制执行的。它由不同的操作系统以不同的方式实现,但方法是固定的。(也许是获取OSs指纹的方法之一?)
超时是根据RTT (往返时间)时间来测量的。但这并不是经常需要的,因为当收到3重复的ACK时,就会启动快速重传。
这个数字有上限吗?
是的有。经过一定次数的重试后,主机被视为“关闭”,发送方放弃并断开TCP连接。
TCP客户端是否有功能指示服务器忘记整个数据段在IP数据包丢失时丢失了哪一部分?
整个要点是可靠的通信。如果你想让客户端忘记某些部分,你一开始就不会使用TCP。(也许是UDP?)
发布于 2012-10-18 22:18:11
没有固定的重传时间。简单的实现估计RTT (往返时间),如果在2倍的时间内没有接收到要发送数据的ACK,则它们会重新发送。
然后,它们将等待时间增加一倍,如果再次没有回复,则再次重新发送。冲洗一下。重复一遍。
更复杂的系统可以更好地估计ACK需要多长时间,以及准确地猜测丢失了哪些数据。
底线是,对于何时重新传输,没有硬性规定。这取决于实现。所有重新传输都是由发送者基于缺乏来自接收者的响应来触发的。
TCP 从不丢弃数据,所以没有办法指示服务器应该忘记某些数据段。
https://stackoverflow.com/questions/12956685
复制相似问题