前言 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)