2010-03-05 17:06:15 CAR: 承诺访问速率(CAR,Commited Access Rate)是一种流量策略的分类和标记的方法, 它基于IP 优先级、DSCP 值、MAC 地址或者访问控制列表来限制IP 流量的速率。标记则可以 改变IP 优先级或者DSCP。 CAR 使用令牌桶的机制,检查令牌桶中是否有足够的令牌。如果一个接口有可用的令牌,令牌可以从令牌桶中挪走,数据包被转发,当这个时间间隔过去后,令牌会重新添加到令牌桶中。如果接口没有可用的令牌,那么CAR 可以定义对数据包采取的行为。CAR 使用3 种速率定义来定义流量的速率: Normal rate(正常的速率):令牌被添加到令牌桶中的平均速率,就是数据包的平均传输速率。 Normal burst(正常的突发):正常的突发时在时间间隔内允许正常流量速率的流量。 Excess burst(过量突发):超过正常突发的流量。当配置过量突发时,会借令牌并且 将它添加到令牌桶中来允许某种程度的流量突发。当被借的令牌已经使用后在这个接口 上收到的任何超出的流量会被扔掉。流量突发只会发生在短时间内,直到令牌桶中没有 令牌存在才停止传输。 通常建议正常的流量速率配置为等于在一段时间内的平均流量速率。正常的突发速率应 当等于正常速率的1.5 倍。过量速率是正常突发速率的2 倍。 DSCP:差分服务代码点 主要是是数据包中的TOS或者COS来标记的。比如IP优先级之类的。 IETF Diffserv工作组 正在进行使用户可以使用IP报头中的 ToS字节中的 6bit用来标记DSCP ![]() TOS 整个字段一共 8位,下图中是 ip precedence 的标识方法,使用前三位,也就是 P0、P1、P2 一共三位,共 8个 bit 位,也就是 8个优先级,分别是0-7,其中6和7一般保留,常用的是 0-5,图中下面部分介绍的事 IP 优先级的含义,提供这个表格的意义在于 进行更改数据包优先级等配置时,我们既可以使用数字,也可以使用名称。 ![]() 分类是没有范围限制的,也就是说我们可以对数据进行灵活的分类,比如说把某一个源ip 到目的 ip 的流量优先级进行更改 IP 优先级或者 DSCP 的操作。也可以定义去更改某一个特定的流量(扩展控制列表)的优先级。 R1(config)#int s0/0/0 R1(config-if)#rate-limit output access-group 101 64000 12000 16000 conform-action set-prec-transmit 3 exceed-action set-prec-transmit 0 //以上在接口上启用CAR,对于符合ACL 101 的流量,平均速率为64000 位/秒,正常突发 量为12000 字节/秒,过量突发量为12000 字节/秒。 R1(config-if)#rate-limit output access-group 102 16000 8000 9000 conform-action set-prec-transmit 2 exceed-action drop R1(config-if)#rate-limit output 48000 8000 10000 conform-action set-prec-transmit 0 exceed-action drop R1(config)#access-list 101 permit tcp any any eq www R1(config)#access-list 102 permit tcp any any eq smtp 【技术要点】rate-limit 的命令格式为: rate-limit { output | input } { { action } CIR 单位是bit/s;而BC 和BE 的单位是byte/s。 conform-action 的条件是指当要发的数据小于正常突发(bc)的时候 exceed-action 是指要发的数据大于普通突发,小于最大突发(be)的时候。 action 的选项共有如下这些: continue:继续执行下一条CAR 语句 drop:丢弃数据包 tranmsit:转发数据包 set-prec-continue { precedence }:设置IP 优先级并继续执行下一条CAR 语句 set-prec-transmit { precedence }:设置IP 优先级并转发数据包 set-dscp-continue { dscp }:设置dscp 值并继续执行下一条CAR 语句 set-dscp-transmit { dscp }:设置dscp 值并转发数据包 试验: R1(config-if)#rate-limit output ? <8000-2000000000> Bits per second access-group Match access list 使用访问控制列表做对象 dscp Match dscp value 使用差分服务代码访问点做对象 qos-group Match qos-group ID R1(config-if)#rate-limit output access-group 3 64000 15000 36000 ? conform-action action when rate not exceeded rate-limit output access-group 3 64000 1600 36000 conform-action transmit exceed-action drop config t hostname R1 int s1/0 ip add 192.168.30.1 255.255.255.0 no shutdown int fa2/0 ip add 192.168.2.1 255.255.255.0 no shut exit access-list 3 permit 192.168.2.0 0.0.0.255 access-list 4 permit 192.168.11.0 0.0.0.255 access-list 101 permit tcp any any eq www access-list 102 permit udp any any eq tftp int s1/0 rate-limit output access 3 64000 16000 36000 conform-action transmit exceed-action drop rate-limit output access 4 35000 17000 27000 conform-action transmit exceed-action drop rate-limit output access 101 64000 26000 46000 conform-action transmit exceed-action drop rate-limit input access 102 64000 16000 36000 conform-action transmit exceed-action drop end show run show int s1/0 |
|