【问题标题】:TCP is it possible to achieve higher transfer rate with multiple connections?TCP是否可以通过多个连接实现更高的传输速率?
【发布时间】:2010-09-20 13:08:48
【问题描述】:

是否有可能在高延迟环境中通过多个并行 TCP 连接实现更好的数据传输速率(具有大地理距离的公共互联网,假设每个连接没有流量整形或类似的东西),或者 TCP 是否可以通过单个连接来利用整个带宽连接?


如果接收方没有报告 0 窗口大小的缓冲区拥塞,TCP 是否会尽可能快地发送数据?因此,如果 RTT 是例如 60 秒,它根本不会影响速率吗?是否有一些最大窗口大小或其他限制速率的东西?

【问题讨论】:

    标签: networking tcp


    【解决方案1】:

    多个并发连接可能给您的一个好处(受制于 dove 和 Brian 提到的相同警告)是您将能够更好地克服 TCP 接收窗口过小的问题。

    与此相关的原则是bandwidth delay product。 (有更详细的解释here)。

    简要总结:在高延迟、高带宽的环境中,可靠的通信(如 TCP)通常受到任何给定时间传输的数据量的限制。多个连接是解决此问题的一种方法,因为带宽延迟产品分别适用于每个连接。

    更详细地考虑以下因素:您的端到端带宽为每秒 10^8 位(10 兆位/秒),往返延迟为 100 毫秒(0.1 秒)。因此,在第一个数据位的确认返回给发送者之前,最多可以发送 10^7 位(10 兆位 = ~1.25 兆字节)的数据。

    这取决于您操作系统的 TCP 堆栈,但 TCP 接收窗口大小的一个不常见的值是 64Kbytes。这显然太小了,无法让您充分利用端到端带宽;一旦发送了 64kbytes (512kbits) 的数据,您的发送进程将等待来自接收器的窗口更新,表明已经消耗了一些数据,然后再将更多数据传输到网络上。

    打开多个 TCP 会话可以解决这个问题,因为每个 TCP 会话都有自己的发送/接收缓冲区。

    当然,由于 TCP 窗口大小、争用等原因,在 Internet 上很难确定真正可用的端到端带宽。如果您能够提供一些示例数据,我们或许可以为您提供帮助更多。

    您应该考虑的另一个选项是在创建套接字时设置更大的接收窗口,可以使用操作系统设置全局设置,也可以使用套接字选项基于每个套接字。

    【讨论】:

    • 您的意思是“最多 10^8 位”
    【解决方案2】:

    如果您是链接中唯一的人,则会增加开销并降低速度。然而,当与其他人共享一个完全饱和的链接时,这是一种游戏系统并提高整体速度的方式(每个连接将比单个连接慢,但聚合会更快,因为您现在拥有更大比例的分配给你的“时隙”(技术术语是什么?我现在忘记了)。

    【讨论】:

    • 延迟怎么样?它如何影响利率?如果使用足够大的缓冲区,延迟是否不会影响速率?
    • 取决于 TCP 窗口的大小,任何缓冲区都不那么重要。
    【解决方案3】:

    是的,但不一定容易实现。诸如 akamai 之类的 CDN 通过压缩比通常发送的更大的数据包来声称其部分性能,因为它们具有专用的可靠管道。如果不了解您的应用程序,很难提供更详细的信息。

    【讨论】:

    • 我的应用程序正在单向传输数据,而无需任何应用程序级别的对话。只是将数据推送到远程套接字。
    • 我可能在这里不知道,但如果不是那么困难,最可靠的方法是设置试用版,恕我直言。听起来确实有潜力,因为这是一种方式。
    • 您在寻找可靠的(基于连接的)套接字吗?如果没有,可能使用 UDP 而不是 TCP 可能会有所帮助?
    • 是的,它应该是可靠的,所以 UDP 不是一个选项。
    【解决方案4】:

    Muz's description of the issue 是正确的。

    请记住,利用它可能取决于您操作系统中 TCP 的实现。特别是,为了获得最佳结果,您需要一个支持来自RFC 1323 的窗口缩放选项的 TCP 堆栈。

    此外,您可能需要调整一些操作系统设置才能使其正常工作。在 Windows 上,您可能需要调整一个名为 TcpWindowSize 的注册表设置。有一篇 Microsoft 知识库文章 224829: Description of Windows 2000 and Windows Server 2003 TCP Features 描述了如何做到这一点。

    【讨论】:

      猜你喜欢
      • 2015-11-15
      • 1970-01-01
      • 1970-01-01
      • 2021-10-24
      • 1970-01-01
      • 2012-11-07
      • 1970-01-01
      • 2011-04-25
      • 2012-10-22
      相关资源
      最近更新 更多