带宽如何分配给并发用户?

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

如果我们忽略用户端的带宽限制,我可否知道服务器端带宽如何分配给不同的用户? 如果有2个用户同时下载同一个文件,那么带宽是否会在用户间平均分配,这样每个用户的带宽就是0.5?

我试过以下设置:

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

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

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

客户端PC都使用1Gbps以太网连接到交换机。 两者都使用相同types的电缆。 两者都使用相同的操作系统。 iperf的设置也是一样的。

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

谢谢。

没有人回答。 对于最简单的TCP服务,每个客户端都会尝试尽可能快地获取数据,服务器将尽可能快地将其铲除到客户端。 给定两个带宽超过服务器带宽的客户端,两个客户端的下载速度大约是服务器带宽的一半。

这里有很多变数,使得现实生活中的这种情况不太正确。 如果不同客户端的TCP / IP堆栈能够处理高stream连接,则即使服务器具有无限带宽,它本身也会影响带宽。 不同的操作系统或服务器程序以不同的方式处理stream式加速。 延迟对吞吐量有影响,即使两个连接都可以(以绝对值)stream式传输相同数量的数据,大延迟连接的速度可能会比低延迟连接慢得多。

一个例子,下载内核源文件。 我的工作带宽非常快,实际上它超过了我的局域网速度,所以如果我find合适的服务器,我就可以饱和我的本地100Mb连接。 在下载大文件时观看我的networking利用率图表我可以看到一些服务器从小的100Kb / s开始,慢慢增加到7Mb / s的高值,然后发生了一些事情,这一切都重新开始。 其他服务器将立即给我一切,当我开始下载。

无论如何,可能导致实际带宽分配的项目不同于绝对平等:

  • 客户端和服务器关系的TCP / IPfunction
  • TCP调优参数,而不仅仅是function
  • 延迟就行了
  • 正在使用的应用程序级传输协议
  • 专门为负载平衡而devise的硬件的存在
  • 客户端和服务器本身之间的拥塞

对于您的testing案例,可能发生的情况是一个客户端能够build立比另一个更高的数据stream速率,也许首先到达那里。 当其他stream开始时,没有获得足够的资源来获得全速的平价; 第一条河首先到达那里,获得了大部分的资源。 如果第一个stream结束第二个可能会加快速度。 在这种情况下,客户端所经历的速度取决于服务器操作系统,进行stream式处理的应用程序以及服务器的TCP / IP协议栈。 另外,如果网卡支持,网卡的TCP卸载引擎(如果存在并启用)。

正如我所说,有很多变数。

慢速带宽使用情况: 缓坡带宽使用图表

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

这种情况将类似于在服务器上运行的相同应用程序的两个实例 – 所有条件似乎都是相同的,但其中一个似乎performance更好。 总之,他们中的一个应该几乎“随机”地performance得更好。

同样,你的两个iperftestingpath看起来很相似,但其中一个会performance得更好(我有点惊讶,它似乎显示了另一个的3倍)。

但是,告诉我,你做了多less次这个testing?
如果你运行它10次,相同的客户端PC似乎在同样的因素performance更好? 或者,你是否看到重播的一些随机性?

由于TCP退避,时序将与你的testing有更多的关系 – 第一个连接使用所有带宽,第二个连接显示出来,并开始与第一个带宽竞争; 如果转移持续了足够长时间,他们最终应该使用相同的带宽。 这些细节实际上是基于TCP实现拥塞避免algorithm的依赖性。

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

你的交换机也有可能会影响到你的交换机 – 如果你交换两个电脑的端口,交换机的性能是跟着PC还是停留在端口上?