CAR:

承诺访问速率(CARCommited 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 } { CIRBC BE } conform-action { action } exceed-action

{ 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

 

案例配置参考:

 

enable
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