前言 QOS基础
QOS(quality of service ),服务质量。传统IP网络中,全部报文都是无区别对待。网络设备的处理机制是FIFO(first in first out)也就是best-effort,但对报文的吞吐量,延迟,延迟抖动,丢包率等不保证。Maybe很好,maybe不好,视网络具体情况而定。
随着网络的高速发展,网络承载的信息愈来愈丰富。而实时性强的语音,图像,重要数据对延迟,抖动,带宽比较敏感,解决的办法是增长带宽。但带宽始终是有限的。用有限的带宽,对不一样网络应用数据流提供预期的服务质量保证。但QOS自己并不能增长带宽。(只是把带宽等资源进行从新分配调度)
QOS可以:
1,
经过某种测量和监管机制,控制不一样业务享受到不一样的服务。
2,
经过某种调度策略,保障了在网络拥塞时重要业务保持持续稳定的运行。
3,
经过对网络流量的优化,使流量得到合理分配,网络运行于最佳状态。
形象点说,就跟现实中各行业里的VIP和普通客户,分别得到不一样的服务。
交换QoS主要是在网络的接入层对数据流,实施分类和标记,同时提供流量监管和拥塞管理。
QOS
模型
:因为QOS是端对端的通信,好比两个不一样网络通信,中间可能会跨越多个router和switch,那么QOS设计就须要全局考虑。不然你只能控制你的网络out的流。
1,
best-effort service 尽力而为模型
2,
integrated 综合服务模型 简称 intserv
3,
differentiated service 区分(差分)服务模型 简称 diffserv
其实best-effort 模型并不算QOS,这是数据传输的一种简单机制。目前是internet缺省服务类型。Intserv模型,应用程序首先通知本身的流量参数和须要的特定服务质量。在收到确认报文后,才开始发送报文。靠的是RSVP(resource reservation protocol)预留资源协议。缺点:RSVP报文太多,不停刷新。对单一数据流预留带宽的解决思路在internet上太难实现。厂家互联等。因此,现实中几乎是不采用。
Diffserv模型,不须要预留资源。经过IP优先级,COS,DSCP,ACL等定义QOS,对报文进行分类,流量监管,流量×××,队列调度等。通常经过如下技术来实现:
1,
CAR 根据报文的COS或TOS(对IP报文就是IP优先级和DSCP等),或IP报文的五元组(源,目的地址,源,目的端口,协议类型)对报文进行分类标志和流量监管
2, 队列技术 WRED,PQ,CQ,WFQ,CBWFQ等队列技术对拥塞的报文进行缓存和调度,实现拥塞管理。
QOS处理流程:
1,
首先在网络边缘对数据流进行分类,打上不一样的QOS标志。流分类(traffic classification)是指采用必定的规则,标识出具备某种特征的报文。分类规则(classification rule)是指根据管理需求而配置的过滤规则。能够只根据DSCP,TOS或定义ACL对MAC地址,IP,源端口,目的端口等进行过滤。
2,
而后根据标志,在每一跳上进行相应的转发处理。好比流量×××,流量监管,拥塞避免。
一,优先级标志
优先级标志是实施QOS的基础。方法包括:802.1P,优先级,IP优先级,TOS优先级和DSCP优先级.
1, IP header的TOS区域有8个bit,0到2这3个bit表示的是IP优先级(COS),取值范围是0~7(二层frame只用0~5,6和7保留) ;3-6bit表示的是TOS(type of service)优先级,取值范围是0~15;在RFC2474中,从新定义了TOS域.称之为DS域,其中DSCP使用0~5,取值范围是0-63 , 6和7是保留位.
以太帧格式和TAG字段。四个字节的TAG里,PRI就表明802.1P优先级.
正常的以太frame并不带标志,802.1Q才会带有.(还有ISL,CISCO私有VLAN协议).而packet却有两中标分方法: IP precedence IP优先级和DSCP 区分服务代码点
IP precedence分0~7和各对应表.
802.1P优先级位于二层报文头.适用于不须要分析三层报文,只须要在二层保证QOS的场合.
The table below is very important,we should be aware and remember。
二
标志
(
marking
)
设备说明:
1,
华为记录HCSE教材上的设备型号,或本人实际操做的S5624P,AR46-20
2,
思科选用是C3550-48-EMI 三层交换机 以及 C7200 路由交换机。
3,
设备型号均在命令的主机名有显示。
配置优先级标志: 若是同时指定了802.1P优先级和local-precedence,那么802.1P优先。TOS字段里包括IP precendce和DSCP,而DSCP是至关于IP precedence的扩展。因此DSCP比IP precedence优先。
H
3C
配置:
一, S3026只支持802.1P优先级.接口视图下:priority-level [0~7] 设定优先级,同时配置 port priority replacement 设置接口优先级替换,而后通过该端口的数据流都打上此端口的优先级.
二, S3526E以上三层交换机都支持: IP优先级,802.1P优先级(COS值),DSCP优先级和本地优先级.是根据ACL结合来定义数据流.接口视图下:
[S5624P-GigabitEthernet1/0/25]traffic-priority inbound ip-group 2000 ?
cos Specify 802.1p priority
dscp Specify DSCP
ip-precedence Specify IP precedence
local-precedence Specify local precedence
rule Specify the ID of acl rule
华为的是在一条命令里完成定义要标志的报文并设置优先级。而Cisco的是经过class-map定义要标志的报文,而后在policy-map里调用再设置优先级。
Cisco配置:
C7200(config)#class-map [match-any| match-all] ewen 定义class-map
C7200(config-cmap)#match ? 好多match的选择,
access-group Access group
any Any packets
class-map Class map
cos IEEE 802.1Q/ISL class of service/user priority values
destination-address Destination address
discard-class Discard behavior identifier
dscp Match DSCP in IP(v4) and IPv6 packets
fr-de Match .
Frame-relay
DE
bit
fr-dlci Match . fr-dlci
input-interface Select an input interface to match
ip IP specific values
mpls Multi Protocol Label Switching specific values
not Negate this match result
packet Layer 3 Packet length
precedence Match Precedence in IP(v4) and IPv6 packets
protocol Protocol
qos-group Qos-group
source-address Source address
C3550(config-cmap)#match ? 3550上选项就少多了。不过多了个vlan
access-group Access group
class-map Class map
ip IP specific values
vlan VLANs to match
C7200(config-cmap)#match ip precedence ? 匹配ip优先级
<0-7> Enter up to 4 precedence values separated by white-spaces
critical Match packets with critical precedence (5)
flash Match packets with flash precedence (3)
flash-override Match packets with flash override precedence (4)
immediate Match packets with immediate precedence (2)
internet Match packets with internetwork control precedence (6)
network Match packets with network control precedence (7)
priority Match packets with priority precedence (1)
routine Match packets with routine precedence (0)
marking也就这么一个match命令了,就至关因而个super ACL,用来定义感兴趣的报文。以便后面的policy-map引用。较经常使用的是使用IP优先级和ACL定义。
C3550(config)#policy-map qos
C3550(config-pmap)#class ewen 调用class-map
C3550(config-pmap-c)#police 80000 8000 exceed-action drop 利用令牌桶算法进行限速CIR
C3550(config-pmap-c)#set ? 对class-map定义的报文设置优先级。
cos Set IEEE 802.1Q/ISL class of service/user priority
dscp Set DSCP in IP(v4) and IPv6 packets
ip Set IP specific values
precedence Set precedence in IP(v4) and IPv6 packets
而路由器里则有较多的选项:
C7200(config-pmap-c)#?
QoS policy-map class configuration commands:
bandwidth Bandwidth 定义保留的带宽
compression Activate Compression
drop Drop all packets
exit Exit from QoS class action configuration mode
no Negate or set default values of a command
police Police 利用令牌桶算法进行限速
priority Strict Scheduling Priority for this Class优先级保留的带宽以及突发流量
queue-limit Queue Max Threshold for Tail Drop队列的最大包个数
random-detect Enable Random Early Detection as drop policy启用WRED
service-policy Configure QoS Service Policy
set Set QoS values 定义class-map报文的优先级
shape Traffic Shaping 定义CIR,Bc,Bc以及流量×××
配置bandwidth和priority命令的话,就是启用了CBWFQ,两个命令只能启用一个。当第二个取用的话,系统会提示:Must remove priority configuration from this class first.或者Must deconfigure bandwidth before issuing this command in this class
而后在接口上应用
C7200(config-if)#service-policy input qos
Class-map是个匹配模块,policy-map是个执行模块。一个policy-map能够调用多个class-map而完成对多种不一样流量进行优先级设置和带宽保留等做用。
Case 1
把来自192.168.10.0/24 的出站telnet 流量的IP优先级设置为5,其余的出站流量的IP优先级设置为1:
access-list 133 permit tcp 192.168.10.0
0.0.0
.255 any eq telnet
(ACL133定义特定流量)
class-map match-all telnet
(telnet是class map的名称,而不是什么协议噢)
match access-group 133 (调用ACL133)
policy-map qos (qos是policy map的名称)
class telnet (policy调用名字叫作telnet的class map)
set ip precedence 5 (把优先级修改为5)
class class-default (class-default指的就是其余的数据)
set ip precedence 1 (优先级次修改成1)
interface Serial1
ip address
10.0.0
.1 255.255.255.252
service-policy output qos (在接口上执行)
这就是一个简单的分类标记工做,实际工程中可能会命令会多一点,复杂一点,可是道理都是同样的。
附加知识
关于class-map嵌套:有两点理由在建立class map的时候去调用一个已有的class map:
1、管理方便,在已有的基础上增长一个修改进行平滑的过分。
2、容许用户在同一个class map里分别使用匹配全部(match-all)和匹配任何(match-any)。
好比4个匹配标准:A、B、C和D。如今想让class map 匹配A,或匹配B,或同时匹配C和D,
流量监管
简单说就是对特定的数据流进行流量控制.使之更能适应分配资源.
原理是: 特定数据流,会进入令牌桶.这个桶的流量是配置一个数值来限制.按规定速度向桶中丢令牌,当桶里满了后,再也不增长.当数据流须要令牌桶处理的时候,若是桶里有足够的令牌也就是流量值,就直接发送,桶里流量相应减小.当少于发送的流量时,数据流会按照配置的执行动做处理.
配置:
一 , S3026不支持流量监管.
二, S3026FM/FS和S3526是结合ACL来定义数据流,但不能定义方向.也不支持突发量
三, S3026E和S3526E也是结合ACL来定义数据流,只能定义in的方向.也能支持突发的action.
[S5624P-GigabitEthernet1/0/25]traffic-limit inbound ip-group 2000 5000 exceed ?
drop Drop the packets
remark-dscp Specify DSCP
端口限速
LR(line rate) 也是用令牌桶来进行流量处理.当桶里令牌数不够时,会认为端口拥塞,就会放进QOS队列进行拥塞管理.由于用了令牌桶.因此流量控制更为合理和有弹性.
LR是对物理接口上发送的总报文速率限制.工做在二层.对全部报文都能限制.而CAR是工做在IP层,对IP报文进行限制.若是不通过三层处理的报文就不起做用.因此,LR比CAR控制精度更高.记住:只对out方向报文有效
配制很是简单:
[S5624P-GigabitEthernet1/0/25]line-rate outbound ?
INTEGER<64-1000000> Target rate(Kbps). It must be a multiple of
64 in
this
port.
三
拥塞管理
这才是QOS的精华所在哦。当接收端口速度大于发送端口速度时,拥塞就会发生.拥塞管理采用队列技术,在网络拥塞时经过报文缓存和调度策略,使报文能按规定发送出去。队列技术不仅能进行拥塞管理,还能对不一样数据流提供差异服务.
一,先进先出队列(First In First Out Queuing,FIFO)
Internet默认使用的队列技术,对报文不进行分类.在报文进入接口的速度大于报文出接口的速度的状况下,按照报文到达接口的前后顺序进入队列,发送的时候也是同样。在不使用其余队列技术时,除了小于2.048Mbps的串行接口之外的全部接口,默认都使用FIFO
C7200#sh int f0/0
FastEthernet0/0 is administratively down, line protocol is down
Hardware is DEC21140, address is ca00.02ec.0000 (bia ca00.02ec.0000)
MTU 1500 bytes, BW 100000 Kbit, DLY 100 usec,
reliability 252/255, txload 1/255, rxload 1/255
Encapsulation ARPA, loopback not set
Keepalive set (10 sec)
Half-duplex, 100Mb/s, 100BaseTX/FX
ARP type: ARPA, ARP Timeout 04:00:00
Last input never, output 00:42:30, output hang never
Last clearing of "show interface" counters never
Input queue: 0/75/0/0 (size/max/drops/flushes); Total output drops: 0
Queueing strategy: fifo
Output queue: 0/40 (size/max)
二, 加权公平队列(Weighed Fair Queuing,WFQ)
对报文按流进行分类(对IP网络来讲,流是指相同源,目的IP地址,源,目的端口,协议号,IP优先级的报文属于同一个流),出站按照IP优先级高低分配带宽,优先级高的占用高.
WFQ是带宽低于2.048Mbps串行接口默认使用的队列技术.(锐捷路由器使用交互式配置PPPOE默认也是)因此没什么好说的.
不足之处:不支持加密的接口,不支持隧道.精确度不如CBWFQ等高.
配置很简单:
C7200(config-if)#fair-queue
三, 优先级队列(Priority Queuing, PQ)
把报文优先级分类.而后归类到四个优先级:high , medium, normal ,low
当网络拥塞时,会按照定义的优先级从高到低发送.当优先级高的队列发送完毕才到下一个优先级队列.若是高优先级队列一直持续发送,那么低优先级的就永远不能发送,形成饿死了.
配置:
1,建立优先级列表
C7200(config)#priority-list 1 ?
default Set priority queue for unspecified datagrams
interface Establish priorities for packets from a named interface 匹配进口
protocol priority queueing by protocol 匹配协议
queue-limit Set queue limits for priority queues 定义队列个数
2,定义队列匹配条件
C7200(config)#priority-list 1 protocol ?
arp IP ARP
bridge Bridging
bstun Block Serial Tunnel
cdp Cisco Discovery Protocol
compressedtcp Compressed TCP
dlsw Data Link Switching (Direct encapsulation .ly)
ip IP
ipv6 IPV6
llc2 llc2
pad PAD links
pppoe PPP over Ethernet
qllc qllc protocol
rsrb Remote Source-Route Bridging
snapshot Snapshot routing support
stun Serial Tunnel
C7200(config)#priority-list 1 protocol ip high ?
fragments Prioritize fragmented IP packets
gt Prioritize packets greater than a specified size大于多少字节的包(包括帧的封装头)
list To specify an access list
lt Prioritize packets less than a specified size 小于多少字节的包(包括帧的封装头)
tcp Prioritize TCP packets 'to' or 'from' the specified port
udp Prioritize UDP packets 'to' or 'from' the specified port
<cr>能够经过ACL或TCP/UDP端口号来定义不一样报文的优先级.
3,定义队列中报文个数.默认就是20 40 60 80,能够修改.
C7200(config)#priority-list 1 queue-limit 20 40 60 80
4,应用在接口上
C7200(config-if)#priority-group 1
四,自定义队列(Custom Queuing , CQ)