本文将按照“为什么需要 QoS -> QoS 的核心理念 -> Cisco QoS 的实现模型与工具 -> 实施步骤 -> 最佳实践”的逻辑进行深入讲解。

为什么需要 QoS?—— “高速公路”的比喻
想象一下,所有网络流量都共用一条“高速公路”(网络带宽)。
-
没有 QoS 的情况: 这条公路是“单车道”的,所有车辆(数据包)都按“先到先得”(First-Come, First-Served)的原则上路,如果路上突然来了一辆满载“紧急物资”的卡车(VoIP 语音包),它只能跟在缓慢移动的“观光大巴”(大文件传输)后面等待,结果“紧急物资”延迟到达,失去了价值,这就是网络拥塞导致的关键业务性能下降。
-
有 QoS 的情况: 这条公路被改造成了“多车道高速公路”。
- 应急车道: 专门给救护车、警车(VoIP、视频会议)使用,即使其他车道堵死,它们也能快速通行。
- 超车道: 给跑车(重要数据库同步)使用,速度更快。
- 普通车道: 给私家车(网页浏览、邮件)使用。
- 货车/慢车道: 给卡车(文件下载、P2P 下载)使用,它们速度慢,但不会影响其他车辆。
QOS 的目的就是通过这种“交通管制”,确保重要的“车辆”能够准时、快速地到达目的地。

