假设一台服务器通过有限的带宽连接到互联网,并且多个用户同时尝试从该服务器下载文件。
如果我们忽略用户端的带宽限制,请问服务器端带宽将如何分配给不同的用户?如果有两个并发用户尝试下载同一个文件,带宽是否会在用户之间平均分配,以便每个用户获得 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
答案3
服务器 PC 上没有平衡逻辑来平衡两种连接性能。事实上,我认为服务器上两种连接之间的“用户”也没有区别。
这种情况类似于服务器上运行的相同应用程序的两个实例——所有条件似乎相同,但其中一个似乎表现更好。简而言之,其中一个应该几乎“随机”表现更好。
同样,您的两个 iperf 测试路径看起来很相似,但其中一个的性能会更好(我有点惊讶它似乎显示出另一个性能的 3 倍)。
但是,告诉我,您运行了多少次这个测试?
如果您运行 10 次,同一台客户端 PC 的性能是否似乎比同一倍数更好?或者,您是否在重新运行时看到一定程度的随机性?