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 } { CIR BC 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