如何衡量网络压力?

8

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

为了简化问题,我们假设:

  • 我的代码在第三方运行,我无法控制其网络参数
  • 一个项目从单个IP下载
  • 可以调整并发范围传输的数量
  • 将有许多传输以学习理想参数
  • 客户端运行Linux
  • 服务器不在我的控制之下
  • 路径位于WAN上,下载使用HTTPS
  • 已下载段较大

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

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

我能有多快地适应不同的网络条件?

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


1
祝你在这个努力中好运;然而,我已经失去了回答更多关于这个问题的问题的兴趣。 - Mike Pennington
1
鉴于单个具有大窗口或小RTT的TCP连接可以使任何网络链路饱和,我不明白您从多个TCP会话中期望获得什么好处。每个新的数据块都将以慢启动开始,因此其传输速率将低于已建立连接的速率。 - Brian White
1
我同意@BrianWhite的观点。从所写的问题来看,似乎表明提问者对TCP网络运作方式存在很大的误解。 - theMayer
2
@qarma,网络通常不会进行深度数据包检查来基于“连接”来塑造流量。因此,无论数据包是单个连接的一部分还是多个连接,结果都将是相同的。此外,任何想要限制流量的东西都会找到方法,无论使用多少不同的连接。 - Brian White
1
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Andras
显示剩余2条评论
1个回答

2
答案非常简单:一个TCP连接就足以使客户端和服务器之间的路径饱和。
至少在标准的TCP/IP协议和客户端与服务器之间的标准网络设备中,这是正确的。如果在路径中有一些正在执行某种自定义处理的设备,则可能会“限制”单个TCP连接,那么答案可能不同。但是,在这种情况下,除非您指定了确切的自定义处理方式,否则无法回答。正如其他人所评论的那样,在大多数情况下,网络流量整形或限制可能是基于IP地址而不是基于TCP头进行的,因此创建额外的TCP连接并不能帮助解决问题。如果您的情况不同,那可能很有趣,请进一步解释。
在我看来(仅是个人观点,当然你可能不同意),关于构建自定义“下载加速器”的问题的真正答案是:不要这样做。TCP本身已经表现得非常出色。除了一些特殊情况(例如SCPS-TP)外,通过使用多个连接或调整套接字选项等方式来提高TCP性能的可能性不大。而且,如果你确实成功提高了性能,那么你很可能是以牺牲其他用户的整体网络性能为代价的。这是不明智的。

我的实际经验表明,两次长时间下载比一次更能实现更好的吞吐量;它适用于大约10个连接(最后一英里带宽)。就像有人将洲际流量限制在 ~1MB/s(具体取决于一天中的时间)一样。我不知道是谁,但每个洲内的流量都没问题。作为例证,speedtest.net使用4个连接进行下载和2个连接进行上传。这种限制甚至可能是确保跨客户的SLA的务实方法... - Dima Tisnek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接