TCP 在大型 RTT 上下文中的不公平性

网络工程 无线的 通讯协议
2021-07-30 22:00:06

使用 Van Jacobson 算法的 TCP 版本在某些情况下是不公平的,例如卫星通信。我不明白为什么。这个问题是不是由非对称链路引起的,其中接收方比发送方更有可能发送确认包?

2个回答

基本上,TCP 的拥塞窗口 (CW) 会随着新 ACK 数据包的到达而增长。

然后,如果连接 C1 具有较大的 RTT,则意味着与具有较小 RTT 的另一个连接 C2 相比,在特定时间段内到达ACK更少,原因如下:

  • 目的地将在数据包到达时发送确认,因此在 C2 中这比在 C1 中发生得更早
  • C2 确认本身将需要更短的时间才能到达源

经过一些研究,我找到了答案。它不仅适用于评论中建议的延迟带宽产品,而且出于某些原因:

  • 发送方的吞吐量可以写成吞吐量=CongestionWindow/RoundTripTime,所以如果你有一个更大的 RTT,你需要更大的 CW 来达到相同的吞吐量;
  • 通道的容量可以写成容量=延迟*带宽,因此您可以通过这种方式检索可用带宽带宽=容量/延迟(并且考虑到对于每个数据包,延迟可以是 RTT 的一半或等于 RTT)需要确认);
  • CongestionWindow 可以这样写成 RTT 的函数:
    - CongestionWindow = 2 ^ (t/RTT) 在慢启动阶段,其中 t 是时间;
    - CongestionWindow = ss + (t - tss)/RTT 在拥塞避免阶段,其中 ss 是慢启动阈值,t 是时间,tss 是达到慢启动阈值的时间,ss 是慢启动值临界点。
    避免由于可能发生的改变 CongestionWindow 和慢启动阈值的错误而使公式变得更加复杂,很容易看出 CongestionWindow 强烈依赖于 RTT,并且因为它在慢启动阶段都出现在分母上在拥塞避免阶段,RTT越大,发送方越不利。