4、DiffServ模型详解:DSCP字段定义、PHB行为(EF/AF/BE)、DSCP与IP Precedence的映射关系

各位好,咱们今天聊聊DiffServ模型。说实话,在PTN网络里做QoS,DiffServ是绕不开的核心。我刚开始接触PTN的时候,也被那一堆DSCP、PHB、EF、AF搞得头大。后来在项目里摸爬滚打,才慢慢理清了门道。

DiffServ,全称是Differentiated Services,翻译过来就是“区分服务”。说白了,它不像IntServ那样给每个流都预留带宽,而是把报文打上不同的标记,然后网络设备根据这些标记来区别对待。你想想看,在PTN这种大容量网络里,要是每个流都做端到端资源预留,那设备早累趴下了。

4.1 DSCP字段定义

DSCP,全称是Differentiated Services Code Point,位于IP头部的ToS字段里。嗯,这里要注意,老版本的IP头部用的是ToS(Type of Service),只有3位优先级。后来IETF觉得不够用,就把整个ToS字节重新定义了。

DSCP字段占用6位,取值范围是0到63。为什么是6位?因为要兼容老的IP Precedence。我习惯把DSCP字段分成两部分看:

  • 高3位(bit 0-2):用于定义服务等级,兼容IP Precedence
  • 中2位(bit 3-4):用于定义丢弃优先级
  • 低1位(bit 5):保留位,通常置0

重要提醒:DSCP字段的6位编码,决定了报文在PTN网络中的“待遇”。我在项目中见过不少配置错误,就是因为DSCP值没对齐,导致高优先级业务被误判为普通流量。

举个例子,DSCP 46(二进制101110)在PTN网络中通常对应EF(加速转发),而DSCP 0(二进制000000)就是默认的BE(尽力而为)。

4.2 PHB行为详解

PHB,全称是Per-Hop Behavior,逐跳行为。每个网络节点(路由器、PTN设备)根据DSCP值,对报文执行不同的转发策略。我个人把PHB分成三大类:EF、AF、BE。

4.2.1 EF(Expedited Forwarding)—— 加速转发

EF,说白了就是“快车道”。它保证低延迟、低抖动、低丢包。DSCP值固定为46(二进制101110)。

我在项目中遇到过,某运营商的VoIP业务就用的EF。有一次客户投诉通话质量差,我查了一圈,发现是某个PTN节点把EF的DSCP值配成了45。你想想看,就差一个bit,整个语音流就被打入了“慢车道”。

我的建议:EF只用于对时延极其敏感的业务,比如语音、视频会议。千万别把普通数据流也标成EF,否则会挤占带宽,导致真正的实时业务受损。

4.2.2 AF(Assured Forwarding)—— 确保转发

AF是我用得最多的PHB。它把业务分成4个等级(AF1x到AF4x),每个等级又有3个丢弃优先级。你想想看,4×3=12种组合,足够应对大部分场景了。

AF的DSCP编码规则是这样的:

AF等级 低丢弃优先级 中丢弃优先级 高丢弃优先级
AF1 AF11 (DSCP 10) AF12 (DSCP 12) AF13 (DSCP 14)
AF2 AF21 (DSCP 18) AF22 (DSCP 20) AF23 (DSCP 22)
AF3 AF31 (DSCP 26) AF32 (DSCP 28) AF33 (DSCP 30)
AF4 AF41 (DSCP 34) AF42 (DSCP 36) AF43 (DSCP 38)

为什么会这样设计?我解释一下。AF1到AF4,等级越高,带宽保证越大。同一等级内,丢弃优先级越高,拥塞时越容易被丢弃。举个例子,AF41和AF43,虽然都是AF4等级,但AF43在拥塞时会被优先丢弃。

避坑指南:我曾经在某个项目中,把视频监控业务标成了AF43(高丢弃优先级)。结果网络一拥塞,监控画面全卡住了。后来改成AF41,问题解决。记住:同一等级内,尽量用低丢弃优先级,除非你明确知道业务可以容忍丢包。

4.2.3 BE(Best Effort)—— 尽力而为

BE,就是“有啥吃啥”。DSCP值为0,没有带宽保证,没有延迟保证。说白了,网络有空就转发,没空就丢包。

在PTN网络中,BE通常用于普通上网流量、文件下载等。我建议把BE的队列优先级设得最低,别让它影响关键业务。

4.3 DSCP与IP Precedence的映射关系

老设备还在用IP Precedence(3位),新设备用DSCP(6位)。两者怎么互通?嗯,这里有个标准映射关系。

IP Precedence的3位值(0-7),映射到DSCP的高3位,低3位补0。举个例子:

  • IP Precedence 5(二进制101)→ DSCP 40(二进制101000)
  • IP Precedence 3(二进制011)→ DSCP 24(二进制011000)
  • IP Precedence 0(二进制000)→ DSCP 0(二进制000000)

你想想看,这种映射方式保证了向后兼容。老设备发出的IP Precedence标记,新设备能正确识别为对应的DSCP值。

我整理了一个常用映射表:

IP Precedence 二进制 映射DSCP 典型用途
7 111 56 网络控制
6 110 48 网间控制
5 101 40 语音
4 100 32 视频会议
3 011 24 呼叫信令
2 010 16 高优先级数据
1 001 8 中优先级数据
0 000 0 尽力而为

我的经验:在PTN网络里,我习惯把DSCP 46(EF)对应IP Precedence 5,DSCP 34(AF41)对应IP Precedence 4。这样在和老设备对接时,不会出现优先级错乱。

最后说一句,DiffServ模型的核心就是“分类+标记+逐跳行为”。你只要把DSCP字段搞清楚了,PHB行为理解了,映射关系记住了,PTN网络的QoS设计就成功了一半。剩下的,就是在设备上配好队列和调度策略了。