什么是令牌桶
在我们讨论突发数据量之前,我们首先要理解令牌桶的概念。令牌桶本身没有丢弃
和优先级策略,
令牌桶是这样工作的:
1. 令牌以一定的速率放入桶中。
2. 每个令牌允许源发送一定数量的比特。
3. 发送一个包,流量调节器就要从桶中删除与包大小相等的令牌数。
4. 如果没有足够的令牌发送包,这个包就会等待直到有足够的令牌(在×××
器的情况下)或者包被丢弃,也有可能被标记更低的DSCP(在策略者的情况下)。
5. 桶有特定的容量,如果桶已经满了,新加入的令牌就会被丢弃。因此,在
任何时候,源发送到网络上的最大突发数据量与桶的大小成比例。令牌桶允许突发,
但是不能超过限制。
Cisco IOS 流量策略(Traffic Policers)
IOS支持两种流量策略:
1. 传统的Cisco流量策略:CAR承诺接入速率,使用命令
Router(config-if)#rate-limit {input | output} CIR (bps)
Bc(burst-normal) Be(burst-max) conform-action action exceed-action action
2. 新型的Cisco流量策略:基于类的策略(Class-based policer),使用模
块化Qos CLI(MQC)语法。可以使用MQC命令建立流量策略并把策略应用到接口。
一个流量策略包括一个流量类(traffic class)和一个或多个Qos特性。Policy
命令用来执行流量策略特性,它指定了一个流量类所需要的最大速率,超过这个速
率Qos系统会立刻执行一个操作,标准的操作是丢弃或重置包头的DSCP字段。Policy
命令的语法是:
police cir Bc Be conform exceed
violate
理解Bc和Be
对于超额的数据包,流量策略并不会把它们缓存稍候转发,只有×××器(shaper)
会这样做。流量策略只执行一个发送或不发送的策略。因为不能缓存数据包,所以
在发生拥塞时,所能做的最好的方法就是通过配置适当的超额突发数据量Be来不那
么过分的丢弃数据包。这一点对理解流量策略使用Bc和Be来保证达到CIR是非常
重要的。
超额参数模仿路由器的通用缓存规则。The rule recommends configuring buffering
equal to the round-trip time bitrate to accommodate the outstanding TCP
windows of all connections in times of congestion.
突发参数 目的 推荐公式
普通突发 · 执行标准的令牌桶 · 设置最大数量的令牌(尽管如
果Be>Bc的话可以借到令牌). · 决定令牌桶有多大,因为如果桶已经满了那么令
牌将被丢弃而不会再加入到桶中。 CIR [bps] * (1 byte)/(8 bits) * 1.5
seconds Note: 1.5 seconds is the typical round trip time.
超额突发 · 为令牌桶提供超额突发能力 · 如果Bc = Be那么不
支持超额突发 · 当Bc = Be,流量调节器就不能借令牌,当令牌不够时只能丢弃数
据包 两倍的Bc
对TCP流量的测试表明,Bc 和Be的数值应该近似等于配置的平均速率在两秒钟内
的流量。如果你想限制流量在1Mb,应该把Bc 设置在1-2Mb,Be在2-4Mb。
举个例子,如果我们想把输出速率限制在1.5Mbps,我们可以做一下步骤:
1. 把承诺速率从比特转换成字节,因为突发数据量的单位为字节。
1500000 bits / 8 bits = 187500 bytes
2. 使用标准的1.5秒往返时间(round-trip time)计算Bc
187500 bytes * 1.5秒 = 281250 bytes
3. 两倍的Bc为Be
281250 bytes * 2 = 562500 bytes
使用命令
rate-limit input 1500000 281250 562500 conform-action {action}
exceed-action {action}
超额突发数据量
当数据包到达时可用的令牌数目小于包的大小,就可以使用超额突发数据量。包会
请求借用令牌。可以通过配置大于Bc的Be的数值来为令牌桶提供超额突发能力。
可以通过下面两个例子来理解Be。
第一个例子说明怎样配置CAR策略来允许所有的IP流量。管理员在T3线路上提供
了便宜的20Mbps的子速率服务。用户只花费子速率带宽的金额,也可以按需要增加
带宽。CAR限制了用户可用的流量速率,用户只能使用规定的速率加上承诺的突发
数据量。可以适当的设置Be=32000。
interface hssi 0/0/0
rate-limit output 20000000 24000 32000 conform-action transmit
exceed-action drop
下一个例子,用户只能发送24000字节的突发数据量,所有超过限制的数据包都要
被丢弃,因为设置Bc=Be,数据包流不能通过超额突发能力来借用令牌。
interface Hssi0/0/0
rate-limit output 20000000 24000 24000 conform-action transmit
exceed-action drop
正确设置突发数据量的重要性
策略以字节为单位指定了突发数据量,基于类的策略(class-based policer)支持
最小的突发数据量为1000字节,包括第二层包头。
突发数据量的目的是逐渐的丢弃数据包,就像RED那样,并且避免尾丢弃。设置足
够高的突发数据量对保证良好的吞吐量是非常重要的。
设置突发数据量时,考虑一下内容:
1. 如果突发数据量设置的过低,数据到达的速率将远远低于配置的速率。
2. 惩罚暂时突发对TCP流的吞吐量来说是相当不利的,具体情况请察看RFC
2001 and Random Early Detection (RED) gateways for Congestion Avoidance。
设置突发数据量来允许路由器容纳暂时突发。
3. 对离开接口的数据包的处理基于包的大小和桶中剩余的令牌数。
4. 在基于类的策略中,流量测量器不论接口是否拥塞都是激活的。每个包都
会经过令牌桶测量系统来决定是否符合配置的参数。
5. 如果数据突发量非常大而且非常突然,那么配置较高的超额突发数据量可
以保证超额令牌桶中存放较多的令牌。而且可以调整接口的MTU等于或大于突发数
据量大小。
允许的突发数据量数值
最初,包括IOS12.0,rate-limit命令支持承诺和超额的突发数据量的范围是:
Router1(config-if)#rate-limit input 18000000 ?
<8000-2000000> Normal burst bytes
Router1(config-if)#rate-limit input 18000000 2000000 ?
<8000-8000000> Maximum burst bytes
Router1(config-if)#rate-limit input 18000000 2000000
IOS12.1增加了突发数据量的最大值:
7500-107(config)#interface atm 1/0/0
7500-107(config-if)#rate-limit output ?
<8000-2000000000> Bits per second
access-group Match access list
qos-group Match qos-group ID
7500-107(config-if)#rate-limit output 18000000 ?
<1000-512000000> Normal burst bytes
7500-107(config-if)#rate-limit output 18000000 2250000 ?
<2000-1024000000> Maximum burst bytes
step-by-step流量策略指南
在12.0(5)XE流量策略特性模块中提供了数据包如何进入一个配置了策略的接口的
step-by-step的总结。总结需要理解堆积债务和复合债务。对于债务的概念,请察
看IOS配置指南Policing and Shaping Overview。
下面这个例子中,离开接口F0/0的流量平均速率被设置为1bps,Bc 为2btyes,Be
为4bytes。
7200-uut(config)# class-map larry
7200-uut(config-cmap)# match access-group 2
7200-uut(config-cmap)# exit
7200-uut(config)# policy-map bird
7200-uut(config-pmap)# class larry
7200-uut(config-pmap-c)# police 1 2 4 conform-action transmit exceed-action
set-qos-transmit 4
7200-uut(config-pmap-c)# exit
7200-uut(config-pmap)# exit
7200-uut(config)# interface fastethernet 0/0
7200-uut(config-if)# service-policy input bird
这个例子中所有的进入数据包都要制定的匹配标准相符合,并且在一个时间单位T
内只有一个数据单元进入令牌桶。
1. 配置了Bc=2bytes,令牌桶中有两个令牌,一个令牌等于1bytes。
2. 配置了1bps的平均速率,每个1byte的包需要一个令牌来获得承诺操作
(conform action)
3. 传输第一个包需要一个令牌,因为桶中能够提供传输第一个包所需的令牌
数,所以第一个包符合限制条件,被传输。桶中还剩下一个令牌。
4. 第二个包需要剩下的一个令牌,桶中也能够提供传输第二个包所需的令牌
数,所以第二个包也被传输。这时桶中就没有剩余的令牌。
5. 第三个包还需要令牌,但是桶中已经没有令牌了,超额突发被激活。
超额突发能力分析两个数字:超额突发的大小和复合债务(compound debt)。超额
突发大小通过CLI指定(本例中是4),复合债务等于上一次包被丢弃以来所有实
际债务的和。
实际债务等于当前流所借的令牌数。实际债务的值可以由当前从桶中取出的令牌数
(本例中借了一个令牌)乘以令牌被取出的次数(本例中是一次),这样,传输完
第三个包之后的实际债务就是1。
这个例子中复合债务与实际债务相等都是1,注意上一个包的复合债务加上当前包
的实际债务也等于当前复合债务。
因为复合债务是1,小于超额突发数据量的4,所以第三个包也被传输。
6. 第四个包还需要令牌。
超额突发能力仍然在激活状态。第四个包需要借用一个令牌,这是第二次借用令牌,
因此实际债务变成2。复合债务等于传输上一个包的复合债务加上当前的实际债务,
所以当前的复合债务是3(1+2)。3仍然小于配置的超额突发数据量4,所以数据
包4也被承诺传输。
7. 第五个包也需要令牌。
超额突发能力仍然在激活状态。实际债务是3,复合债务是6(3+3),超过了超额
突发数据量,所以第五个包被超额操作(exceed-action)指定了Qos 组4。超额操
作发生之后复合债务归零,而实际债务不受丢包影响,仍然是2。
8. 第六个包也需要令牌。
超额突发能力仍然在激活状态。当然实际债务是3,注意在计算一共从桶中借了多
少次令牌的时候要加上上次为包3和4所借的令牌。复合债务是3(0+3),小于超
额突发,所以第六个包被承诺传输。
9. 第七个包也需要令牌。
超额突发能力仍然在激活状态。实际债务是4,复合债务是7(3+4),超过了超额
突发,所以第六个包执行超额操作。超额操作发生之后复合债务归零,而实际债务
不受丢包影响,仍然是3。
·
数据包顺序 使用的令牌数 剩余令牌 实际债务 复合债务 对包的操作及Before Packet 1 X 2 0 0
Packet 1 1 1 0 0 Transmit. No actual or
compound debt.
Packet 2 1 0 0 0 Transmit. No actual or
compound debt.
Packet 3 1 0 1 1 Transmit. Tokens are
borrowed and counted against actual and compound debt, but the compound debt
is still less than the excess burst size
Packet 4 1 0 2 3 Transmit. Tokens are
borrowed and counted against actual and compound debt, but the compound debt
is still less than the excess burst size.
Packet 5 1 0 3 6 Assign a QoS transmit value
of 4. Because the compound debt exceeds the excess burst size, the exceed
action is taken.
Packet 6 1 0 3 3 Transmit. After packet 5 is
dropped, the compound debt resets to 0. However, the actual debt of 2 remains.
Therefore, the new compound debt of 3 is lower than the excess burst size,
so the packet conforms.
Packet 7 1 0 4 7 Assign a QoS transmit value
of 4. Because the compound debt exceeds the excess burst size, the exceed
action is taken.
在我们讨论突发数据量之前,我们首先要理解令牌桶的概念。令牌桶本身没有丢弃
和优先级策略,
令牌桶是这样工作的:
1. 令牌以一定的速率放入桶中。
2. 每个令牌允许源发送一定数量的比特。
3. 发送一个包,流量调节器就要从桶中删除与包大小相等的令牌数。
4. 如果没有足够的令牌发送包,这个包就会等待直到有足够的令牌(在×××
器的情况下)或者包被丢弃,也有可能被标记更低的DSCP(在策略者的情况下)。
5. 桶有特定的容量,如果桶已经满了,新加入的令牌就会被丢弃。因此,在
任何时候,源发送到网络上的最大突发数据量与桶的大小成比例。令牌桶允许突发,
但是不能超过限制。
Cisco IOS 流量策略(Traffic Policers)
IOS支持两种流量策略:
1. 传统的Cisco流量策略:CAR承诺接入速率,使用命令
Router(config-if)#rate-limit {input | output} CIR (bps)
Bc(burst-normal) Be(burst-max) conform-action action exceed-action action
2. 新型的Cisco流量策略:基于类的策略(Class-based policer),使用模
块化Qos CLI(MQC)语法。可以使用MQC命令建立流量策略并把策略应用到接口。
一个流量策略包括一个流量类(traffic class)和一个或多个Qos特性。Policy
命令用来执行流量策略特性,它指定了一个流量类所需要的最大速率,超过这个速
率Qos系统会立刻执行一个操作,标准的操作是丢弃或重置包头的DSCP字段。Policy
命令的语法是:
police cir
理解Bc和Be
对于超额的数据包,流量策略并不会把它们缓存稍候转发,只有×××器(shaper)
会这样做。流量策略只执行一个发送或不发送的策略。因为不能缓存数据包,所以
在发生拥塞时,所能做的最好的方法就是通过配置适当的超额突发数据量Be来不那
么过分的丢弃数据包。这一点对理解流量策略使用Bc和Be来保证达到CIR是非常
重要的。
超额参数模仿路由器的通用缓存规则。The rule recommends configuring buffering
equal to the round-trip time bitrate to accommodate the outstanding TCP
windows of all connections in times of congestion.
突发参数 目的 推荐公式
普通突发 · 执行标准的令牌桶 · 设置最大数量的令牌(尽管如
果Be>Bc的话可以借到令牌). · 决定令牌桶有多大,因为如果桶已经满了那么令
牌将被丢弃而不会再加入到桶中。 CIR [bps] * (1 byte)/(8 bits) * 1.5
seconds Note: 1.5 seconds is the typical round trip time.
超额突发 · 为令牌桶提供超额突发能力 · 如果Bc = Be那么不
支持超额突发 · 当Bc = Be,流量调节器就不能借令牌,当令牌不够时只能丢弃数
据包 两倍的Bc
对TCP流量的测试表明,Bc 和Be的数值应该近似等于配置的平均速率在两秒钟内
的流量。如果你想限制流量在1Mb,应该把Bc 设置在1-2Mb,Be在2-4Mb。
举个例子,如果我们想把输出速率限制在1.5Mbps,我们可以做一下步骤:
1. 把承诺速率从比特转换成字节,因为突发数据量的单位为字节。
1500000 bits / 8 bits = 187500 bytes
2. 使用标准的1.5秒往返时间(round-trip time)计算Bc
187500 bytes * 1.5秒 = 281250 bytes
3. 两倍的Bc为Be
281250 bytes * 2 = 562500 bytes
使用命令
rate-limit input 1500000 281250 562500 conform-action {action}
exceed-action {action}
超额突发数据量
当数据包到达时可用的令牌数目小于包的大小,就可以使用超额突发数据量。包会
请求借用令牌。可以通过配置大于Bc的Be的数值来为令牌桶提供超额突发能力。
可以通过下面两个例子来理解Be。
第一个例子说明怎样配置CAR策略来允许所有的IP流量。管理员在T3线路上提供
了便宜的20Mbps的子速率服务。用户只花费子速率带宽的金额,也可以按需要增加
带宽。CAR限制了用户可用的流量速率,用户只能使用规定的速率加上承诺的突发
数据量。可以适当的设置Be=32000。
interface hssi 0/0/0
rate-limit output 20000000 24000 32000 conform-action transmit
exceed-action drop
下一个例子,用户只能发送24000字节的突发数据量,所有超过限制的数据包都要
被丢弃,因为设置Bc=Be,数据包流不能通过超额突发能力来借用令牌。
interface Hssi0/0/0
rate-limit output 20000000 24000 24000 conform-action transmit
exceed-action drop
正确设置突发数据量的重要性
策略以字节为单位指定了突发数据量,基于类的策略(class-based policer)支持
最小的突发数据量为1000字节,包括第二层包头。
突发数据量的目的是逐渐的丢弃数据包,就像RED那样,并且避免尾丢弃。设置足
够高的突发数据量对保证良好的吞吐量是非常重要的。
设置突发数据量时,考虑一下内容:
1. 如果突发数据量设置的过低,数据到达的速率将远远低于配置的速率。
2. 惩罚暂时突发对TCP流的吞吐量来说是相当不利的,具体情况请察看RFC
2001 and Random Early Detection (RED) gateways for Congestion Avoidance。
设置突发数据量来允许路由器容纳暂时突发。
3. 对离开接口的数据包的处理基于包的大小和桶中剩余的令牌数。
4. 在基于类的策略中,流量测量器不论接口是否拥塞都是激活的。每个包都
会经过令牌桶测量系统来决定是否符合配置的参数。
5. 如果数据突发量非常大而且非常突然,那么配置较高的超额突发数据量可
以保证超额令牌桶中存放较多的令牌。而且可以调整接口的MTU等于或大于突发数
据量大小。
允许的突发数据量数值
最初,包括IOS12.0,rate-limit命令支持承诺和超额的突发数据量的范围是:
Router1(config-if)#rate-limit input 18000000 ?
<8000-2000000> Normal burst bytes
Router1(config-if)#rate-limit input 18000000 2000000 ?
<8000-8000000> Maximum burst bytes
Router1(config-if)#rate-limit input 18000000 2000000
IOS12.1增加了突发数据量的最大值:
7500-107(config)#interface atm 1/0/0
7500-107(config-if)#rate-limit output ?
<8000-2000000000> Bits per second
access-group Match access list
qos-group Match qos-group ID
7500-107(config-if)#rate-limit output 18000000 ?
<1000-512000000> Normal burst bytes
7500-107(config-if)#rate-limit output 18000000 2250000 ?
<2000-1024000000> Maximum burst bytes
step-by-step流量策略指南
在12.0(5)XE流量策略特性模块中提供了数据包如何进入一个配置了策略的接口的
step-by-step的总结。总结需要理解堆积债务和复合债务。对于债务的概念,请察
看IOS配置指南Policing and Shaping Overview。
下面这个例子中,离开接口F0/0的流量平均速率被设置为1bps,Bc 为2btyes,Be
为4bytes。
7200-uut(config)# class-map larry
7200-uut(config-cmap)# match access-group 2
7200-uut(config-cmap)# exit
7200-uut(config)# policy-map bird
7200-uut(config-pmap)# class larry
7200-uut(config-pmap-c)# police 1 2 4 conform-action transmit exceed-action
set-qos-transmit 4
7200-uut(config-pmap-c)# exit
7200-uut(config-pmap)# exit
7200-uut(config)# interface fastethernet 0/0
7200-uut(config-if)# service-policy input bird
这个例子中所有的进入数据包都要制定的匹配标准相符合,并且在一个时间单位T
内只有一个数据单元进入令牌桶。
1. 配置了Bc=2bytes,令牌桶中有两个令牌,一个令牌等于1bytes。
2. 配置了1bps的平均速率,每个1byte的包需要一个令牌来获得承诺操作
(conform action)
3. 传输第一个包需要一个令牌,因为桶中能够提供传输第一个包所需的令牌
数,所以第一个包符合限制条件,被传输。桶中还剩下一个令牌。
4. 第二个包需要剩下的一个令牌,桶中也能够提供传输第二个包所需的令牌
数,所以第二个包也被传输。这时桶中就没有剩余的令牌。
5. 第三个包还需要令牌,但是桶中已经没有令牌了,超额突发被激活。
超额突发能力分析两个数字:超额突发的大小和复合债务(compound debt)。超额
突发大小通过CLI指定(本例中是4),复合债务等于上一次包被丢弃以来所有实
际债务的和。
实际债务等于当前流所借的令牌数。实际债务的值可以由当前从桶中取出的令牌数
(本例中借了一个令牌)乘以令牌被取出的次数(本例中是一次),这样,传输完
第三个包之后的实际债务就是1。
这个例子中复合债务与实际债务相等都是1,注意上一个包的复合债务加上当前包
的实际债务也等于当前复合债务。
因为复合债务是1,小于超额突发数据量的4,所以第三个包也被传输。
6. 第四个包还需要令牌。
超额突发能力仍然在激活状态。第四个包需要借用一个令牌,这是第二次借用令牌,
因此实际债务变成2。复合债务等于传输上一个包的复合债务加上当前的实际债务,
所以当前的复合债务是3(1+2)。3仍然小于配置的超额突发数据量4,所以数据
包4也被承诺传输。
7. 第五个包也需要令牌。
超额突发能力仍然在激活状态。实际债务是3,复合债务是6(3+3),超过了超额
突发数据量,所以第五个包被超额操作(exceed-action)指定了Qos 组4。超额操
作发生之后复合债务归零,而实际债务不受丢包影响,仍然是2。
8. 第六个包也需要令牌。
超额突发能力仍然在激活状态。当然实际债务是3,注意在计算一共从桶中借了多
少次令牌的时候要加上上次为包3和4所借的令牌。复合债务是3(0+3),小于超
额突发,所以第六个包被承诺传输。
9. 第七个包也需要令牌。
超额突发能力仍然在激活状态。实际债务是4,复合债务是7(3+4),超过了超额
突发,所以第六个包执行超额操作。超额操作发生之后复合债务归零,而实际债务
不受丢包影响,仍然是3。
·
数据包顺序 使用的令牌数 剩余令牌 实际债务 复合债务 对包的操作及Before Packet 1 X 2 0 0
Packet 1 1 1 0 0 Transmit. No actual or
compound debt.
Packet 2 1 0 0 0 Transmit. No actual or
compound debt.
Packet 3 1 0 1 1 Transmit. Tokens are
borrowed and counted against actual and compound debt, but the compound debt
is still less than the excess burst size
Packet 4 1 0 2 3 Transmit. Tokens are
borrowed and counted against actual and compound debt, but the compound debt
is still less than the excess burst size.
Packet 5 1 0 3 6 Assign a QoS transmit value
of 4. Because the compound debt exceeds the excess burst size, the exceed
action is taken.
Packet 6 1 0 3 3 Transmit. After packet 5 is
dropped, the compound debt resets to 0. However, the actual debt of 2 remains.
Therefore, the new compound debt of 3 is lower than the excess burst size,
so the packet conforms.
Packet 7 1 0 4 7 Assign a QoS transmit value
of 4. Because the compound debt exceeds the excess burst size, the exceed
action is taken.
转自: [url]http://www.cnblogs.com/cunshen/articles/164568.html#Post[/url]