TCP的维基百科文章表明,传输TCP数据段的IP数据包有时可能会丢失,而TCP“请求重传丢失的数据”。
请求重传丢失数据的规则是什么?重新传输请求的执行时间频率是多少?请求数量是否有上限?客户端是否有功能指示服务器忘记整个TCP数据段,即当IP数据包丢失部分时?
请求重传丢失数据的规则是什么?重新传输请求的执行时间频率是多少?请求数量是否有上限?客户端是否有功能指示服务器忘记整个TCP数据段,即当IP数据包丢失部分时?
请求重新传输丢失数据的规则是什么?
接收方不会请求重新传输。发送方等待客户端发送的字节范围的ACK,如果没有收到,则在特定间隔后重新发送数据包。
这就是ARQ(自动重复请求)。有几种实现方式。
Stop-and-wait ARQ
Go-Back-N ARQ
Selective Repeat ARQ
详细内容请参考RFC 3366.
重传请求的时间频率是多少?
标准并未规定重传次数和尝试次数,这在不同的操作系统上实现方式也不相同,但方法是固定的。(也许这是指识别操作系统的一种方式?)
超时时间是以往返时间(RTT)为单位计量的。但由于快速重传触发条件是收到3个重复确认(ACK) ,因此通常不需要使用这个。
是否有上限?
有的。若经过多次重试后,主机被视为“失效”,发送方将放弃并关闭TCP连接。
客户端是否具有指示服务器在IP数据包丢失时忘记整个TCP段落的功能?
整个目的是保证可靠的通信。如果希望客户端忘记某些部分,最开始就不应该使用TCP。(也许应该使用UDP?)
没有固定的重传时间。简单的实现方式是估计RTT(往返时间),如果在2倍该时间内未收到ACK以发送数据,则重新发送。
然后,如果再次没有回复,等待时间会加倍,再次重新发送。洗涤。重复。
更复杂的系统会更好地估计ACK应该需要多长时间,并猜测确切丢失了哪些数据。
归根结底,没有硬性规定何时进行重传。这取决于具体实现。 所有重传都是基于接收方缺乏响应而由发送方触发的。
TCP从不丢失数据,因此无法指示服务器忘记某个段落。