一、实验拓扑与实验现象
实验拓扑如图所示,在①号机上发送数据,③号机上接受数据,同时在④号机的eth1与eth2网口限制速率为115200kbps,命令如下
tc qdisc add dev eth1 root tbf rate 115200bps buffer limit
tc qdisc add dev eth2 root tbf rate 115200bps buffer limit
图1 实验拓扑
然后在④号机上使用ifstat查看网口状态,得到结果如下:
我们可以看到eth1的入口速率为144KB/s左右,而eth2的出口速率为112KB/s左右,那么还有32KB/s的速率哪里去了呢?
二、令牌桶在端口限速的原理
首先让我们了解下令牌桶限速的原理,如限速原理图如下(此图引自博文:令牌桶算法的应用 )
图2 使用令牌桶做端口限速的原理图
图2展示是了linux系统中宽带管理的实现,需由端口发送的报文通过分类器分类以后,进入队列,这个队列的大小由上面tc tbf命令中的limit设定,若令牌桶中有这个报文大小的令牌,则将此报文发送出去,否则在缓存队列中等待,等待有足够多的令牌后在发送,若在这个过程中缓存队列溢出,则将导致部分报文被丢弃,这里值得注意的是发送报文是以包为单位发送的,但是令牌桶的实现是以字节为单位,而不是针对包进行的。
每个到来的令牌从数据队列中收集一个数据包,然后从桶中被删除。这个算法关联到两个流上——令牌流和数据流,于是我们得到3种情景:
1、数据流以等于令牌流的速率到达TBF。这种情况下,每个到来的数据包都能无延迟地通过队列。
2、 数据流以小于令牌流的速度到达TBF。通过队列的数据包只消耗了一部分令牌,剩下的令牌会在桶里积累下来,直到桶被装满。剩下的 令牌可以在需要以高于令牌流速率发送数据流的时候消耗掉,这种情况下会发生突发传输。
3、数据流以大于令牌流的速率到达TBF。这意味着桶里的令牌很快就会被耗尽。导致TBF中断一段时间,称为“越限”。如果数据包持续到 来,将发生丢包。
最后一种情景非常重要,因为它可以用来对数据通过过滤器的速率进行整形。
可见,令牌的积累可以导致越限的数据进行短时间的突发传输而不必丢包,但是持续越限的话会导致传输延迟直至丢包。
博客迁到个人博客网站:http://btdog.com.cn/index.php/home/article/detail/id/3.html