为什么单个TCP连接很难占满带宽
首先有一个公式:
链路上数据包的总大小 = 带宽 * 网络延时
比如说带宽为10Mb/s, 网络延时为1ms,
那么链路上的数据包的总大小为: 10Mb/s * 1s/1000 = 10Kb
然后这个公式怎么推倒出来的呢, 我的思维方式里是这样的理解。我发现1秒钟,我的大脑很难理解它为一段时间,所以我把它拉长为2年,数据包我改成送信。
这样来想这个问题,从甲地到乙地,寄一封信的时间为2年(网络延时), 甲地每年往乙地最多能寄100封信(带宽), 那么从甲地到乙地邮寄的路程上,一共最多有多少封信在寄?
答案是200封, 很简单,假设甲地把带宽用满, 第一年寄100封,第二年寄100封,而这200封信都没有能到达乙地。所以链路上一共有200封信。
回到主题,为什么单个TCP链路很难把带宽用满。 原因很简单,TCP有滑动窗口的限制。 也就是说链路上最多只有滑动窗口那么多字节的数据。 如果你需要用单个TCP连接把带宽占满,你必须把滑动窗口设置成带宽*网络延时那么大。