并发用户带宽如何分配?

并发用户带宽如何分配?

假设一台服务器通过有限的带宽连接到互联网,并且多个用户同时尝试从该服务器下载文件。

如果我们忽略用户端的带宽限制,请问服务器端带宽将如何分配给不同的用户?如果有两个并发用户尝试下载同一个文件,带宽是否会在用户之间平均分配,以便每个用户获得 0.5 的带宽?

我尝试了以下设置:-

我将 2 台装有 Windows XP 操作系统的客户端 PC 连接到交换机。通过交换机,我将其通过 2mbps 的固定带宽连接到服务器 PC。然后,我同时在所有 3 台 PC 上运行 iperf。客户端 PC 在客户端模式下运行 iperf,服务器 PC 在服务器模式下运行 iperf。

两台客户端PC同时向服务器PC发送数据。

然后,我发现服务器 PC 从客户端 PC1 获得 ~500kbps,从客户端 PC2 获得 ~1450kbps。

两台客户端 PC 都使用 1gbps 以太网连接交换机。两台都使用相同类型的电缆。两台都使用相同的操作系统。iperf 的设置也相同。

我不明白为什么分配给客户端 PC1 和客户端 PC2 的带宽差别这么大。我想知道如何为同时尝试访问服务器的并发用户分配带宽。

谢谢。

答案1

没有唯一的答案。对于最简单的 TCP 服务,每个客户端都会尝试尽可能快地获取数据,服务器也会尽可能快地将数据推送给客户端。假设两个客户端的总带宽超过服务器的带宽,则两个客户端的下载速度可能都只有服务器带宽的一半左右。

这其中有很多变量,使得这在现实生活中并不完全正确。如果不同客户端的 TCP/IP 堆栈处理高流连接的能力不同,那么即使服务器具有无限带宽,这本身也会影响带宽。不同的操作系统或服务器程序以不同的方式处理流速度提升。延迟会影响吞吐量,其中高延迟连接可能比低延迟连接慢得多,即使两个连接都可以传输(绝对值)相同数量的数据。

举个例子,下载内核源代码档案。我的工作带宽非常快,实际上超过了我的 LAN 速度,因此如果我找到合适的服务器,我可以使我的本地 100Mb 连接饱和。在下载大文件时查看我的网络利用率图表,我可以看到一些服务器从小处开始,100Kb/s,慢慢上升到高值,7Mb/s,然后发生一些事情,一切又重新开始。当我开始下载时,其他服务器会立即给我一切。

无论如何,可能导致实际带宽分配与绝对平等不同的因素有:

  • 客户端和服务器关系的 TCP/IP 功能
  • 两侧的 TCP 调整参数,而不仅仅是功能
  • 线路延迟
  • 正在使用的应用程序级传输协议
  • 专门为负载平衡设计的硬件的存在
  • 客户端和服务器本身之间的拥塞

就您的测试案例而言,可能发生的情况是,一个客户端能够建立比另一个客户端更高的数据流速率,也许是因为它先到达那里。当另一个流启动时,它没有分配足够的资源来获得全速奇偶校验;第一个流先到达那里并获得大部分资源。如果第一个流结束,第二个流可能会加快速度。在这种情况下,客户端体验到的速度由服务器操作系统、执行流式传输的应用程序和服务器的 TCP/IP 堆栈决定。此外,如果网卡支持,则网卡的 TCP 卸载引擎(如果存在并启用)也受其影响。

正如我所说,这其中涉及很多变量。

缓慢增加带宽使用率: 慢速斜坡带宽使用情况图表

答案2

由于 TCP 退避,时间对于您的测试来说比其他任何事情都更重要 - 发生的情况是第一个连接使用所有带宽,然后第二个连接出现并开始与第一个连接争夺带宽;如果传输持续足够长的时间,它们最终应该都会使用相同的带宽。细节实际上取决于 TCP 堆栈,具体取决于它们如何实现拥塞避免算法

在较低级别,以太网使用指数退避算法得到大致相同的结果。

您的交换机也可能会对其产生影响 - 如果您切换两台 PC 所插入的端口,性能会跟随 PC 变化还是与端口保持一致?

答案3

服务器 PC 上没有平衡逻辑来平衡两种连接性能。事实上,我认为服务器上两种连接之间的“用户”也没有区别。

这种情况类似于服务器上运行的相同应用程序的两个实例——所有条件似乎相同,但其中一个似乎表现更好。简而言之,其中一个应该几乎“随机”表现更好。

同样,您的两个 iperf 测试路径看起来很相似,但其中一个的性能会更好(我有点惊讶它似乎显示出另一个性能的 3 倍)。

但是,告诉我,您运行了多少次这个测试?
如果您运行 10 次,同一台客户端 PC 的性能是否似乎比同一倍数更好?或者,您是否在重新运行时看到一定程度的随机性?

相关内容