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设计就成功了一半。剩下的,就是在设备上配好队列和调度策略了。