TCP的重传规则是啥?
Posted
技术标签:
【中文标题】TCP的重传规则是啥?【英文标题】:What are the retransmission rules for TCP?TCP的重传规则是什么? 【发布时间】:2012-10-09 00:45:01 【问题描述】:Wikipedia article on TCP 表示传输 TCP 段的 IP 数据包有时会丢失,并且 TCP“请求重新传输丢失的数据”。
请求重传丢失数据的具体规则是什么?以什么时间频率执行重传请求?数字有上限吗?当 IP 数据包丢失时,客户端是否有功能向服务器指示忘记整个 TCP 段丢失的部分?
【问题讨论】:
通常重传时间 = 往返时间 * 一些常数,以及syn
数据包的固定延迟(这是相当悲观的)。
【参考方案1】:
请求重传丢失数据的具体规则是什么?
接收方不请求重传。发送方等待发送给客户端的字节范围的 ACK,如果未收到,则在特定时间间隔后重新发送数据包。 这是ARQ(自动重复请求)。有几种实现方式。
Stop-and-wait ARQ
Go-Back-N ARQ
Selective Repeat ARQ
详见RFC 3366。
重传请求的执行频率是多少?
标准未强制执行重传次数和尝试次数。它由不同的操作系统以不同的方式实现,但方法是固定的。 (也许是指纹操作系统的一种方法?)
超时是根据 RTT(往返时间)时间来衡量的。但这并不是经常需要的,因为当收到 3 个重复 ACK 时会启动快速重传。
数字有上限吗?
是的,有。经过一定次数的重试后,主机被认为“宕机”,发送方放弃并断开 TCP 连接。
当 IP 数据包丢失时,客户端是否具有指示服务器忘记丢失的整个 TCP 段的功能?
关键是可靠的通信。如果您希望客户端忘记某些部分,那么您一开始就不会使用 TCP。 (也许是 UDP?)
【讨论】:
RFC 33366 是一个链路层(Layer 2)文档。它与这里的 OP 的 TCP 问题有什么关系?【参考方案2】:没有固定的重传时间。简单的实现会估计 RTT(往返时间),如果在 2 倍的时间内没有收到发送数据的 ACK,那么它们会重新发送。
他们然后加倍等待时间,如果再次没有回复,则重新发送一次。冲洗。重复。
更复杂的系统可以更好地估计 ACK 需要多长时间,并准确猜测哪些数据丢失了。
底线是关于何时重新传输没有硬性规定。这取决于实施。 所有重传仅由发送方根据接收方没有响应而触发。
TCP 从不丢弃数据,所以不,没有办法表明服务器应该忘记某个段。
【讨论】:
“猜测究竟丢失了哪些数据” SACK(选择性确认)不是猜测。我希望你不是说 SACK。 接收方可以在收到乱序段时重新确认之前的数据。这向发送者暗示一些但不是全部的未决数据包已经丢失,因此发送者可以选择仅重新传输其传出窗口中的一部分内容(从而导致更小的网络数据包和更少的整体带宽使用)而不是发送一个更大的数据包,其中包含先前在以后的数据包中发送的数据(否则会减少延迟和在多次丢失的情况下发送的数据包数量)。没有确定性,所以我们称之为“有根据的猜测”。 见 SACK。它是一个额外的标头,可以准确地告诉发送者接收者拥有什么。我相信现在几乎所有当代 TCP 堆栈都实现了 SACK 是的,有很多 TCP 扩展可以提供帮助。我的大部分工作都是在微型嵌入式系统上进行简单的实现(根本没有扩展)。 "TCP 从不丢弃数据" 如果服务器在重传请求期间处于离线状态并在客户端超时后恢复在线状态以上是关于TCP的重传规则是啥?的主要内容,如果未能解决你的问题,请参考以下文章