路由与交换-QOS之Bandwidth Management
一.前言
bandwidth management常见于企业和ISP之间的线路,当物理接口的速率大于ISP所承诺的带宽CIR
时,则就需要在企业侧限制输出的带宽。带宽的管理主要有两种:traffic shape
和traffic police
。
tips:CIR-Committed Information Rate-承诺信息速率
二.令牌桶算法与限流
如何限制一个物理速度为10Mbps的接口速度至CIR-2Mbps?
如下图,以1s为间距,1s内只发送2Mb的数据,然后就不在发送,直到下一个1s的间隔;
在上图中,如果以1s为单位做分割,会造成一个问题:突发流量造成其他流量的大量丢弃,设想:
- 在0s时候,传输2Mb的ftp数据,话费0.2s;
- 在0.2~1之间,不在传输数据,有多个VoIP包被丢弃,用户侧出现0.8s无声;
- 在1~1.2之间,VoIP高优先级转发,但是速率只有0.125Mbps,同时转发的还有大量的ftp数据;
- 在1.2~2之间,因为2Mb已经被消耗殆尽,将不在传输数据,VoIP被丢弃;
如果将2M分割成4份,每份0.5Mb,则突发流量只会消耗较小范围(0.25s)内的token,如果间隔再细分,如分到0.05s,则在每个0.05的间隔内,VoIP都会优先传送(到发送队列后,直接发送不用排队),则意味着满足VoIP的要求(2个VoIP的数据包之间间隔<0.1s)。
Bucket and Token Algorithm-令牌桶算法
带宽管理遵从令牌桶算法:
- 每传输1bit的内容,就要Bucket中取走一个token,如果没有token则不允许发送。
- 每间隔一段时间(Time Interval-\(T_C\))会向Bucket中补充token(数量为Committed Burst-\(B_C\));
- Bucket的大小为\(B_c\),溢出的token将会被移除;
CIR与\(T_C\)与\(B_C\)之间关系:
所以\(T_C\)的值由\(B_C\)和CIR共同决定,\(B_C\)可以自定义,\(B_C\)值越小,曲线约平滑,但是过小又会加重设备负担。一般情况下针对VoIP可以适当设置小些,让传输更加平滑,针对文件传输,可以设置大些,减小设备负担。
三. Traffic Shaping
shaping即将超出CIR的Packet暂时放在一个Buffer中等待token发送。这样可以较police更高效率的利用带宽,如下图:
在shaping中的\(B_C\)与\(B_E\)与PIR(Peak Information Rate)高峰信息速率
\(B_C\)代表Bucket的大小与token的补充速度。在shaping中,如果配置有\(B_E\)则会有一些改变,如下图:
Bucket的大小变为\(B_C + B_E\),但token的补充速度依旧是\(B_C\).
这样,在不繁忙时,最大的token数会额外累加,从而应对突发流量,但是整体带宽因为token补充速度的原因,保持不变;
cisco中可以将shape模式配置为peck模式,此模式下token的补充速度为\(B_C+B_E\),从而进一步提高带宽的利用;
tips:运营商侧只对CIR带宽做保障,超过的可能被Drop或者Delay,要酌情划分;
queue-limit
在Shaping中,在token不够的时候,packet会在buffer中等待,此Buffer也被称为queue-limit,如果满了则会发生Tail Drop或者其他丢弃机制.
queue-limit可以配置bytes或者packets,也可以配置为时间,配置时间的意义就在于Voip,超过1s钟的数据再发送已经没有意义了,丢弃是合理的。
csr(config-pmap-c)#queue-limit ?
<1-64000000> in bytes, <1-8192000> in packets by default
四. Traffic Policing
Traffic Policing是另外一种带宽管理的方法,与shaping一样使用令牌桶算法,但也稍有区别:
- police中的bucket大小即B_C的值的最小单位为byte;
- police不会延时传送,token不足则把包丢弃;
- police中\(B_C\)与\(B_E\)为两个bucket,bucket大小分别为\(B_C\)与\(B_E\)的值;
4.1 Traffic Policing中的三种分类
Traffic Policing中总有3中分类:Single-rate Two-color Policer,Single-rate Three-color Policer及DualTwo-rate Three-color Policer.
Single-rate Two-color Policer
发包时通过查看\(B_C\)Bucket中是否有足够的token来决定执行绿色动作(conform action)还是红色动作(Exceed Action),如下图:
Single-rate Three-color Policer
首先\(B_C\)Bucket溢出的token会放入\(B_E\)Bucket中,直至\(B_E\)bucket达到上限;
转发包时,在\(B_C\)Bucket没有足够token后,判断\(B_E\)Bucket中的token会否满足,满足则执行溢出操作(Exceed Action),否则执行违规操作(Violate Action)。
Dual-rate Three-color Policer
区别于Single-rate Three-color Policer,\(B_E\)Bucket的token由PIR来决定\(T_C\)时间内的补充量;