QoS 的核心理念:分类与标记
QOS 的本质是识别流量 -> 对其进行分类 -> 打上标记 -> 根据标记进行调度。
-
识别流量:
- 基于端口: 某个物理端口或 VLAN 下的所有流量都被认为是同一类。
- 基于 DSCP: 查看 IP 包头中的 DSCP(Differentiated Services Code Point)字段,这是目前最主流的 IP 网络标记方式。
- 基于协议/端口号: 识别出 RTP 端口(用于 VoIP)、SIP 信令端口等。
- 基于 ACL (Access Control List): 通过复杂的规则组合(源/目的 IP、源/目的端口、协议等)来精确匹配流量。
-
分类与标记:
- 分类: 识别出流量后,将其归入一个特定的“流量类别”(Class)。
- 标记: 为这个类别打上一个“标签”,这个标签会存在于数据包的头部,供网络中的后续设备(交换机、路由器)识别,这个标记就是 QOS 的“语言”。
-
排队与调度:
(图片来源网络,侵删)- 设备根据数据包的“标签”,将其放入不同的“队列”(Queue)中。
- 每个队列有不同的服务等级,
- 严格优先级队列: 优先级最高的队列,只要有数据包,就会被立即发送,这适合语音等极度敏感的业务。
- 加权公平队列: 为不同队列分配不同的带宽权重,确保高优先级队列获得更多带宽,但低优先级队列也能获得保障,不会被“饿死”,这是最常用的调度方式。
Cisco QoS 的实现模型与工具详解
Cisco IOS 设备(交换机、路由器)上的 QoS 实现遵循一个模块化的模型,主要分为三个阶段:分类与标记 -> 拥塞避免 -> 流量监管与整形。
分类与标记
这是 QoS 的第一步,目的是在网络边缘(如接入交换机)识别流量并打上标记,让核心网络设备能够识别并处理。
信任边界
- 概念: 确定由谁来负责给流量打上标记,最佳实践是在网络的边缘(接入层)进行分类和标记,核心网络设备则信任这些标记并进行转发。
- 为什么? 如果核心设备自己去识别所有流量,会消耗大量 CPU 资源,边缘设备通常连接着明确的终端(如 IP 电话、PC),识别起来更简单高效。
- 配置命令:
mls qos trust cos: 信任 CoS(Class of Service)标记,常用于二层网络(VLAN Tag 中的 3 比特)。mls qos trust dscp: 信任 DSCP 标记,常用于三层网络(IP 包头中的 6 比特)。这是目前推荐的做法。mls qos trust device cisco-phone: 特殊信任模式,如果连接的是 Cisco IP 电话,则信任电话发出的流量标记(通常是 DSCP EF for voice),并自动将来自 PC 的流量标记为 DSCP AF21。
分类与重新标记
当设备不信任输入的标记,或者需要根据内部策略修改标记时,就需要进行分类和重新标记。
- 工具:
- Class Map (类映射): 定义一个“规则”,用来匹配特定的流量。
class-map match-all VOICE_TRAFFIC // match-all 表示所有条件必须同时满足 match dscp ef // 匹配 DSCP 值为 EF (Expedited Forwarding) 的流量
class-map match-any VIDEO_TRAFFIC // match-any 表示满足任意一个条件即可 match dscp af41 match dscp af42
- Policy Map (策略映射): 将“类映射”与“动作”关联起来。
policy-map QOS_POLICY class VOICE_TRAFFIC set dscp ef // 将匹配到的流量 DSCP 标记设置为 EF class VIDEO_TRAFFICE set dscp af41 class class-default // 默认类,匹配所有未明确分类的流量 set dscp cs2 // 标记为 Best Effort
- Class Map (类映射): 定义一个“规则”,用来匹配特定的流量。
- 应用策略: 将策略应用到接口的入方向或出方向。
interface GigabitEthernet0/1 service-policy input QOS_POLICY // 在入方向应用策略,对进入接口的流量进行分类和标记
拥塞避免
当流量速率超过接口带宽时,就会发生拥塞,拥塞避免机制负责在发生丢包前进行干预。
缓冲区管理
- 尾丢弃: 最简单的方式,当队列满了,新来的数据包全部丢弃,这会导致 TCP 流量“全局同步”,所有 TCP 连接同时降低发送速率,造成网络吞吐量剧烈波动。
- 加权随机早期检测: 这是更智能的拥塞避免机制。
- 工作原理: 为每个队列设置一个“低阈值”和一个“高阈值”,当队列长度超过低阈值时,WRED 开始随机地丢弃或标记(通过 ECN)数据包,丢弃的概率随着队列长度的增加而增加,直到达到高阈值,此时开始确定性地丢弃所有数据包。
- 优点:
- 避免全局同步,让 TCP 流量平滑地降低速率。
- 可以保护高优先级流量(如语音)不被丢弃,因为 WRED 通常根据 DSCP 值来决定丢弃概率,优先丢弃低 DSCP 值的包。
排队机制
当多个数据包同时等待发送时,排队机制决定了它们的发送顺序。
- FIFO (First-In, First-Out): 先到的先发,简单,但无法区分流量优先级。
- PQ (Priority Queuing): 严格优先级队列,分为高、中、中-低、低四个队列,只要高优先级队列有数据,就永远先发送它,可能导致低优先级队列“饿死”。
- WFQ (Weighted Fair Queuing): 加权公平队列,根据流的“权重”动态分配带宽,权重高的流获得更多带宽,会自动识别交互式流量(如 Telnet)并给予更高优先级。
- CBWFQ (Class-Based Weighted Fair Queuing): WFQ 的增强版,允许用户自定义流量类别,并为每个类别分配保证带宽,这是最常用、最灵活的排队机制之一。
policy-map CBWFQ_POLICY class VOICE_TRAFFIC priority 128 // 严格优先级,保证 128 kbps 带宽,延迟低 class VIDEO_TRAFFICE bandwidth 512 // 保证 512 kbps 带宽 class class-default bandwidth 256 // 保证 256 kbps 带宽给默认流量 - LLQ (Low Latency Queuing): 这是 CBWFQ 的一个特殊子集,它在 CBWFQ 的基础上增加了一个严格优先级队列,这个队列里的流量(通常是语音)会被绝对优先发送,不受带宽限制,LLQ 是实现 VoQ 的黄金标准。
流量监管与整形
这两者都是用来控制流量速率的工具,但目的和方式不同。
| 特性 | 流量监管 | 流量整形 |
|---|---|---|
| 目的 | 强制限制流量速率,丢弃超出的流量。 | 平滑流量速率,使其不超过限制,但不会丢弃数据包,而是进行缓存。 |
| 工作方式 | 使用“令牌桶”算法,当桶中没有令牌时,数据包被丢弃。 | 使用“令牌桶”算法,当桶中没有令牌时,数据包被缓存在缓冲区中,等待有令牌时再发送。 |
| 结果 | 速率恒定,但有丢包。 | 速率平滑,无丢包,但会增加延迟和抖动。 |
| 典型应用 | 在网络入口处,防止某个用户或应用占用过多带宽。 | 在网络出口处,连接到一个速率较低的链路,确保发出的流量不会超过对方能处理的速率。 |
| 配置命令 | police cir 1000000 bc 12500 |
shape average 1000000 |
Cisco QoS 实施步骤(一个完整的例子)
假设我们要为一个办公室的 Cisco IP 电话和 PC 实施QoS,目标是保障语音质量。
网络拓扑: PC --- IP Phone --- 接入交换机
目标:
- 来自电话的语音流量获得最高优先级。
- 来自 PC 的流量(网页、邮件)获得普通优先级。
- 来自 PC 的大文件下载被限制带宽,不影响语音。
步骤 1:在接入交换机上配置信任边界
interface GigabitEthernet0/1 switchport mode access switchport voice vlan 100 # 假设语音 VLAN 是 100 mls qos trust device cisco-phone # 关键一步!信任 Cisco IP Phone 的标记
- 效果: 交换机会信任电话发过来的语音流量标记(通常是 DSCP EF),并将来自 PC 的流量自动标记为 DSCP AF21(或类似值)。
步骤 2:配置 LLQ 策略
! 定义类映射
class-map match-any VOICE
match dscp ef
class-map match-any DATA
match dscp af21
! 定义策略映射
policy-map QOS-LLQ-POLICY
class VOICE
priority 128 ! 语音流量,严格优先级,保证 128kbps
class DATA
bandwidth 256 ! 数据流量,保证 256kbps
class class-default
police 1000000 ! 默认流量,限制总速率为 1Mbps,超出部分丢弃
步骤 3:将策略应用到接口
interface GigabitEthernet0/1 service-policy output QOS-LLQ-POLICY ! 通常在出方向应用策略,因为拥塞发生在发送时
步骤 4:在整个路径上启用 QoS 确保从接入交换机 -> 汇聚交换机 -> 核心路由器 -> WAN 边界路由器的所有设备都:
- 信任来自下游设备的标记(或在边缘重新标记)。
- 应用了相应的 QoS 策略(如 LLQ),确保语音流量始终走在优先级队列里。
最佳实践与注意事项
- 端到端实施: QoS 必须在网络的所有设备(接入、汇聚、核心、WAN 边界)上协同工作,才能保证端到端的服务质量。
- 从边缘开始: 在网络的边缘(接入层)进行分类和标记,核心设备信任这些标记。
- 简化策略: QoS 策略越简单越好,避免过度复杂的分类,否则会增加设备 CPU 负担。
- 监控是关键: 使用
show mls qos interface,show policy-map interface,show queueing interface等命令监控 QoS 策略的运行效果,并根据实际情况进行调整。 - 区分 CoS 和 DSCP:
- CoS (802.1p): 二层标记,只在 VLAN 内部有效。
- DSCP (DiffServ): 三层标记,端到端(跨越不同 VLAN 和三层网络)都有效。优先使用 DSCP。
- 不要过度使用 LLQ: LLQ 的优先级队列会抢占所有其他队列的带宽,如果放入 LLQ 的流量过多(多个视频会议),可能会“饿死”其他所有流量,导致网络整体性能下降,应为 LLQ 流量设置一个合理的带宽上限。
Cisco QOS 是一个功能强大但复杂的工具集,其核心思想是通过分类、标记、排队、调度四个步骤,为不同业务提供差异化的服务,成功的 QoS 部署需要一个清晰的端到端设计,从网络边缘进行信任和标记,在核心路径上应用拥塞避免和优先级队列(如 LLQ),并通过持续的监控和调优来确保效果,掌握这些技术和模型,是构建高质量、高可靠现代网络的必备技能。
