【问题标题】:How to measure network pressure?如何测量网络压力?
【发布时间】:2014-11-17 10:30:32
【问题描述】:

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

让我们将其简化为:

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

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

getsockopt(..., TCP_INFO) 中的哪些位实际上有用?

我可以多快适应不同的网络条件?

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

【问题讨论】:

  • 祝您工作顺利;但是我已经失去了回答有关此问题的更多问题的兴趣。
  • 鉴于具有大窗口或小 RTT 的单个 TCP 连接可以使任何网络链接饱和,我看不出您期望从多个 TCP 会话中获得什么好处。每个新片段都将以慢启动开始,因此传输速率低于已建立的连接。
  • 我同意@BrianWhite。这个问题,正如所写的,似乎表明对 TCP 网络如何运行存在很大的误解。
  • @qarma,网络通常进行深度数据包检查以根据“连接”调整流量。因此,无论数据包是单个连接还是多个连接的一部分,结果都是一样的。此外,无论使用多少不同的连接,任何想要限制流量的东西都会找到方法。
  • 要测试黑盒链接是否处于饱和状态,似乎必须不断增加流量,直到带宽停止按比例增加。即,必须使链接饱和。我不确定这是否是个好主意。

标签: networking optimization tcp measurement


【解决方案1】:

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

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

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

【讨论】:

  • 我的实践经验表明,两次长下载的吞吐量比一次要好;它可以很好地扩展到大约 10 个连接(最后一英里带宽)。就好像有人将洲际流量限制在 ~1MB/s(.5..2. 取决于一天中的时间)。我不知道是谁,但每个大陆的交通都还可以。例如,speedtest.net 使用 4 个连接进行下载和 2 个连接进行上传。这样的上限甚至可能是一种确保跨客户 SLA 的务实方法......
猜你喜欢
  • 2015-06-30
  • 2014-10-02
  • 2012-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-17
  • 2012-02-03
  • 1970-01-01
相关资源
最近更新 更多