3. 报文分类与标记机制
QoS要生效,第一步永远是“认出报文”。如果设备无法区分语音、视频、办公邮件和P2P下载,后续的队列调度、拥塞避免、限速整形都无从谈起。报文分类与标记机制解决的就是“识别”和“标识”两个问题:分类(Classification)负责判断一个报文属于哪个业务类别,标记(Marking)负责把判断结果写入报文头部的某个字段,让后续所有节点都能直接读取,而不必重复做复杂匹配。
一、二层与三层标记字段
以太网帧和IP报文头部都预留了可用于QoS的字段,理解它们的位宽和取值范围是配置的前提。
802.1p(CoS)位于VLAN Tag的TCI字段中,占3 bit,取值0~7,共8个优先级。它只在带Tag的以太网帧中存在,属于二层标记。典型映射为:7网络控制、6语音信令、5语音媒体、4视频、3呼叫信令、0尽力而为。由于只有3 bit,粒度较粗,通常用于接入层到汇聚层的快速区分。
ToS与IP优先级位于IPv4头部的ToS字节(8 bit)。早期RFC 791把高3 bit定义为IP Precedence(IP优先级),取值0~7,与802.1p语义接近;低4 bit为ToS位(D、T、R、C),用于指示时延、吞吐、可靠性和开销需求,实际部署中很少使用。IP优先级是三层标记的早期方案,现在基本被DSCP取代。
DSCP是RFC 2474对ToS字节的重新定义,占高6 bit,取值0~63。它把ToS字节拆成DSCP(6 bit)+ 2 bit未用(CU)。DSCP的命名采用“类别选择码+丢弃优先级”结构,例如EF( Expedited Forwarding,值46)用于语音,AF41(值34)用于视频,AF31(值26)用于关键数据,CS6(值48)用于路由协议,BE/CS0(值0)为默认尽力而为。DSCP比IP优先级多出3 bit,可表达更细的等级和丢弃概率,是企业QoS最常用的标记字段。
EXP字段位于MPLS标签栈的标签项中,占3 bit,取值0~7,作用与802.1p类似,用于在MPLS域内传递优先级。当报文进入MPLS网络时,边缘设备通常把IP DSCP或802.1p映射到EXP;离开MPLS域时再映射回DSCP或CoS。EXP是MPLS VPN场景中保证端到端QoS连续性的关键字段。
二、基于ACL的报文识别
ACL是最基础的识别工具,它按规则逐条匹配报文的五元组或部分字段,命中后执行permit或deny。在QoS场景中,ACL通常不直接用于丢弃,而是作为流分类的if-match条件。例如,要识别语音媒体流,可以定义一条高级ACL匹配UDP目的端口范围:
acl advanced 3001
rule 10 permit udp destination-port range 16384 32767
rule 20 permit udp destination-port eq 5060
quit
这里rule 10匹配RTP媒体端口,rule 20匹配SIP信令端口5060。ACL本身只做“是否命中”的判断,不改变报文。它的优点是配置直观、兼容性好;缺点是只能基于静态字段,无法识别动态端口协商后的会话,也难以表达“同一用户的不同业务”这类复杂语义。
三、流分类与复杂流分类
Comware的模块化QoS(MQC)把识别与动作解耦,形成“流分类—流行为—QoS策略”三段式结构。流分类(traffic classifier)定义“匹配什么”,流行为(traffic behavior)定义“匹配后做什么”,QoS策略(qos policy)把两者关联并指定应用方向。
一个典型的语音保障策略可以这样组织:先定义分类器匹配DSCP EF或UDP端口范围,再定义行为做标记和队列保障,最后在接口入方向应用策略。
traffic classifier VOICE operator or
if-match dscp ef
if-match acl 3001
quit
traffic behavior VOICE
remark dscp ef
queue af bandwidth 2048
quit
qos policy QOS-IN
classifier VOICE behavior VOICE
quit
interface GigabitEthernet1/0/1
qos apply policy QOS-IN inbound
quit
上述示例中,classifier使用operator or,表示命中任一条件即归入VOICE类;behavior把报文DSCP重写为EF,并为其分配AF队列和2 Mbps带宽保障。接口入方向应用后,进入该接口的语音报文会被识别、标记并进入相应队列。实际部署时,带宽值应根据链路容量和语音并发路数估算,例如G.711每路约80 kbps,50路并发约需4 Mbps,示例中的2048 kbps仅作演示。
四、标记的信任与重标记
标记机制的关键问题是“信任谁”。接入层设备通常面临两种选择:信任终端送来的标记,或一律重标记。如果信任PC送来的DSCP,恶意用户可能把普通流量标成EF,抢占语音队列。因此工程上常见做法是:在接入端口启用信任DSCP或信任802.1p,但配合ACL限制可信任的源;或者不信任终端,统一由接入设备根据业务类型重标记。
重标记发生在流行为中,常用命令包括remark dscp、remark ip-precedence、remark dot1p、remark mpls-exp。标记后的报文在后续节点只需读取字段即可分类,无需重复复杂匹配,这正是标记机制提升转发效率的核心价值。
| 字段 | 所在位置 | 位宽 | 取值范围 | 典型用途 |
|---|---|---|---|---|
| 802.1p / CoS | VLAN Tag TCI | 3 bit | 0~7 | 二层优先级,接入汇聚 |
| IP优先级 | IPv4 ToS高3位 | 3 bit | 0~7 | 早期三层标记 |
| DSCP | IPv4 ToS高6位 | 6 bit | 0~63 | 企业QoS主标记 |
| EXP | MPLS标签项 | 3 bit | 0~7 | MPLS域内优先级 |
五、识别与标记的配合关系
分类和标记不是孤立的两个动作,而是一条链:报文进入设备,先由流分类按ACL、DSCP、端口等条件识别,命中后由流行为执行标记或队列动作,标记结果写入报文头部,后续节点直接读取。若后续节点信任该标记,则不再重复分类;若不信任,则重新分类并重标记。端到端QoS能否一致,取决于整条路径上各节点的信任策略和标记映射是否协调。
掌握本节内容后,读者应能回答三个问题:报文头部的哪个字段承载优先级、设备用什么条件识别业务流、识别后如何标记并让后续节点信任。这三步打通,后续的队列调度、拥塞管理和流量整形才有可靠的输入。