Networking 如何测量网络压力?

Networking 如何测量网络压力?,networking,optimization,tcp,measurement,Networking,Optimization,Tcp,Measurement,假设我正在构建自己的下载加速器 让我们将其简化为: 我的代码在我无法控制其网络参数的第三方上运行 从单个IP下载项目 并行范围传输的数量可调 要学习理想参数,需要进行多次转换 客户端运行Linux 服务器不在我的控制范围内 路径通过WAN,下载通过HTTPS 下载的片段很大 如何衡量是否使用了足够的连接来饱和客户端和服务器之间的路径 来自getsockopt(…,TCP\u INFO)的哪些位实际上有用 我能以多快的速度适应不同的网络条件 可以测量客户端系统上的CPU和内存压力,网络压力如何

假设我正在构建自己的下载加速器

让我们将其简化为:

  • 我的代码在我无法控制其网络参数的第三方上运行
  • 从单个IP下载项目
  • 并行范围传输的数量可调
  • 要学习理想参数,需要进行多次转换
  • 客户端运行Linux
  • 服务器不在我的控制范围内
  • 路径通过WAN,下载通过HTTPS
  • 下载的片段很大
如何衡量是否使用了足够的连接来饱和客户端和服务器之间的路径

来自
getsockopt(…,TCP\u INFO)
的哪些位实际上有用

我能以多快的速度适应不同的网络条件


可以测量客户端系统上的CPU和内存压力,网络压力如何?

答案非常简单:一个TCP连接足以使客户端和服务器之间的路径饱和

至少,对于标准TCP/IP协议和客户机与服务器之间的标准网络设备来说是如此。如果路径中有一些设备正在执行某种自定义处理,即“限制”单个TCP连接,那么答案可能不同。但在这种情况下,除非您明确指定自定义处理是什么,否则无法回答。正如其他人所评论的,在大多数情况下,网络流量的塑造或限制可能是基于IP地址而不是TCP头来完成的,因此创建额外的TCP连接不会有任何帮助。如果你的情况不同,那可能会很有趣,请进一步解释


在我看来(当然,只是一个观点,你可能不同意),关于构建自定义“下载加速器”的问题的真正答案是:不要这样做。TCP工作得很好,就像它是。除了一些特殊情况(例如),您不太可能通过使用多个连接或干扰套接字选项来提高TCP性能。如果您确实设法提高了性能,那么您这样做可能是以降低其他用户的总体网络性能为代价的。那是不明智的。

我祝你的努力好运;然而,我对回答更多关于这个问题的问题已经失去了兴趣。考虑到一个带有大窗口或小RTT的TCP连接可能会使任何网络链路饱和,我看不出多个TCP会话有什么好处。每一个新的片段都会以慢启动开始,因此传输速率比已建立的连接要低。我同意@BrianWhite。如文中所述,这个问题似乎表明了对TCP网络如何运行的一个严重误解。@qarma,网络通常不会进行深入的数据包检查,以根据“连接”形成流量。因此,无论数据包是单个连接的一部分还是多个连接的一部分,结果都是相同的。此外,无论使用多少不同的连接,任何想要限制流量的东西都会找到一种方法。要测试黑盒链路是否处于饱和状态,似乎必须不断增加流量,直到带宽停止成比例增加。也就是说,必须使链路饱和。我不确定这是否是个好主意。我的实践经验表明,两次长时间下载比一次获得更好的吞吐量;它可以扩展到大约10个连接(最后一英里带宽)。这就好像有人将洲际流量限制在~1MB/s(.5..2.取决于一天中的时间)。我不知道是谁,但每个大洲的交通都可以。例如,speedtest.net使用4个连接进行下载,2个连接进行上传。这样的上限甚至可能是确保跨客户SLA的一种实用方法。。。