QOS(Quality Of Server)(在拥塞时才用) 针对与出去的包
语音进程的端口号:16384-32767之间的偶数 奇数的是控制端口,偶数的是数据端口 一定要记住
access-list 100 permit ip any any precedence 5 按优先级抓包
·交换进程:负责对到达路由器接口的数据流进行处理,将数据流发送到出站接口的缓存中,这种交换进程随协议而异。
·FIFO(First In First Out) 排队是一种经典的分组传输算法。
分组的传输顺序与接收顺序相同。现今仍是大部分接口的默认设置。(大于2M的基本都是)
默认2M以下都是WFQ
·确定数据流的优先顺序。对延迟敏感的流量赋予高的优先级。
如果WAN链路不发生拥塞,没有必要划分数据流的优先顺序。
如果WAN链路经常发生拥塞,划分数据流的优先顺序可能解决不了问题,更合适的解决方案是增加带宽。
·制定排队策略:
1.为所有用户提供合适的服务级别
2.节省昂贵的WAN费用
·RTP(Real-Time Protocol):实时传输协议
RTP传输多媒体应用的数据流,包括IP语音和视频(对延迟比较敏感的)
SSH(Secure Shell):安全远程登陆,类似telnet
SSH是一种安全应用,用于登录远程设备,并在远程设备上执行命令,将远程文件下载到本地,默认使用22端口。
FTP(File Transport Protocol):
FTP用于在设备之间传输文件,默认使用21(控制)端口,20(数据)端口。
排队技术:
1,
分类classification
2,
加队 相应数据加到队列中
3, 调度
DSCP--区分服务代码点
MQC--模块化的QOS命令行
分类 标记 限速(shaping&policy) 拥塞避免 Queuing
ACL GTS CAR RED FIFQ
PBR PBR FRTS CBpolicing WRED PQ
NBAR CBshaping FB-WRED CQ
CBMARKING(MQC) CB-WRED WFQ
LLQ
CBWFQ
CBLLQ
分类的方法:
PBR做了分类和设置优先级的工作。
MQC(Modular QoS CLI(command line interface)):
1、定义ACL
R1(config)#access-list 100 permit tcp 10.1.1.0 0.0.0.255 any eq 23
2、定义类别映射表
R1(config)#class-map [match-any|match-all] WOLF
R1(config-cmap)#match access-group 100
3、定义策略映射表
R1(config)#policy-map XWX
R1(config-pmap)#class WOLF
R1(config-pmap-c)#set cos 5
4、调用
R1(config)#int s0
R1(config-if)#service-policy input XWX
#show policy-map
#show class-map
#show policy-map interface
if)#service-policy input/output
class class-default
NBAR
match protocol时,就是用NBAR
1、定义类别映射表
R1(config)#class-map [match-any|match-all] WOLF
R1(config-cmap)#match protocol tcp 区别就在这里
2、定义策略映射表
R1(config)#policy-map XWX
R1(config-pmap)#class WOLF
R1(config-pmap-c)#set cos 5
3、调用
R1(config)#int s0
R1(config-if)#service-policy input XWX
R1(config)#ip nbar port-map http tcp 80 8080 指定http协议对应的端口,不仅仅是默认的,还可以扩展
4、PDLM(packet description language module) 一种扩展的技术
R1(config)#ip nbar pdlm bt.pdlm -------灌入抓BT的PDLM。装入之后就可以在class map中调用了
R1(config)#class-map WOLF
R1(config-cmap)#match protocol pdlm bt
class-map HTTP
match protocol http url xxx.jpg|gif 还可以抓网页上的图片
5、注意事项
使用NBAR,必须先启用CEF特性
config)#ip cef
使用NBAR,接口模式下必须打开 (match 字段中有protocol时就表示使用了NBAR)
ip nbar protocol-discovery 必须在接口下开启这一命令
service-policy input|output (policy-map名称)
PQ:
共有四个优先级,默认的流量都是normal
优先级分类:1high 2medium 3normal 4low 不定义就是3
加队:在每一个队列中还是按照fifo的原则加队
调度:只要高优先级有流量就发高优先级的,只到高优先级的数据发完再发低优先级的数据,这样就有可能造成低优先级的数据无带宽可用。
实验:telnet设为high icmp设为normal
R1(Config)# priority-list 1 protocol ip high tcp telnet 将telnet流量的优先级置为high
R1(Config)# priority-list 1 protocol ip normal list 100 调用访问列表将icmp的优先级置为normal
Access-list 100 permit icmp any any
R1(Config-if)#priority-group 1 接口下调用
Show int e0 看每一个队列有多少个座位,也就是能容纳多少个包
Show queueing (看所有队列)
Debug priority
Ping
telnet
priority-list 1 queue-limit 22 44 66 88 定义每一个队列的座位数,队列1为22个,队列4为88个
priority-list 1 interface s0 [high|medium|normal|low] 按接口来进行分类,也就是说把一个接口来的数据都放进一个队列,太过粗略
priority-list 1 default [high|medium|normal|low] 设置默认
CQ (建立在PQ的基础上)
分类:1~16队列 0级为最优 共17个队列 0级和其它级的关系相当于PQ
加队:默认1500个字节
调度:轮循,第一个传完就传第二个
先有1000个字节,再来1000,还是会传
队列号
R1(Config)# queue-list 1 protocol ip 0 tcp telnet 将telnet流量置为队列0
R1(Config)# queue-list 1 protocol ip 1 list 100
Acc-list 100 permit icmp any any
CQ与PQ不能同时
R1(Config)# queue-list 1 queue 0 byte-count 800
R1(Config)# queue-list 1 queue 1 limit 50 byte-count 1600 设置本队列每次可传的字节数
R1(Config-if)#custom-queue-list 1 接口下调用
show queueing custom
Debug custom-queue
show interface e0/0
扩大超级优先级的范围 :config :queue-list 1 lowest-custom 0 不推荐打0 一般打2 这样的话队列0和队列1同其它队列就相当于是PQ的关系
WFQ(Weighted Fair Queuing) (基于流的)
分类标准:按流来分,而不是按类来分
2层 源和目标的mac地址
3层 源和目标的ip地址,还有协议类型
4层 源和目标的端口号
·WFQ算法将数据流划分成流,这是根据分组报头中的地址实现的。
源/目标网络地址(MAC地址)(套接字)(DLCI)
加队:总共只有256个队列,共享缓存,统一调度座位
HQO:hold-Queue out limit 缓存中容纳包的上限
如果缓存中的数据包超过HQO值,又来了一个包,则采取以下措施:
1、如果这个包属于最长队列,则被drop
2、如果这个包不属于最长队列,则去掉最长队列中的一个包,再将这个包加入其所属队列
CDT:congestive discard threshold 缓存中容纳包的下限
当缓存中的数据包小于这个值时,不采取任何限制措施
当缓存中的数据包大于这个值时,采用以下方法来进行限制:
1、如果这个包属于最长队列,则被drop
2、如果这个包不属于最长队列,则直接将这个包加入
调度:
·基于流的WFQ在传输数据之前,将各个会话的分组放到公平队列中。
WFQ给每个流指定一个权重,权重决定了队列中分组的传输顺序。权重是根据公式得到的,FT和SN算法
这里首先传输权重小的分组。小容量的权重较小。
小容量流量发送后,各大容量共享余下的链路带宽。
对于有优先级的包的处理:virtual packet size=real packet/(ip precedence+1)实际上等于减小了权重
虚拟包大小=实际包大小/(ip优先级+1)
·WFQ可确保每个数据报都能占用适当的带宽。
大小相同的文件传输将获得相同的带宽,而不是先到的文件占用大量带宽。
·WFQ给每个会话分配一个队列,队列优先级分7种。
R2(config-if)#fair-queue (接口启用WFQ) (s口默认是开启的,E口默认是FIFO)
R2#show interfaces ethernet 0/0
....Queueing strategy: weighted fair
·速率不超过E1(2.048Mbps)的Serial口默认使用WFQ。
在使用X.25或压缩PPP的Serial,WFQ被禁用。
E3/T3 (34M/45M)的WAN接口和Serial不支持WFQ。
R2(config-if)#fair-queue 128
队列中的分组超过128个后,新分组将不会被加入到队列中,
直到队列中的分组数小于32(128/4)为止。
修改默认的队列数:
R2(config-if)#fair-queue 256 512 6 注意最后这一参数表示为RSVP预留的队列数
CDT 队列数
R2(config-if)#hold-queue 2000 out 修改允许的座位数,默认最大是1000
show queueing interface
Show queueing random-detect
WRED(专门解决伪丢弃出现的滑窗问题)
有七个优先级
Config-if :random-detect frecedence 0 18 33(包的个数)
CBWFQ(Class-Based Weighted Fair Queuing)
·CBWFQ拓展了标准WFQ的功能,支持用户定义的数据流类别。
可以根据多种条件来定义数据流类别。(协议/ACL/输入接口)
CBWFQ最多只有64个类别
·CBWFQ给每个类别(而不是流)指定权重,它与分配给类别的带宽呈反比。
·默认情况下,分配给所有类别的带宽总和不能超过接口可用带宽的75%。
余下的25%用于传输控制数据流和路由选择数据流。
举例一:
Voip 512Kbps
Http 128K
Other ......
R1(config)#class-map voip
R1(config-)#match ip rtp 16384 16383
(或另一方法 match access-group 100 access-list 100 permit udp any any range 16384 32767)
R1(config)#access-list 111 permit tcp any any eq www
R1(config)#class-map http
R1(config-)#match access-group 111
policy-map CBWFQ
class voip
bandwidth percent 50 percent参数代表带宽的百分比,remaining参数代表可用带宽的百分比
policy-map CBWFQ
class http
bandwidth percent 30
policy-map CBWFQ
class class-default 设置其它流量占用20%带宽
bandwidth percent 20
max-reserved-bandwidth 100 这个值默认是75%,如果你想用到100%,必须打上这一命令
service-policy output CBWFQ 调用
还可以在最后一个队列中单独使用WFQ,用了后,就不能指定带宽了、
policy-map CBWFQ
class class-default
fail-queue
举例二:
1)198.1.1.0/24 20%
2)voice 50%
3) other 30%
分类
Config:Access-list 100 permit ip any 198.1.1.0 0.0.0.255
Config:class-map A match access-group 100
Class-map B
Match precedence critical (语音流量) (默认时matck all 要匹配所有才可以 match any就匹配一个就行了)
分流量:
Config:Policy-map CBWFQ
Class A
Bandwidth percent 20
Class B
Bandwidth percent 50
Class class-default 30
Int e 0
Service-policy output CBWFQ
默认CBWFQ与WFQ用预留值的75%,改为100%为:
Config-if :Service-plicy output CBWFQ
Show policy-map int e 0
<CBWFQ实验>
·需求:普通199.0.0.0/24 ->20%
Voice (Critial)->50%
Other ->30%
1)定义普通用户的流量:
access-list 1 permit 199.1.1.0 0.0.0.255
2)将前2种流量放入Class-map:
class-map match-all VOICE
match ip precedence 5 将优先级为5的包找出来
class-map match-all NORMAL
match access-group 1
3)为3种流量设定百分比:
policy-map CBWFQ
class NORMAL
bandwidth percent 20
class VOICE
bandwidth percent 50
class class-default
bandwidth percent 30
4)在接口调用:
interface Serial0/0
max-reserved-bandwidth 100
(因为默认是只能使用总带宽的75%,如果想用所有带宽,必须使用这一命令,对所有带宽进行划分)
service-policy output CBWFQ
默认情况下,带宽的25%用于网络控制流量,只有75%用于数据的传输
R2#show class-map
R2#show policy-map
R2#show policy-map interface
LLQ(Low Latency Queuing)在WFQ的基础上增加了一个优先队列
·低延迟队列:LLQ将绝对优先队列技术应用于CBWFQ,从而缓和了语音会话的抖动。绝对优先队列处理对延迟敏感的数据(如语音)。
使用这种特性后,将首先发送对延迟敏感的数据,这种数据发送完毕后才发送其他队列中的分组。
·虽然可以将各种实时数据流加入到Priority队列中,但Cisco建议只将语音流加入到这种队列中。
class VOICE
priority percent 50
首先要保证启用WFQ,为语音流量分配50K的带宽
R1(config-if) :fair-queue
R1(config-if) :ip rtp priority 16384 16383 50最后这个参数是分配的带宽值
例一:
policy-map WAN-EDGE
class VOICE
priority percent 33 设定语音流量占用33%的带宽
class CALL-SIGNALING
bandwidth percent 2
class MISSION
bandwidth percent 20
class class-default
fair-queue 对其它的流量应用WFQ
例二:
policy-map WAN-EDGE
class VOICE
priority 540 指定语音流量占用540K带宽
class VIDEO
priority 460 指定视频流量占用460K带宽
class CALL-SIGNALING
bandwidth percent 2
class MISSION
bandwidth percent 20
class class-default
fair-queue
例三:
policy-map WAN-EDGE
class VOICE
priority percent 33
class NISSION
bandwidth remaining percent 50 剩余百分比语句,划分去掉优先级队列所占带宽之后的带宽
class class-default
bandwidth remaining percent 50
max-reserved-bandwidth 100 接口下用,让你能对所有带宽按100%的比例进行划分
可用带宽=实际带宽*0.75
其它队列的可用带宽=实际带宽*0.75-分配给语
音的带宽
<CBWFQ/WFQ的对比>
与基于流的WFQ相比,CBWFQ具有以下优点:
·带宽分配:CBWFQ能够给每个类别分配带宽,最多可以定义64个类别
WFQ只能根据7种IP优先级来对数据流进行分类。
·粒度更细、可扩展性更高:CBWFQ可根据多种条件来定义类别。
<CBWFQ & Tail Drops>
·当网络数据流长期拥塞时,使用CBWFQ或其他排队方法将被迫丢弃一些分组。传统的策略是尾丢弃。
尾丢弃是排队技术默认的拥塞应对策略。
·尾丢弃导致整体同步,传输速度的波动导致对链路的使用的极其不充分。
WRED(Weighted Random Early Detection)只能对TCP起效,对UDP不起效
·默认设置尾丢弃是一种被动的队列管理机制。
主动队列管理机制在拥塞发生前就丢弃分组。
·基本思想:确保队列长度位于最小阈值和最大阈值之间,对于不同类别的数据流采用不同丢弃策略。
丢弃概率:1/10
R2(config-if)#random-detect 启用开关,启用之后,才能在后面打?号进行命令查询
random-detect precedence 6 45 50 5 优先级为6的包在队列填充到45和50之间时开始丢弃
5表示按1/5的概率丢弃
random-detect dscp-based
show queueing random-detect
random-detect exponential-weighting-constant N 默认是9
N值越大,WRED就越不敏感,最后导致失效,N值越小,会导致包被丢掉的概率越大
注意:启用WRED后只能使用FIFQ
FB-WRED 基于流的WRED,对非TCP流量起效,对TCP不起效,可以和WRED合用
使用流来分类,最多可分256个流
int s0/0
random-detect flow 开启开关
random-detect flow count 256 设定可分的流的数目
show queueing random-detect
CBWRED即可对TCP,也可对非TCP流量,必须结合CBWFQ来做
class-map GOLD
match ip precedence 3 4
class-map SILVER
match ip precedence 1 2
policy-map POLICY1
class GOLD
bandwidth percent 30
random-detect
random-detect precedence 3 20 40 10
random-detect precedence 4 30 40 10
class SILVER
bandwidth percent 20
random-detect
random-detect precedence 1 15 35 10
random-detect precedence 2 20 35 10
class class-default
fair-queue
random-detect
以上的例子是基于优先级来做的,如果基于DSCP,开启的命令是不一样的
policy-map POLICY1
class GOLD
bandwidth percent 30
random-detect dscp-based
random-detect precedence 31 20 40 10
random-detect precedence 41 30 40 10
class SILVER
bandwidth percent 20
random-detect dscp-based
random-detect precedence 11 15 35 10
random-detect precedence 21 20 35 10
class class-default
rair-queue
random-detect dscp-based
整型
Shaping mechanisms:
Generic traffic shaping (GTS)通用流量整型
Frame Relay traffic shaping (FRTS)帧中继流量整型 这个通常要考
Class-based shaping
Policing mechanisms:
Committed access rate (CAR)
Class-based policing
令牌桶:
TC:time comminted 默认125毫秒
BC:burst committed 单位bit
Be:burst excess Be是从Bc溢出来的令牌
CIR:commited infromation rate。单位Kbps
TC=BC/CIR
每Tc秒向桶中放入Bc这么多的令牌
CIR承诺信息速率,也就是你实际想要控制的速率
GTS Building Blocks通用流量整型
GTS Overview
GTS is multiprotocol.
GTS uses WFQ for the shaping queue.默认是WFQ,也只能用WFQ来做shaping queue
GTS can be implemented in combination with any queuing mechanisms:可以配合以下的软件Q使用
FIFO queuing
Priority queuing (PQ)
Custom queuing (CQ)
Weighted fair queuing (WFQ)
GTS works on output only. 只能工作在出方向
if)#traffic-shape rate 64000 8000 8000 1000 ---------- 启用GTS,设置CIR为64000。
CIR Bc Be buffer
关键是CIR的值,其它会自动计算,可以不指定
#show traffic-shap serial 0
GTS Implementation
configuration GTS
#traffic-shape group access-list bit-rate [burst [excess-burst]]
Traffic-shape group shapes outbound traffic matched by the specified access list.
Several traffic-shape group commands can be configured on the same interface.
The traffic-shape rate and traffic-shape group commands cannot be mixed on the same interface.
A separate token bucket and shaping queue is maintained for each traffic-shape group command.
Traffic not matching any access list is not shaped.
#show traffic-shape queue
Frame Relay GTS帧中继流量整型
FECN (Forward explicit congestion notification) 前向显示拥塞通告 帧中继交换机通告receive方
BECN (Backward explicit congestion notification) 后向显示拥寒通告 receive方通告send方
CLLM (Consolidated link layer management)
DE(Discard Eligibility)bit
第一位:一旦帧中继有一个第一位置一,而且发生拥塞,那么就丢掉第一位的帧。
帧中继交换机在出接口上产生拥塞:
帧中继适应性整型(GTS Frame Relay Congestion Adaptability)
if)#traffic-shape adaptive [bit-rate] ---------- 启用帧中继适应性整型命令,还可以在这里设置当发生拥塞时,最少可低至多少流速
if)#traffic-shape adaptive 12800 当发生拥塞时,最少可低到12800bit/S
GTS在帧中继中可以做适应性的BECN,如果收到BECN就降低到3/4,如收不到则回升。
traffic-shape fecn-adapt ----- 当接口是接收方,在某些情况下,发过来的是单向流量,没有回包,产生拥塞时,无法通知发送方,用这一命令可发送测试信息。(这句话有误)_
FRTS Overview 可以在帧中继中为每一个DLCI管道做整型
FRTS is multiprotocol.
在接口上启用了FRTS后,不能使用WFQ,只能是FIFQ,CISCO的胶片上有错误
FRTS can use one of these queuing mechanisms as the shaping queue:shap Q可以选以下任一种
Priority queuing (PQ)
Custom queuing (CQ)
Weighted fair queuing (WFQ)
FRTS can be implemented only in combination with only FFQ on the interface.
FRTS works on output only. 也只能工作在出方向
if)#frame-relay traffic-shaping 在接口上启用FRTS
在帧中继中必须在map-class中去改CIR
R1(config)#map-class frame-relay FRTS
R1(config-map-class)#frame-relay traffic-rate average[peak] 看下面的示例
R1(config-map-class)#frame-relay traffic-rate 64000 80000 如果两个值相同,等于没有Be
R1(config-map-class)#frame-relay traffic-rate 64000 64000 这种情况等于没有Be
R1(config-map-class)#frame-relay [in|out] cir 64000 分别指定,以下三条命令等于上面一条
R1(config-map-class)#frame-relay [in|out] BC 2000
R1(config-map-class)#frame-relay [in|out] BE 2000
show traffic-shaping
R1(config-if)#frame-relay class FRTS 在接口下调用,对本接口下的所有VC均有效
R1(config-if)#frame-relay interface-dlci 104 class FRTS 在PVC下单独调用和修改
map-class)#frame-relay adaptive-shaping becn ----------- FR中启用适应性的整型,也就是让路由器根据收到的BECN量调整其发送速率。
FRTS的shape queue默认也是WRFQ
EIR=Be/Tc
R1(config-map-class)#frame-relay minicir
CBshaping
policy-map CBSHAPE
class VOIP
shape average 64000 每单位时间只将Bc装满
show policy-map interface s0
policy-map CBSHAPE
class VOIP
shape peak 64000 每单位时间将Bc和Be都装满,等于每单位时间可多发一些流量,如果Bc等于Be,等于可以多发一倍
CAR
CAR可以做在进方向也可以做在出方向。
可以单独针对某一个流量作限速,还可决定拿到牌的和没拿到牌的分别作什么动作
-Transmit
-Continue
-Drop
例一:
out CAR
speed:64Kpbs
Traffic:192.168.1.0/24 any udp 4000 5000(端口号4000-5000)
Token:prec=3
NO Token:Dorp
CAR没有BE的情况下:
If the number of bytes in the packet is less than or equal to(<=)the number of tokens in Bucket1,the packet conforms,CAR removes tokens from Bucket1 equal to the number of bythes in the packet and performs the action for packets that conform
access-list 100 permit udp 192.168.1.0 0.0.0.255 any range 4000 5000
int s0/0
rate-limit output access-group 100 64000 1000 1000 conform-action set-prec-transmit 3 exceed-action drop
CIR Bc Be 拿到令牌的 设置优先级 没拿到令牌的drop掉
注意:这里Bc和Be的单位是BYTE,切记,在shap中,单位是bit,在policy中,单位是byte
set-prec-transmit 如果这里用的是set-prec-continue 则表示可以继续向下找更优的语句
例二:
if)#rate-limit input 64000 8000 8000 conform-action transmit exceed-action drop
#show interface rate-limit
rate-limit input 64000 1000
sharping中TC和BE是用单位bit
CAR中有Be的情况下:
DA-actual debt 真实债务,向第二个桶所借的实际令牌数,DA是累加的,只到新令牌放进来
DC-compounded debt 符合债务
DC=原DC+当前DA
当DC<=Be时,这个包就属于comform-action
当DC>Be时,这个包就属于exceed-action,同时将DC置0
shape max-buffers 2000 -------- 修改的buffers数,默认值为1000。
CBpolicing
-conforms 拿到令牌的就是conforms
-exceeds 在只有一个桶的情况下,没拿到令牌的就是exceeds,两个桶的情况下,借了第二个桶的令牌的就是exceeds
-violates 在有两个桶的情况下才有用,当两个桶的令牌都用完了,再来的数据包就是violates一类了
policy-map CBP
class VOIP
police cir 64000 conform-action set-dscp-transmit ef exceed-action transmit violate-action drop 拿到令牌的设为ef优先级,借用令牌的只作为普通包传输,没牌的丢掉
int s0/0
service-policy out CBP 调用
show policy-map interface s0/0
QPPB:QoS Policy
router bgp 300
table-map mark-prec4-as400
!
route-map mark prec4-as400 10
match as-path 1
set ip precedence 4
!
route-map mark prec4-as400 20
set ip precedence 0
!
ip as-path access-list 1 permit 400
!
interface serial 0
bgp-policy destination ip-prec-map
!
----------------------------------------------------------------------
压缩
int s0/0
ip tcp header compression TCP的头部压缩
show ip tcp header compression
int s0/0
ip rtp header-compression RTP的头部压缩
show ip rtp header-comression
在帧中继接口下:
int s0/0
frame-relay ip tcp header-compression TCP头部压缩
frame-relay ip rtp header-compression RTP头部压缩
其它内容
------------------------------
if)#no fair-queue(改为FIFO队列)
if)#hold-queue 100 out(更改缓存大小)
Priority Queuing
priority-list