—————————————————
前面说了MQC是实现QOS的技术,优先级映射是实现QOS的前提条件。
有人问了,既然是限制网速,怎么能提高服务质量呢?,如:一个人疯狂BT下载,导致网络拥塞,严重影响了其他的上网质量,所以在某些场景下不得不限速。限速的目的是防止有人恶意占用带宽,为保证整个网络不发生拥塞。
限速类似开车,不少人因超速被处罚。流量限速也类似,将进入/出交换机流量的速率限制在约定的范围内。如果超过限定速率,则对超出的报文进行惩罚。
1、没有超速,奖励绿卡,可畅通无阻(直接转发)
2、稍微超速,黄牌警告(报文缓存)
3、过分超速,红牌罚下,禁止通行(超过的报文丢弃)
常用的流量限速有两种技术:
流量监管:流量监管简单粗暴,如果流量超速,则对超出部分流量进行惩罚,直接丢弃。流量监管一般用于入方向,就像高速路,只有在入口限制进入高速公路的车辆的数量,才能保证高速公路不变成龟速公路。
流量整形:和流量监管相比,流量整形要温柔的多,流量整形用于限制某个或某个队列的输出速率,超速的报文不是直接丢弃,而是暂时存在缓存里,等空闲了还是会输出,只有缓存满了之后才会丢弃。这样使流量输出比较平稳,从而解决下游设备拥塞问题,所以流量整形一般用于出方向。
———————————————————
既然要限速,首先要解决测量速度问题,就像汽车限速,如果没有测速雷达等手段测试汽车的速度,那限速就没有意义。那交换机是如何判断流量是否超速呢?交换机使用的是:令牌桶。
在说令牌桶之前,先说说高速路上的汽车。旅游的季节到了,大家都开车汽车外出旅游,却被堵在高速公路上,让人感觉很痛苦。但如果有一种机制可以评估高速公路上的车流量、控制车流情况,确保进入高速公路的汽车都能在路上安全畅行,你会不会觉得很开心。与此相似,网络发生拥塞,也是非常痛苦的事情。
图:网络拥塞场景1
图:网络拥塞场景2
如果不限制用户发送的业务流量大小,大量不断突发的业务数据会使网络更加拥挤,严重时出现网络拥塞,造成业务出现异常。浪费网络资源。
图:网络拥塞造成的资源浪费
图:网络拥塞引起业务异常
那么,有什么机制可以在网络上通过监督进入网络的流量速率,以达到限制流量、提高网络资源使用效率目的,从而保证有限的网络资源提供更好的网络服务?
———————————————————
为了达到上述目的。我们需要对进入网络的流量进行监督,实现CAR(Committed Accress Rate)。
CAR:将进入网络的用户流量的速率限制在约定的范围之内,从而避免引起网络拥塞。要实现CAR,就需要对流量进行评估,然后根据评估的结果对流量采取相应的动作:
1、如果流量没有超速,设备会为报文奖励绿牌(将报文染色为绿色)。畅通无阻,即被转发。
2、如果流量稍微超速,设备会发出黄牌警告(将报文染色****),报文被降级,即修改报文内部优先级,然后尽力而为的转发。
3、如果流量超速太多,设备会发出红牌将报文罚下(将报文染色为红色)。禁止通行,直接丢弃。
然而,报文不像汽车那样可以通过测速仪之类的仪器进行测速,那么,如果对报文的速率进行评估呢?答案在这里:令牌桶。
令牌桶可以看作是一个存放令牌的容器,预先设定一定的容量。系统按给定的速度向桶中放置令牌,当桶中令牌满时,多余的令牌溢出。令牌桶是一种流量测量的方法。
———————————————————
接着上面的高速公路例子,假设进入高速公路的车辆需要在入口处领取到通行卡才能进入高速公路。为了节约人力成本,入口处放置自动出卡机。按照国家高速公路交通法规定,在高速上行驶,车速超过100km/h时,应与同车道前车保持100米以上距离。
为了保持最小安全行车距离100米,按车速100km/h计算,需要间隔至少3.6秒才能放行一辆车。因此出卡机每隔3.6秒出一张通行卡。在自动出卡机下放置一个盒子,自动出卡机按照3.6秒时间间隔向盒子中投放通行卡。每辆进入高速公路的车辆,从盒子中领取通行卡之后才可以进入高速。
令牌桶算法与此类似,令牌桶可以看做是一个存放一定数量令牌的容器,系统按照设定的速度向桶中放置令牌,当桶中令牌满时,多出的令牌溢出,桶中令牌不再增加。在使用令牌桶对流量规则进行评估时,是以令牌桶中的令牌数量是否足够满足报文的转发为依据。每个需要被转发的报文,都要从令牌桶中领取一定数量的令牌(具体数量视报文大小而定),才可以被正常转发。如果桶中存在足够的令牌可以用来转发报文,称流量遵守或符合约定值,否则称为不符合或超标。
按照系统向令牌桶投放令牌的速率和令牌桶的数量划分,令牌桶对应3种机制:单速单桶、单速双桶、双速双桶。
三种令牌桶的应用场景。
单速单桶:以CIR速率向C桶投放令牌。报文来了之后,从C桶取令牌,如果令牌够了,则进行转发,如果不够,则直接丢弃。一般用于较低优先级的业务。(如企业HTTP流量)限速,对于超过额度的流量直接丢弃,保证其他业务,不考虑突发。
单速双桶:以CIR速率向2个桶投放令牌。先投放小桶C桶,小桶满了在投放大桶E桶,报文来了之后,先使用小桶中的令牌,小桶中令牌数量不够,则放回去,在使用大桶中的令牌。对于超过C桶,而又没有超过E桶的报文标记为黄色。采用BE方式或者等网络空闲后进行转发。和单桶相比,单速双桶允许突发流量,主要用于较为重要而又不太紧急的业务,如Mail数据,可避免发送失败。
双速双桶:以CIR速率向C桶投放令牌,以PIR速率向P桶投放令牌。报文进来后,会同时取两个桶的令牌,C桶令牌够用,则标记为绿色直接转发,如果连P桶的令牌都不够用,则标记为红色直接丢弃。介于C桶和P桶之间,则标记为黄色。和单速双桶的区别就是向两个桶投放令牌的速率不同,我们一般设置PIR>CIR,P桶投放令牌的速率更快,所以更长时间撑住突发流量。
—————————————————————
假设有一套自动出卡系统,包括一台自动出卡机和一个盒子C。自动出卡机以固定的速率(3.6秒出一张卡)向盒子中投放通行卡。这个固定的速率,就相当于是单速单桶模式中的CIR参数。
CIR:承诺信息速率,表示向C桶(单桶模式中只能有一个令牌桶,称为C桶)中投放令牌的速率。即C桶允许传输或转发的报文平均速率。
如果平均每3.6秒来了不止1辆车,通行卡很快就领完了,这时自动出卡机上红灯亮起,新到的车辆禁止进入高速公路。这就起到了限定作用,将放行车辆的速率限制在放卡速率范围内。
如果平均每3.6秒来了不到1辆车,盒子里就会有一些积累起来的通行卡。这些积累起来的通行卡可以应付车队(比如俱乐部的汽车车队)要进入高速公路这样的情况。我们规定每辆车都要领取通行卡,都由领队的车领取。
假设某时刻来了一个车队共8辆车,但盒子只有6张通行卡,领队车拿起通行卡一张,发现不够,那么这个车队不允许进入高速,卡被放回盒子中。
盒子中的通行卡不停累积,总有装满盒子的时候,这个盒子的容积,就相当于单速单桶模式中的CBS参数。
CBS(Committed Burst Size):承诺突发尺寸,表示C桶的容量,即C桶瞬间能够通过的承诺突发流量。相当于盛放通行卡的盒子里最多可以放多少张卡。也就是说,该自动出卡系统允许通过的车队中最多可以有多少辆车。
在单速单桶模式中,系统按照CIR速率向C桶中投放令牌。
1、如果可用令牌的总数量(Tc)小于CBS,则令牌继续增加。
2、如果令牌桶已满,则令牌数不再增加。
对于到达的报文(报文大小为B)
1、如果B≤Tc,报文被标记为绿色,且Tc减少B。
2、如果B>Tc,报文被标记为红色,Tc不减少。
假设设备端口CIR设置为1Mbit/s,CBS为2000bytes,初始状态时C桶满。
1、假设第一个到达报文是1500bytes时候,检查C桶发现令牌数大于数据包的长度,所以数据包被标为绿色,C桶减少令牌1500bytes,还剩500bytes。
2、假设1ms之后到达第2个报文1500bytes。在此间隔内,C桶令牌新增=CIR*1ms=1000bit=125bytes,加上原来桶里剩余的500bytes,此时C桶共有625bytes,令牌数量不够,报文标记为红色。
3、假设又过1ms之后到达第3个报文1000bytes,在此间隔内,C桶新增令牌125bytes,加上C桶原来剩余的令牌625,此时桶中共有750,令牌数量不够,因此报文被标记红色。
4、假设又过了20ms后到达第4个报文1500bytes,在此间隔内,C桶新增令牌=CIR*20ms=200000bit=2500bytes,加上C桶原来剩余的令牌750,C桶此时令牌3250bytes,而CBS=2000bytes,因此溢出1250bytes令牌被丢弃。此时C桶令牌数大于报文长度,报文标记为绿色,C桶令牌减少1500,剩500。
—————————————————————
在单速单桶模式说到,如果平均每3.6秒来了不到1辆车,盒子就会积累一些通行卡。如果一直没有车辆过来,盒子中的通行卡不停累积,盒子的容量是有限的,当盒子中装满通行卡之后,不断投放的通行卡就会溢出,会造成浪费。
为了避免这种机制,我们改进了出卡系统,在原来的基础上增加了一个盒子E(改进后的系统对应单速双桶模式,盒子E对应单速双桶中的E桶)。自动出卡机首先向C盒中投放通行卡。当C盒满了,自动出卡机就向E盒中投放通行卡。
为了保证有序领取,规定先领取C盒的卡,如果C盒卡不够用,在把卡放回C盒,从E盒重新领取。C和E盒中的通行卡不能同时取用。
按照通行卡的取用,可以分为3种情况。
1、如果C盒中的通行卡够用,绿灯亮,车辆领取C盒中的通行卡通行。
2、如果C盒中的通行卡不够用,但E盒的卡够用,黄灯亮,从C盒领取的卡归还C盒,领取E盒中的通行卡后通行。
3、如果E盒中的通行卡也不够,红灯亮,车辆禁止通行,从E盒领取的卡归还E盒。
和单速单桶模式一样,对于车队,有几辆车,就领几张卡。当然,E盒的容量也是有限的,E盒的容量就相当于单速双桶模式中的EBS。
EBS(Excess Burst Size):超额突发尺寸,表示E桶的容量,即E桶瞬间能够通过的超出突发流量。
假设某时刻来了一个车队8辆车,但C盒里只有5张卡,而E盒中有9张卡,那么黄灯亮起,从E盒领取8张卡。
在单速双桶模式中,系统按照CIR的速率向桶中投放令牌。
1、如果C桶中可用令牌的总数量Tc小于CBS,则C桶增加令牌数。
2、如果Tc等于CBS且E桶中的可用令牌总数量Te小于EBS,则C桶中令牌数不增加,E桶令牌数增加。
3、如果C桶和E桶的令牌都满,则两个桶令牌数都不增加。
对于到达的报文(报文大小为B)
1、如果B≤Tc,报文标记为绿色,且Tc减少B。
2、如果Tc
3、如果B>Te,报文标记为红色,且Tc和Te都不减少。
假设设备端口的CIR设置为1Mbit/S,CBS2000bytes,EBS为2000bytes,初始状态时C桶和E桶满。
1、假设第1个到达的报文是1500bytes,检查C桶发现令牌数大于数据包的长度,所以数据包被标为绿色,C桶减少令牌1500,剩500,E桶数量不变。
2、假设1ms后到达第2个报文1500,在此间隔,C桶新增令牌=CIR*1ms=1000bit=125bytes,加上C桶剩余的500,C桶共625,检查发现C桶令牌数量不够,检查E桶发现有足够的令牌,因此报文标记为黄色,E桶减少令牌1500,剩余500,C桶剩余625保持不变。
3、假设又过了1ms到达第3个报文1000,在此间隔,C桶新增令牌125,加上C桶原来剩余的625,此时C桶共有750,检查发现C桶令牌不够,再检查E桶也不够。因此报文标记红色,C、E桶令牌数不变。
4、假设又过了20ms后到达第4个报文1500,在此间隔,C桶新增令牌=CIR*20ms=20000bit=2500bytes,加上C桶剩余的令牌750,C桶此时令牌数为3250,而CBS=2000,因此溢出的1250添加到E桶,此时E桶有1750,由于C桶中令牌数大于报文长度,报文标记绿色。C桶减少令牌1500,剩500,E桶不变。
—————————————————————
前面说到的自动出卡机,都只有1个口可以输出通行卡,这里说到的高级自动出卡机,有两个口可以出卡, 一个口输出的是通行卡,一个口输出的是服务卡。当然也有2个盒子盛放卡,分别是C盒和P盒。自动出卡机上的两个口分别以各自固定的速率向两个盒子中投放卡。(这个高级自动出卡系统对应双速双桶模式,C盒和P盒对应双速双桶模式中的C桶和P桶)。
领取卡的规则和前面单速的情况所有不同,规定:
1、先领取服务卡。如果服务卡不够,把卡放回P盒,红灯亮,车辆禁止通行。
2、如果服务卡足够但通行卡不够,黄灯亮,服务卡可以取走,通行卡放回C盒。
3、如果服务卡和通行卡都足够,绿灯亮,车辆可以通行,服务卡和通行卡都取走。
自动出卡机向P盒投放服务卡的速率和P盒的容量,就分别相当于双速双桶模式中的PIR和PBS。
PIR(Peak information rate):峰值信息速率,表示向P桶中投放令牌的速率。即P桶允许传输或转发报文的峰值速率。PIR的值应大于CIR(存在服务卡足够而通行卡不够的情况)。
PBS(Peak Bust Size):峰值突发尺寸,表示P桶的容量。即P桶瞬间能够通过的峰值突发流量。
按照国家高速公路交通安全法规定,在高速公路上行驶的车辆。最高时速为120km/h。前面领取的通行卡,保证车辆时速为100km/h,而服务卡的作用,则是允许车辆时速可以到达120km/h,自动出卡机向P盒投放服务卡的速率就是允许的最高车速,相当于PIR。
在双速双桶模式中,系统按照PIR速率向P桶投放令牌,按照CIR速率向C桶投放令牌。
1、如果P桶中可用令牌的总数量Tp小于PBS,则P桶中令牌数增加。
2、如果C桶中可用令牌的总数量Tc小于CBS,则C桶中令牌数量增加。
对于到达的报文(报文大小为B)
1、如果Tp<B,报文被标记红色,且Tc和Tp都不减少。
2、如果Tc<B≤Tp,报文被标记黄色,且Tp减少B,Tc不减少。
3、如果B≤Tc,报文标记为绿色,且Tp和Tc都减少B。
假设设备端口的CIR设置为1Mbit/s,PIR设置为2Mbit/s,CBS为2000,PBS为3000,初始状态C桶和P桶都满。
1、第1个到达的报文假设是1500,检查发现报文长度不超过P桶也不超过C桶,报文被标记绿色,C桶和P桶都减少令牌1500,C桶剩500,P桶剩1500。
2、假设1ms后到达第2个报文1800,在此间隔,P桶新增令牌=PIR1ms=2000=250,加上P桶原来剩余的1500,P桶共1750,小于报文长度,C桶新增令牌=CIR1ms=1000=125,加上C桶原来的500,C桶共625。报文标记为红色,P和C桶令牌数不变。
3、假设又过1ms后到达第3个报文1000,在此间隔,P桶新增令牌250,加上原来1750,共2000,大于报文长度,在检查C桶,C桶新增250,加上原来的625,共875,仍然小于报文长度。报文被标记黄色,P桶减少1000,C桶保持不变。
4、假设又过了20ms之后到达报文1500,再次间隔,P桶新增=PIR20ms=40000=5000, 超过P桶PBS,因此P桶令牌数PBS=3000,溢出的丢弃。这样P桶有3000,大于报文长度。C桶增加CIR20=20000=2500,超过C桶容量CBS,因此C桶令牌数CBS=2000,溢出的丢弃。C桶令牌数2000,大于报文长度。报文标记绿色。P减少1500,C减少1500。
—————————————————————
三种令牌桶模式之间既有区别也有演进关系。
三种令牌桶模式之间的区别,其功能和使用场景也有所不同。
—————————————————————
在令牌桶算法中,CIR的值越大,即令牌产生的速率越大,报文可以获取的令牌就越多,流向网络的流量也就越大。因此,CIR的值是控制流入网络中流量多少的关键。CBS也是一个重要参数,CBS值越大,C桶中可以积累令牌的数目也越多,允许通过的报文尺寸就越大。
由于设备是逐包转发,CBS的值不应该小于当前网络上允许传输报文的最大长度。
如:在单速单桶模式下,假如把流量限定在10Mbit/s,而CBS值太小(如设置1000byte)。如果某个时间段内流量的报文,每个报文都大于1000byte,那么这些报文全部被丢弃。这段时间内,没有报文被转发,报文转发的速率为0。导致网络资源浪费,业务出现异常。
那么CBS值越大越好吗。CBS值越大,会失去限速意义。假设把流量限定在10Mbit/s,CBS设置为7200Mbyte。某个时刻,令牌桶中的令牌已满,如果接下来1小时内流量的报文,其报文长度不一,但共计7200Mbyte,这些报文都能获得令牌并被转发,那么这段时间内报文速率为16Mbit/s(7200M*8/3600)而不是10Mbit/s,没有实现限速。
同理,对于双速双桶模式,PIR和PBS的值也应该设置在合理范围。
目前华为交换机只支持单速单桶和双速双桶模式。
带宽参数的设置取决于实际业务的限速需求,原则上,令牌桶容量需要大于等于网络中可能出现的最大报文长度和业务流量的正常突发量。对于华为的交换机,我们有总结的经验公式:
1、带宽≤100Mbit/s时,令牌桶容量(Bytes)=带宽(kbit/s)*1000(s)/8。
2、带宽>100Mbit/s时,令牌桶容量(Bytes)=100000(kbit/s)*1000(s)/8。
**另外华为交换机,不同系列的单板支持的CAR粒度不同,在进行流量监管和限速时。
1、如果配置的CIR、PIR是最小粒度的整数倍,则按照配置的速率进行监管和限速。
2、如果配置的CIR、PIR不是最小粒度的整数倍,则按照最小粒度的整数倍进行流量监管和限速。
例如:设备上的监管和限速粒度为64kbit/s,如果CIR值≤64kbit/s,按照64kbit/s;如果128kbit/s ————————————————————— 令牌桶原理可以应用到设备的入方向和出方向。根据令牌桶原理在不同的方向应用,可以实现不同功能。 如图: 流量监管是一种通过对流量规格进行监督,以限制流量及网络资源使用的流控策略。如果这种流控策略应用到设备接口的入方向,也可以实现入方向的接口限速。与基于接口实现的入方向的接口限速相比,这种方式引入了MQC,因此应用更加灵活。 通常我们所说的限速是广义上的接口限速,包括基于接口和基于MQC实现的入方向的接口限速。 ————————————————————— 流量监管一般用于入方向,各种业务对服务质量的要求。1.4.令牌桶原理应用之接口限速
1.5.基于流分类MQC的流量监管