卫星连接的 TCP 窗口缩放

卫星连接的 TCP 窗口缩放

卫星连接的 RTT 通常约为 500 毫秒。尽管带宽很大,但连接的传输速度通常不是最优的,因为 TCP 确认需要很长时间才能到达。

我的理解是,解决 TCP 连接此问题的一个好方法是将 TCP 窗口大小设置为连接速度(以位为单位)乘以 RTT(以秒为单位)。因此,通过卫星的 1mbps 连接应具有 512kb 的窗口大小。

这其中有什么隐患?是否还有其他类似的调整可以优化卫星连接?我知道许多现代操作系统会自动修改窗口大小,但它们是否会足够激进,使窗口大小足够大以用于卫星通信?

顺便说一句,我假设在频繁丢弃数据包的网络上,较大的窗口大小是不可取的,因为重新传输将按照窗口大小进行,并且您可能会将大部分带宽专用于重新传输开销。

谢谢,我仍在学习大量有关网络的知识,感谢您的意见。

答案1

通常,您应该使用实现适当窗口缩放的 TCP 堆栈。但您当然是对的,您的窗口大小需要与带宽延迟乘积 (BDP) 相匹配。如果您的 BDP 变化,您可以将窗口大小设置为您预期的常见“最坏”情况。有趣的是,如果窗口大小大于 BDP,大多数连接不会受到太大影响(不应该方式当然,如果窗口大小比 BDP 小得多,则性能会下降。

要检查您的 TCP/IP 堆栈是否正确增加了窗口大小,您应该使用 Wireshark 或任何其他流量嗅探器。您可以直接查看标头中的窗口大小标志(考虑缩放因子!)。Wireshark 还可以通过考虑缩放因子来显示有效窗口大小。

查看本教程,了解如何绘制 TCP 窗口大小随时间的变化图这里

答案2

这完全是理论上的,因为没有人在卫星连接上运行 TCP。我不知道有哪家卫星提供商这样做。他们都在卫星上运行特定于卫星的协议,并将 TCP 端点放在地面站。

当网络上的某台机器向卫星终端发送 TCP SYN 数据包时,卫星终端会向卫星发送 TCP 代理请求。这将指示地面站打开与互联网上某个服务器的 TCP 连接。地面站使用 TCP 与互联网服务器通信。卫星终端不会通过卫星使用 TCP,而是使用针对卫星使用而优化的协议。地面站充当卫星终端和互联网服务器之间的代理。

答案3

为了方便起见,有带宽延迟乘积计算器可用 - 其中一个计算器是这里。至于在数据包丢失时导致大窗口的问题 - 这几乎就是 TCP 窗口可变的原因。数据包丢失时,窗口大小将减小,从而减少传输数据,从而降低传输速度。一段时间后,窗口大小将重新协商。

对于卫星来说,延迟实际上不算太糟糕 - 1M 的 1s RTT 只是一个 125K 窗口。许多现代操作系统都可以轻松支持这一点,因此可能不需要额外的修改。

另外,有些人对市场上各种 WAN 优化器非常满意。这些优化器往往既能优化 TCP 窗口大小,又能利用缓存和压缩来推动更多链接并提高明显的响应能力。

相关内容