CAR
什么是CAR
流量监管采用承诺访问速率CAR(Committed Access Rate)来对流量进行控制。CAR利用令牌桶来衡量每个数据报文是超过还是遵守所规定的报文速率。
CAR主要有两个功能:
流量速率限制:通过使用令牌桶对流经端口的报文进行度量,使得在特定时间内只有得到令牌的流量通过,从而实现限速功能。
流分类:通过令牌桶算法对流量进行测量,根据测量结果给报文打上不同的流分类内部标记(包括服务等级与丢弃优先级)。
CAR的处理流程
当报文到来时,首先检查端口的匹配规则,如果匹配上了,则进行速率控制,报文进入令牌桶中进行流量速率评估。
令牌桶评估后,报文被标记为红、黄、绿三种颜色。红色表示报文速率过大,不符合规定;黄色表示虽然不符合规定但允许临时的突发,绿色表示符合规定。
报文标为红色的直接丢弃,黄色则重新标记后转发,绿色则直接转发。
CAR的报文标记过程
NE20E依据相关标准实现CAR功能。CAR中令牌添加方式是报文触发,添加令牌的数量是CIR×当前时间与上次添加令牌的时间之差。向桶内注入令牌后,再判断桶内的令牌数是否满足传送该报文的要求。
CAR支持单速单桶、单速双桶、双速双桶的标记方式。本文举例介绍这三种标记的色盲模式如何处理报文(色敏模式的处理与之类似)。
单速单桶
假设设备端口的CIR设置为1Mbps,CBS为2000 bytes,初始状态时C桶满(单速单桶的EBS为0,只有一个C桶)。
- 假设第1个到达的报文是1500 bytes时,检查C桶发现令牌数大于数据包的长度,所以数据包被标为绿色,C桶减少1500 bytes,还剩500 bytes。
- 假设1ms之后到达第2个报文1500 bytes,先填充令牌,新增令牌=CIR*时间间隔=1Mbps*1ms=1000bit=125bytes,加上C桶原来剩余的令牌500bytes,此时C桶共有625bytes,令牌不够,报文标记为红色。
- 假设又过1ms后到达第3个报文1000 bytes,但C桶只有625 bytes,小于报文长度,因此新增令牌CIR*1ms=1000bit=125bytes,此时C桶共有750 bytes,依然不够,因此报文被标记为红色。
- 假设又过20ms后到达第4个报文1500 bytes,但C桶只有750 bytes,小于报文长度,因此C桶新增令牌CIR*20ms=20000bit=2500bytes,增加令牌后,C桶令牌数为3250 bytes,而CBS=2000bytes,因此溢出1250bytes令牌被丢弃,此时C桶大于报文长度,报文标记为绿色,C桶减少1500bytes,剩500bytes。
以上过程汇总如下:
包序号
时刻
包长
与上次添加令牌的间隔
本轮增加令牌
令牌增加后C桶令牌
报文处理后C桶剩余令牌
报文标记结果
-
-
-
-
-
2000
2000
-
1
0
1500
0
0
2000
500
绿色
2
1
1500
1
125
625
625
红色
3
2
1000
1
125
750
750
红色
4
22
1500
20
2500
2000
500
绿色
单速双桶
假设设备端口的CIR设置为1Mbps,CBS为2000 bytes,EBS为2000 bytes,初始状态时C桶和E桶满。
- 假设第1个到达的报文是1500 bytes时,检查C桶发现令牌数大于数据包的长度,所以数据包被标为绿色,C桶减少1500 bytes,还剩500 bytes,E桶保持不变。
- 假设1ms之后到达第2个报文1500 bytes,但C桶只有500 bytes,小于报文长度,因此新增令牌CIR*1ms=1000bit=125bytes,增加令牌后,C桶令牌数为625 bytes,依然不够。检查E桶有足够令牌,因此报文标记为黄色,E桶减少1500bytes,剩500bytes,C桶不变。
- 假设又过1ms后到达第3个报文1000 bytes,但C桶只有625 bytes,小于报文长度,因此新增令牌CIR*1ms=1000bit=125bytes,增加令牌后,C桶令牌数为750 bytes,依然不够,检查E桶也不够,因此报文被标记为红色,C桶、E桶令牌数不变。
- 假设又过20ms后到达第4个报文1500 bytes,但C桶只有750 bytes,小于报文长度,因此C桶新增令牌CIR*20ms=20000bit=2500bytes,增加令牌后,C桶令牌数为3250 bytes,而CBS=2000bytes,因此溢出1250bytes添加到E桶,此时E桶有1750bytes。由于此时C桶大于报文长度,报文标记为绿色,C桶减少1500bytes,剩500bytes,E桶不变。
以上过程汇总如下:
包序号
时刻
包长
与上次添加令牌的间隔
本轮增加令牌
令牌增加后各桶令牌(C桶)
令牌增加后各桶令牌(E桶)
报文处理后各桶剩余令牌(C桶)
报文处理后各桶剩余令牌(E桶)
报文标记结果
-
-
-
-
-
2000
2000
2000
2000
-
1
0
1500
0
0
2000
2000
500
2000
绿色
2
1
1500
1
125
625
2000
625
500
黄色
3
2
1000
1
125
750
500
750
500
红色
4
22
1500
20
2500
2000
1750
500
1750
绿色
双速双桶
假设设备端口的CIR设置为1Mbps,PIR设置为2Mbps,CBS为2000 bytes,PBS为2000 bytes,初始状态时C桶和P桶满。
- 第1个到达的报文假设是1500 bytes时,检查发现报文长度不超过P桶也不超过C桶,所以数据包被标为绿色,C桶和P桶都减少1500 bytes,C桶还剩500 bytes,P桶还剩500bytes。
- 假设1ms后到达第2个报文1500 bytes,超过P桶,因此P桶新增令牌PIR*1ms=2000bit=250bytes,此时P桶共有750 bytes,依然小于报文长度。因此报文标记为红色,P桶、C桶令牌数不变。
- 假设又过1ms后到达第3个报文1000 bytes,超过P桶,因此P桶新增令牌PIR*1ms=2000bit=250bytes,此时P桶共有1000 bytes,等于报文长度,再检查C桶,此时C桶500bytes,小于令牌数,因此C桶新增令牌CIR*2ms =2000bit =250bytes,增加令牌后,C桶令牌数为750bytes,仍然小于报文长度,因此报文被标记为黄色,P桶减少1000bytes,剩0bytes,C桶不变。
- 假设又过20ms之后到达报文1500 bytes,但P桶没有令牌,不够发送报文,因此P桶新增令牌PIR*20ms=40000bit=5000bytes,超过P桶容量PBS,因此P桶=PBS=2000bytes,溢出的令牌丢弃;这样P桶有2000bytes,大于报文长度,因此比较C桶,C桶此时令牌数750bytes,小于报文长度,因此C桶新增令牌CIR*20ms=20000bit=2500bytes,大于CBS的2000 bytes,因此溢出的令牌丢弃,增加令牌后,C桶令牌数为2000 bytes,大于报文长度,报文被标记为绿色,C桶减少1500bytes还剩500bytes,P桶减少1500bytes还剩500bytes。
以上过程汇总如下:
包序号
时刻
包长
与上次添加令牌的间隔(C桶)
与上次添加令牌的间隔(P桶)
本轮增加令牌(C桶)
本轮增加令牌(P桶)
令牌增加后各桶令牌(C桶)
令牌增加后各桶令牌(P桶)
报文处理后各桶剩余令牌(C桶)
报文处理后各桶剩余令牌(P桶)
报文标记结果
-
-
-
-
-
-
-
2000
2000
2000
2000
-
1
0
1500
0
0
0
0
2000
2000
500
500
绿色
2
1
1500
1
1
125
250
625
750
625
750
红色
3
2
1000
1
1
125
250
750
1000
750
0
黄色
4
22
1500
20
20
2500
5000
2000
2000
500
500
绿色
三种令牌桶的使用场景
单速单桶和单速双桶关注报文尺上的突发,其令牌添加方式和报文处理流程比较简单;双速双桶关注速率上的突发,其令牌添加方式和报文处理流程相对复杂。
单速和双速各有优点,不同的实现方式决定了其具有一定的性能差异(丢包率、突发流量处理性能、大小包混合转发性能、数据转发平缓程度等),在实际应用中,应针对不同的流量特征选择恰当的标记方式。
如果只是为了限制带宽,使用单速单桶。
如果在限制带宽的基础上,还要对输入流量的突发情况进行区分,做不同的标记处理,则使用单速双桶。注意:标记为yellow的动作一定要同标记为green的配置的不一样,否则限速效果与单速单桶一样。
如果在限制带宽的基础上,还要对输入流量的带宽情况进行区分,区分出带宽是小于CIR还是在CIR~PIR之间,则使用双速双桶。注意:标记为yellow的动作也要同标记为green的动作配置得不一样,否则限速效果与单速单桶一样。
CAR的参数设置
在令牌桶算法中,CIR设置越大,令牌产生的速率越大,则分组获得令牌就越多,流向网络的流量也就越大,因此,CIR的大小是控制流入网络中流量多少的关键。另外,令牌桶桶深CBS也是一个重要参数,随着令牌桶桶深的增加,C桶中积累令牌的数目也将越多,流入网络的流量就越大。
- 对于承诺突发流量CBS,不应该小于报文的最大长度,因为路由器是逐包转发的。例如,当CIR=100Mbps,CBS=200bytes,那么对于1500byte每包的流量而言,每次令牌桶比较的包长都大于CBS,即使数据流速率小于100Mbps,也全部被标记为红色或黄色,导致CAR效果不准确。
令牌桶算法的带宽参数设置取决于实际网络业务的限速需要。桶深是一个重要参数,具体该如何设置,则取决于具体的业务流量情况。原则上,桶深需要满足如下条件:
- 桶深>=MTU
- 桶深>=业务流量的正常突发
条件1比较直观,容易操作;但条件2实际操作比较困难,因此出现了一些经验性的计算公式,例如:
桶深(Bytes)=带宽(kbps) * RTT(ms) / 8,其中的RTT是TCP协议的往返时间,通常取1500ms。
对NE20E总结的经验性公式为:
- 带宽<=100Mbps时,桶深(Bytes)=带宽(kbps) * 1500(ms) / 8
- 带宽>100Mbps时,桶深(Bytes)=100,000(kbps) * 1500(ms) / 8
CAR之后的带宽计算是基于整包的,即不仅仅包括IP头及IP净荷。例如,对于以太网业务,还包含了帧头和CRC,但不包含前导码、帧间隔。完整的以太帧如下(长度单位:字节):
CAR之后的带宽计算不包括其中的Inter frame gap、Preamble、SFD。