session 1 限速技术的两种类型
一、管制policing(限速)和整形shaping
在限速技术中,管制和整形是两种方案。与队列技术不同,这两种技术是分开的不是相辅相成的,没有关系的两种解决方案,两种策略而已,并且根据不同的情况只能有一种策略被执行,所以这两种技术也被分开叫管制和整形,不像拥塞管理和拥塞避免都统称为队列技术。限速这个说法是在早期的cisco中的叫法,当时的限速只能基于接口来做,而不能基于类CB来做,所以叫做限速,IOS12.2以后的版本可以基于类来做了,已经不叫限速了,而是分成两个技术了,但是作用都是用来限制入站流量的速率的。
整形:对于出站流量,来源于更好的让对方接受(来源娱乐圈整容,更好的让大众接受)将不重要的数据包进行buff缓存(突发流量),会导致数据包延迟。当数据包超过buffBuff存储入战流量,当buff满了:也一样执行丢弃操作。
使用范围:
1、管制,主要是用于isp和企业网的边界处,isp对于进入的流量进行QOS重新标记和速率限制,支持双向。
2、整形,主要是针对于企业site之间,用于星星网络结构中中心site与多分支site速率不匹配的时候进行流量整形使site之间的速率一致。只支持output方向。
管制是重在管理流量的速度和标记,而整形是重在通过放慢传输数据量达到两端传输速率一致
二、管制即流量限速技术,它使用令牌桶的概念来对于双向流量都可以起到限速作用,令牌桶的大小就是接口的buff缓存容量(可以修改),在流量管制policing中对流量所采用的动作根据令牌桶的数量不同而不同,在policing中最多可以分配出两个令牌桶,第一个令牌桶叫做BC用于承载超出定义速率的突发流量,第二个令牌桶叫BE用于承载超出BC桶的流量。
管制policing中的参数
BC:burst size 突发流量的大小
BE:exceed burst超出的流量
TC:time interval 时间间隔,1/8s,因为BC单位是bit而CIR单位是Byte,所以为了转换TC被设置1/8s
CIR:承诺速率,计算公式:BC/TC。指流量每秒的速率。BC=CIR*TC=CIR/8,cir=800,则bc应=1000
PIC: 最大速率
violate:违规的流量,be桶也容不下的流量
1、在policing中对流量有两种作用:
1.1、可以重新标记数据包的ipp或dscp值
1.2、对数据包进行丢弃处理,针对流量的速率进行限制,超出的流量进行丢弃PHB的动作
三、policing和shaping都是用到了接口的buff(令牌桶大小)来存储超出速率的数据流量,当buff被填满后根据指定的策略和令牌桶的数量进行动作,处理动作分为单令牌桶和双令牌桶,具体和配置有关:
1、对流量限制只配置了单令牌桶:数据量超过了令牌桶的大小。数据太大而不能进入buff的数据包会被drop
2、对流量限制只配置了双令牌通,数据量超过了第一个bc桶的大小时可以执行两种动作:
1)和单令牌桶一样drop
2)或者将超出第一个bc桶的流量放入第二个be桶,期间也可以修改数据包的ipp和dscp以及执行PHB,超出be桶的流量将被drop(对违规的流量只有drop选项并且不能修改)
管制中令牌桶的色是指对于超出设定速率的数据的动作,分别是符合条件的数据包conform、超出限额的数据包exceed、违反最大限额的数据包violate。
session 2 管制policing的配置
单令牌桶的双色配置:
R1(config)#class-map match-all http
R1(config-cmap)#match protocol http
R1(config-cmap)#exit
R1(config)#policy-map policing
R1(config-pmap)#class http
R1(config-pmap-c)#police cir 16000 bc 3000 conform-action transmit exceed-action transmit
使用管制设置入站http流量的速录为16000bit(2KB),用于突发流量的bc桶体积3KB,动作为没有超出bc桶大小的流量transmit(转发),超出bc桶大小的流量也transmit传输
R1(config-pmap-c)#exit
R1(config-pmap)#class class-default
R1(config-pmap-c)#police cir 8000 bc 1500 conform-action transmit exceed-action drop
使用管制设置入站其余流量的速录为8000bit(1KB),用于突发流量的bc桶体积1.5KB,动作为没有超出bc桶大小的流量transmit(转发),超出bc桶大小的流量drop丢弃
R1(config-pmap-c)#exit
R1(config)#interface f0/0
R1(config-if)#service-policy input policing 本次用在入站方向
双令牌桶的三色配置:
R1(config-pmap-c)#police cir 8000 bc 1500 be 1500 conform-action transmit exceed-action transmit violate-action drop
使用管制设置入站http流量的速录为8000bit(1KB)/s,用于突发流量的bc桶体积1.5KB,最大允许突发速率为16000bit/s,用于承载溢出bc桶流量的be桶的大小为1500Byte,
动作为允许bc桶中的流量转发,超出bc桶大小的流量进入be桶允许transmit传输,超出be桶的违规流量将被drop
双令牌桶的三色配置+最大速率限制:
R1(config-pmap-c)#police cir 8000 bc 1500 pir 16000 be 1500 conform-action set-prec-transmit 3 exceed-action transmit violate-action drop
使用管制设置入站http流量的速录为8000bit(1KB)/s,用于突发流量的bc桶体积1.5KB,最大允许突发速率为16000bit/s,用于承载溢出bc桶流量的be桶的大小为1500Byte,动作为bc桶中的流量(也就是合法的能被转发出去的流量)将被重新标记其ipp为3并且转发,超出bc桶大小的流量进入be桶也transmit传输,超出be桶的违规流量将被drop
单令牌桶的数据包数量限制:
R1(config-pmap-c)#police rate 50 pps burst 30 packets conform-action transmit exceed-action drop
使用rate限制数据包数量,转发速率限制为50个包/s,允许突发流量bc为30个包,动作没有超出bc桶的流量转发,超出bc的流量被drop
双令牌桶的数据包数量限制:
R2(config-pmap-c)#police rate 10 pps burst 5 packets peak-rate 15 pps peak-burst 5 packets conform-action set-prec-transmit 3 exceed-action transmit violate-action drop
使用rate限制数据包数量,转发速率限制为10个包/s,允许突发流量bc为5个包,最大允许突发速率15个包/s,允许be桶的数据包为5个,动作没有超出bc桶的流量进入be桶转发,超出be桶的流量被drop
session 3 整形 shaping
整形与管制一样都是将超出速率的数据包放入buff内,但是整形相比管制要宽松许多,尽量的不丢包而是延迟转发,主要用于两端速率不匹配,又不能丢弃数据包时使用,将流量缓存至buff中,等待单位时间内链路空闲然后在转发buff内的数据包,从而降低丢包的几率,但是这样也会增加延迟,只适合做一些文件传输、下载等 ,而不适合语音和视频等对延迟敏感的流量。
shape整形的配置:
R1(config)#class-map match-all http
R1(config-cmap)#match protocol icmp
R1(config-cmap)#exit
R1(config)#policy-map shpe
R1(config-pmap-c)#bandwidth 256 给http流量分配256k带宽
R1(config-pmap-c)#shape average 40000 限制流量(整形为)平均速率CIR为40000bit/s=5KB/s
R1(config-pmap-c)#exit
R1(config)#interface f0/0
R1(config-if)#service-policy output shape 使用在接口出站ouput方向
补充参数:
R1(config-pmap-c)#shape peak 80000 限制流量(整形为)最大速率CIR为80000bit/s=10KB/s
R1(config-pmap-c)#shape average 40000 8000 8000
限制流量(整形为)平均速率CIR为40000bit/s=5KB/s,bc桶大小为8000bit,be桶大小为8000bit,官方建议bc和be使用默认值8000不建议修改!在ios中打?可以看到提示。
实验:使用policing管制来控制icmp流量,拓扑为R1连接R2,都是f0/0接口,在R1的f0/0接口out方向做policing,来管制R1去往R2的icmp流量,配置如下:
R1#show policy-map
Policy Map policing
Class icmp
Bandwidth 16 (kbps) Max Threshold 64 (packets) 给icmp分配了2KByte的带宽
police cir 8000 bc 1000 使用policing控制icmp流量速率为1Kbyte/s,允许突发流量为1000
conform-action set-prec-transmit 6 动作:超过bc容量的icmp流量被drop没有超过cir速率(bc容量)的转发并且重标记icmp的ipp为6,
exceed-action drop
超过bc容量的icmp流量被drop
Class class-default
Bandwidth 8 (kbps) Max Threshold 64 (packets)
Traffic Shaping
Average Rate Traffic Shaping 其余是所有流量我使用了shape整形
CIR 8000 (bps) Max. Buffers Limit 1000 (Packets) 速率限制为1Kbyte/s,缓存1000个数据包
然后在接口f0/0的out方向上使用policy-map策略,然后分别用普通ping和1000byte的icmp去pingR2的环回接口2.2.2.2,在R1与R2之间抓包查看数据包是否能转发,能转发的icmp的ipp是多少
结果如下:
1、普通ping
R1#ping 2.2.2.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 2.2.2.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 16/18/20 ms
可以ping通,没有超过cir速率,并且icmp数据包的ipp被标记位6
2、使用大byte包ping
R1#ping
Protocol [ip]:
Target IP address: 2.2.2.2
Repeat count [5]:
Datagram size [100]: 1000
Timeout in seconds [2]:
Extended commands [n]:
Sweep range of sizes [n]:
Type escape sequence to abort.
Sending 5, 1000-byte ICMP Echos to 2.2.2.2, timeout is 2 seconds:
.....
Success rate is 0 percent (0/5)
可以看到ping了5个1000byte的数据包已经超过了policing的cir速率了,被丢弃了。
R1#show policy-map interface f0/0
FastEthernet0/0
Service-policy output: policing
Class-map: icmp (match-all)
5 packets, 5070 bytes
5 minute offered rate 0 bps, drop rate 0 bps
Match: protocol icmp
Queueing
Output Queue: Conversation 265
Bandwidth 16 (kbps)Max Threshold 64 (packets)
(pkts matched/bytes matched) 0/0
(depth/total drops/no-buffer drops) 0/0/0
police:
cir 8000 bps, bc 1000 bytes
conformed 0 packets, 0 bytes; actions:
set-prec-transmit 6
exceeded 5 packets, 5070 bytes; actions: 这里看到超出bc桶容量的5个icmp包的直接被drop了
drop 在没有设置be桶的时候exceeded就对应的超出bc桶时候的执行策略drop
conformed 0 bps, exceed 0 bps
Class-map: class-default (match-any)
7 packets, 714 bytes
5 minute offered rate 0 bps, drop rate 0 bps
Match: any
Queueing
Output Queue: Conversation 266
Bandwidth 8 (kbps)Max Threshold 64 (packets)
(pkts matched/bytes matched) 0/0
(depth/total drops/no-buffer drops) 0/0/0
Traffic Shaping
Target/Average Byte Sustain Excess Interval Increment
Rate Limit bits/int bits/int (ms) (bytes)
8000/8000 2000 8000 8000 1000 1000
Adapt Queue Packets Bytes Packets Bytes Shaping
Active Depth Delayed Delayed Active
- 0 7 714 0 0 no
抓包中看不到任何数据包,因为在R1的f0/0接口就被丢弃了,所以没有办法抓取到了。
session 4 在交换机上做QOS
在交换机上也可以做三层的QOS,前提是三层交换机(可以关闭三层功能no ip routing)
前提是要开启mls qos
xkyxbg2-3(config)#mls qos 开启QOS功能
xkyxbg2-3(config-ext-nacl)#permit ip host 172.17.17.243 any
xkyxbg2-3(config-ext-nacl)#exit
xkyxbg2-3(config)#class-map match-all x
xkyxbg2-3(config-cmap)#match access-group name net243
xkyxbg2-3(config-cmap)#exit
xkyxbg2-3(config)#policy-map x
xkyxbg2-3(config-pmap)#class x 对匹配class为x的流量限制
xkyxbg2-3(config-pmap-c)#police 16000 16000 exceed-action drop 限制进入流量2K,突发2K,超出丢弃
xkyxbg2-3(config-pmap)#class class-default 其余流量不限制
xkyxbg2-3(config-pmap)#exit
xkyxbg2-3(config)#interface f0/2
xkyxbg2-3(config-if)#service-policy input x
xkyxbg2-3(config-if)#exit