TCP的重传规则是什么?

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

请求重传丢失数据的规则究竟是什么? 重发请求在什么时候执行? 数字有上限吗? 是否有客户端的function,以指示服务器忘记IP数据包丢失时丢失部分的整个TCP段?

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

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

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

详见RFC 3366

重发请求在什么时候执行?

标准不强制重传次数和次数。 它由不同的操作系统执行不同,但方法是固定的。 (可能指纹操作系统的一种方法?)

超时以RTT(往返时间)时间来衡量。 但是由于接收到3个重复的ACK时发生的快速重传,经常不需要这么做。

数字有上限吗?

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

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

整点是可靠的沟通。 如果你想让客户忘记某个部分,你首先不会使用TCP。 (UDP也许?)

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

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

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

底线是关于何时重传没有硬性规定。 这取决于实施。 所有的重传都是由发送方根据接收方缺less响应来触发的。

TCP 永远不会丢弃数据,所以没有办法指出一个服务器应该忘记一些段。