如何衡量网络压力?

Dim*_*nek 8 optimization networking tcp measurement

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

让我们简化它到以下地步:

  • 我的代码运行在第三方,​​其网络参数我无法控制
  • 从单个IP下载项目
  • 并行范围传输的数量是可调的
  • 学习理想参数会有很多转移
  • 客户端运行Linux
  • 服务器不受我的控制
  • 路径通过WAN,下载通过HTTPS
  • 下载的细分很大

如何测量是否使用足够的连接来使客户端和服务器之间的路径饱和?

什么位getsockopt(..., TCP_INFO)实际上有用?

我可以根据不同的网络条件调整多快?

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

Dun*_*can 2

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

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

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