前言  QOS基础<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

QOSquality of service ,服务质量。传统IP网络中,所有报文都是无区别对待。网络设备的处理机制是FIFOfirst in first out)也就是best-effort,但对报文的吞吐量,延迟,延迟抖动,丢包率等不保证。Maybe很好,maybe很差,视网络具体状况而定。
   随着网络的高速发展,网络承载的信息越来越丰富。而实时性强的语音,图像,重要数据对延迟,抖动,带宽比较敏感,解决的办法是增加带宽。但带宽始终是有限的。用有限的带宽,对不同网络应用数据流提供预期的服务质量保证。但QOS本身并不能增加带宽。(只是把带宽等资源进行重新分配调度)

QOS能够:

1,  通过某种测量和监管机制,控制不同业务享受到不同的服务。

2,  通过某种调度策略,保障了在网络拥塞时重要业务保持持续稳定的运行。
3,  通过对网络流量的优化,使流量获得合理分配,网络运行于最佳状态。
形象点说,就跟现实中各行业里的VIP和普通客户,分别获得不同的服务。

 

交换QoS主要是在网络的接入层对数据流,实施分类和标记,同时提供流量监管和拥塞管理。
QOS 模型 :由于QOS是端对端的通讯,比如两个不同网络通讯,中间可能会跨越多个routerswitch,那么QOS设计就需要全局考虑。否则你只能控制你的网络out的流。
1,    best-effort service  尽力而为模型
2,    integrated  综合服务模型 简称 intserv
3,    differentiated service  区分(差分)服务模型 简称 diffserv
其实best-effort 模型并不算QOS,这是数据传输的一种简单机制。目前是internet缺省服务类型。Intserv模型,应用程序首先通知自己的流量参数和需要的特定服务质量。在收到确认报文后,才开始发送报文。靠的是RSVPresource  reservation protocol)预留资源协议。缺点:RSVP报文太多,不停刷新。对单一数据流预留带宽的解决思路在internet上太难实现。厂家互联等。所以,现实中几乎是不采用。
Diffserv模型,不需要预留资源。通过IP优先级,COSDSCPACL等定义QOS,对报文进行分类,流量监管,流量×××,队列调度等。一般通过以下技术来实现:
1,    CAR 根据报文的COSTOS(对IP报文就是IP优先级和DSCP等),或IP报文的五元组(源,目的地址,源,目的端口,协议类型)对报文进行分类标志和流量监管
2 队列技术  WREDPQCQWFQCBWFQ等队列技术对拥塞的报文进行缓存和调度,实现拥塞管理。
QOS处理流程:

1,  首先在网络边缘对数据流进行分类,打上不同的QOS标志。流分类(traffic classification)是指采用一定的规则,标识出具有某种特征的报文。分类规则(classification rule)是指根据管理需求而配置的过滤规则。可以只根据DSCPTOS或定义ACLMAC地址,IP,源端口,目的端口等进行过滤。
2,  然后根据标志,在每一跳上进行相应的转发处理。比如流量×××,流量监管,拥塞避免。

 

一,优先级标志
优先级标志是实施QOS的基础。方法包括:802.1P,优先级,IP优先级,TOS优先级和DSCP优先级.
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
1,   IP headerTOS区域有8bit,023bit表示的是IP优先级(COS,取值范围是0~7(二层frame只用0~567保留) ;3-6bit表示的是TOS(type of service)优先级,取值范围是0~15;RFC2474,重新定义了TOS.称之为DS,其中DSCP使用0~5,取值范围是0-63 ,  67是保留位.
以太帧格式和TAG字段。四个字节的TAG里,PRI就代表802.1P优先级.
正常的以太frame并不带标志,802.1Q才会带有.(还有ISL,CISCO私有VLAN协议).packet却有两中标分方法: IP precedence IP优先级和DSCP 区分服务代码点
                     IP precedence0~7和各对应表.
802.1P优先级位于二层报文头.适用于不需要分析三层报文,只需要在二层保证QOS的场合.
The table below is very importantwe should be aware and remember
标志 marking

设备说明:
1,    华为记录HCSE教材上的设备型号,或本人实际操作的S5624PAR46-20
2,    思科选用是C3550-48-EMI 三层交换机 以及 C7200 路由交换机。
3,    设备型号均在命令的主机名有显示。

 

配置优先级标志: 如果同时指定了802.1P优先级和local-precedence,那么802.1P优先。TOS字段里包括IP precendceDSCP,而DSCP是相当于IP precedence的扩展。所以DSCPIP precedence优先。

 

H<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />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-relayDE 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 定义CIRBcBc以及流量×××
配置bandwidthpriority命令的话,就是启用了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

telnetclass map的名称,而不是什么协议噢)

match access-group 133 (调用ACL133

policy-map qos (qospolicy map的名称)

class telnet (policy调用名字叫做telnetclass 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 (在接口上执行)

这就是一个简单的分类标记工作,实际工程中可能会命令会多一点,复杂一点,但是道理都是一样的。

附加知识

关于classmap嵌套:有两点理由在创建class map的时候去调用一个已有的class map

1、管理方便,在已有的基础上增加一个修改进行平滑的过度。

2、允许用户在同一个class map里分别使用匹配所有(match-all)和匹配任何(match-any)

比如4个匹配标准:ABCD。现在想让class map 匹配A,或匹配B,或同时匹配CD

 

流量监管

简单说就是对特定的数据流进行流量控制.使之更能适应分配资源.
原理是: 特定数据流,会进入令牌桶.这个桶的流量是配置一个数值来限制.按规定速度向桶中丢令牌,当桶里满了后,不再增加.当数据流需要令牌桶处理的时候,如果桶里有足够的令牌也就是流量值,就直接发送,桶里流量相应减少.当少于发送的流量时,数据流会按照配置的执行动作处理.

 

配置:
, S3026不支持流量监管.
, S3026FM/FSS3526是结合ACL来定义数据流,但不能定义方向.也不支持突发量
, S3026ES3526E也是结合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报文进行限制.如果不经过三层处理的报文就不起作用.所以,LRCAR控制精度更高.记住:只对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>可以通过ACLTCP/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)