首页 › deep-tech › 一条QoS规则的万里长征

一条QoS规则的万里长征:从策略纸面到空口落地

引子:菜单上写着,不等于厨房做到

你去餐厅点菜,菜单上印着“牛排,八分熟,二十分钟上桌”。这句话写在纸上很容易,真正难的是后厨:谁来记住这张单子?牛排几分熟怎么判断?如果两桌同时点了同一块肉,谁先出?出菜之后传菜员怎么知道这盘要快走?

5G的QoS体系就是这家餐厅。应用在会话建立时说“我是语音,要低时延、有保底速率”,这相当于顾客点菜;网络答应下来,相当于菜单上把承诺写好。但从“承诺”到“每一颗包真的被区别对待”,中间隔着整整一条流水线。很多工程师能背出5QI的含义,却说不清一颗下行包从数据网络进来之后,到底经过了哪些关卡、在哪一站被限速、在哪一站被贴标签、在哪一站被塞进空口的某个队列。这篇文章就跟着这颗包,把整条流水线走一遍。

先看全景。整条链路分成控制面和用户面两条线:控制面负责“立规矩”,用户面负责“干活”。

flowchart TD
    AF["应用提出需求"] -->|策略请求| PCF["PCF 策略大脑"]
    PCF -->|策略决策| SMF["SMF 会话管家"]
    SMF -->|N4工单| UPF["UPF 转发执行"]
    SMF -->|NAS信令| UE["UE 终端"]
    SMF -->|NGAP信令| gNB["gNB 基站"]
    UPF -->|N3隧道带QFI| gNB
    gNB -->|DRB空口承载| UE

策略从PCF出发,经过SMF翻译,兵分三路下发:一路给UPF(N4接口的“工单”),一路给基站(接入侧资源),一路给终端(NAS层的QoS规则)。三条线到齐,这颗包的“待遇”才算真正落地。下面一站一站细看。

第一站:待遇的原始凭证——套餐编号与插队证

在讲流水线之前,得先弄清楚SMF手里拿到的是什么凭证。每条PDU会话建立时,必然带有一条默认QoS流,它是非GBR的,相当于餐厅的“团购套餐”:不承诺保底,但保证你永远有得吃。现网默认流最常见的取值是5QI=9——一个“标准化套餐编号”,网络里的每一台设备看到这个编号,就知道它对应约300毫秒的时延预算和10^-6的丢包预算,不需要在信令里逐项传递参数。

套餐编号解决“什么待遇”,还有一张凭证解决“排队时谁让谁”——ARP(分配与保留优先级)。它是一个1到15的数字,1最高,附带两个开关:能不能抢占别人、能不能被别人抢占。你可以把它理解成餐厅的“插队证”:平时不显山露水,一旦座位紧张(资源不足),它决定谁被请出去。紧急呼叫、专网切片里的关键业务,靠的就是这张证。

需要强调的是:5QI和ARP都只是语义层面的描述,是纸面上的承诺。纸面承诺不会自动变成现实——把它变成现实的,是接下来四站。

第二站:SMF把承诺翻译成工单

SMF是整条流水线的总调度。它收到策略决策后,做的第一件事是翻译:把“给这个业务XX待遇”翻译成UPF能逐包执行的机器指令。

这里体现了5G核心网最重要的一个架构思想:转发面和控制面分离。策略的“大脑”在SMF,干活的“手”在UPF,两者之间靠N4接口上的一套规则体系通信。开源核心网Open5GS的文档把这个机制说得很直白:这些规则由控制面编程进用户面,定义包应当如何被识别、转发、限质、计量和缓存。

这套工单体系有四个核心零件:

规则 全称 干什么 类比
PDR 包检测规则 按「五元组、UE地址、隧道端点」等条件匹配流量 安检口按登机牌分流
FAR 转发动作规则 决定命中后怎么走:转发、封装、丢弃、缓存、复制 分流后走哪条安检通道
QER QoS执行规则 对匹配流量做门控和限速 通道口的限流闸机
URR 用量上报规则 计数、计时、按量触发上报给计费系统 通道口的流量计数器

其中PDR是入口。每条PDR带一个匹配条件集合(PDI)——可以是UE的IP地址、隧道的两端标识,也可以是一条应用级的业务流过滤器(比如“目标是某视频服务器443端口的那条TCP流”)。多个PDR可能同时看起来都匹配,所以每条PDR还有一个优先级数值,数值越小越先匹配,先命中先用。这套“条件+优先级”的结构,让UPF面对每秒百万级的包流时,只需要做一件极其简单的事:逐包查表,命中即执行。

为什么要把“识别”和“处理”拆成两张表(PDR管识别,FAR/QER/URR管处理)?因为同一种流量可能在不同时刻需要不同处理:白天正常转发,深夜策略要求缓存;或者一条流同时要限速又要计量。拆开后,改任何一个动作只需把新规则关联到已有PDR上,不用重写匹配条件。这是典型的策略与执行解耦——大脑改主意,手不用重新学。

第三站:UPF流水线上的逐包审判

工单装进UPF之后,每一颗包的命运就在这条流水线上被决定。整个过程是纯数据面的操作,没有任何信令参与——这是它能扛住大流量的根本原因。

flowchart TD
    A["包从N3或N6到达"] --> B["PDR按优先级匹配"]
    B --> C{"命中规则吗"}
    C -->|未命中| D["走默认流处理"]
    C -->|命中| E["QER门控检查"]
    E -->|门是关的| F["静默丢弃"]
    E -->|门是开的| G["令牌桶限速"]
    G --> H["URR计数计量"]
    H --> I["FAR执行动作"]
    I --> J["封装转发"]
    I --> K["缓存或复制"]

流水线上有两个环节值得停下来细看。

第一个是门控(Gate)。 每条QER带一个开/关状态,门关着时包被“静默丢弃”——注意不是报错,是悄无声息地扔掉。门控的用途是暂时冻结:比如用户欠费停机时,SMF不停会话、不删规则,只是把门关上;复机时把门打开,一切瞬间恢复。这种“保留现场、只关闸门”的设计,比反复建立/删除整个会话要轻量得多。

第二个是限速。 UPF做限速不是用一个简单的计数器——那样的话,用户在整点那一秒可以瞬间灌进海量数据。实际用的是令牌桶算法:系统以固定速率往桶里放令牌,每个包发送前要先取走令牌,桶空了就只能等。

$$r \le \text{MBR,令牌生成速率}, \qquad b \approx \text{桶深,允许的最大突发}$$

令牌桶的精妙之处在于它同时管住了两件事:长期平均速率被生成速率卡死,短时突发被桶深容忍。桶里攒下的令牌允许业务在空闲之后来一波脉冲(比如网页加载的一瞬间拉取几十个对象),这是“平均限速”体验远好于“瞬时卡死”的关键。视频类业务普遍表现出的“开头快、后头匀”,背后就是这只桶。

而URR在旁边默默记账:过了多少包、多少字节、持续多长时间,达到阈值就上报给计费系统。你话费单上“用了多少GB”,原始凭证就诞生在这一站。

第四站:出了UPF,标记就是一切

包从UPF出来,进入传输网。这里有个残酷的现实:传输网上的路由器不认识5G的任何概念。它不知道什么是QoS流、什么是5QI,它只认识IP头。

怎么办?答案是DiffServ体系:在包的IP头上打一个6比特的DSCP标记,沿途路由器只看标记给待遇——标记写着“低时延”就走优先队列,写着“尽力而为”就排队。维基百科对这套机制的定位很清晰:DiffServ是“打标记”的路线上胜出的方案——早年IETF推过另一条路(IntServ),让每个应用逐跳预约资源,结果在骨干网上扛不住海量预约状态,最终被“边缘打标记、核心按标记排队”的轻量方案取代。

5G核心网沿用并内化了同样的哲学,而且拆得更彻底:

为什么要分两段?因为两端的管理者不同。隧道内的QFI是运营商自己地盘里的私货,语义可以很丰富;一出地盘进入共享传输网,就必须换成公共语言(DSCP)。语义在域内保全,待遇在域外靠标记近似——这是端到端QoS在现实世界里能落地的唯一折中。

第五站:最后三百米——QoS流如何拧上空口

包到了基站,迎接它的是整个体系里最精巧的一层映射。5G把4G的“承载”概念拆散了:4G时代从终端到核心网是一条端到端的专用管道,QoS和管道一一绑定,改个待遇要拆了重建整条管道;5G则分成松耦合的两级——核心网只认QoS流,空口只认数据无线承载(DRB),两层之间靠基站的SDAP子层“拧”在一起。

这个改动的价值在于:新增一条QoS流,如果基站判断现有DRB的待遇档次够用,只需在新流和旧DRB之间画一条映射线,空口不用新建任何东西;只有待遇差异大到必须单独伺候时(比如新来了一条GBR语音流),才新建DRB。管道数量被压到最少,信令开销和终端功耗都跟着降。

flowchart TD
    A["核心网发来QoS流"] --> B["基站SDAP层收货"]
    B --> C{"已有DRB待遇匹配吗"}
    C -->|匹配| D["映射到现有DRB"]
    C -->|需单独伺候| E["RRC新建专用DRB"]
    D --> F["空口同一队列调度"]
    E --> G["空口独立队列调度"]

而这条映射线的维护,5G还藏了一个省信令的大招:反射QoS。传统做法里,终端的上行QoS规则必须由网络用专用信令一条条下发,规则多了既慢又繁琐。反射QoS反其道而行:网络在下行包上打一个“反射指示”(RQI)标记,终端收到后自己观察——这条下行包带着什么QFI、被映射到了哪个DRB——然后照葫芦画瓢,把同样的映射规则自学到上行方向。之后所有上行包自动按学来的规则处理,网络全程不再说话。

flowchart TD
    A["SMF开启反射模式"] --> B["下行包打RQI标记"]
    B --> C["终端收到带标记的包"]
    C --> D["读取头中QFI"]
    D --> E["自学上行映射规则"]
    E --> F["后续上行自行对号"]

一行标记替代一轮信令,这就是“让数据面替控制面打工”。

映射完成后,最后一关是基站调度器。它是所有承诺的最终兑现者:GBR流的保底速率每秒都要兑现,调度器为其保留配额;非GBR流靠剩余资源尽力而为,但整体受会话级聚合上限(AMBR)封顶,防止单个用户吃光小区。资源紧张时,ARP的“插队证”开始生效——能抢占的流可以踢走“可被抢占”的流,保证关键业务永远有座。可以说,前面四站所有纸面承诺,都要在这一毫秒一毫秒的调度裁决里还债。

现网连接:调试时这五站分别看什么

理解了流水线,很多“玄学问题”就有了定位坐标:

常见问题

Q: QoS流和4G的EPS承载到底差在哪? A: 4G的承载是端到端强绑定的管道,QoS参数焊死在管道上,5G把两者拆开:QoS流只存在于语义层,空口的DRB只是它的“临时座位”,映射关系随时可调。好处是核心网改待遇不必惊动空口,管道数量大幅减少。

Q: 5QI相同的两条流,会走完全相同的路径吗? A: 不一定。5QI只定义待遇标准(时延预算、丢包预算等),路径由PDR匹配、映射关系和调度器共同决定。两条5QI=9的流可能一条走默认DRB、一条走专用DRB,传输段DSCP标记也可能不同。

Q: 反射QoS和传统显式下发可以混用吗? A: 可以,而且现网常见。核心网对某些流用信令显式下发规则,对另一些流打反射标记让终端自学。同一条PDU会话里两种方式可以并存,终端分别维护。

Q: GBR流的保底速率是绝对保证吗? A: 只在准入时承诺。建立时网络核算过资源够用才放行,之后调度器每秒兑现;但切换到新小区时新基站可能资源不足,此时按ARP裁决——要么拒绝切换,要么降级为非GBR继续走。移动性让“绝对保证”天然打折。

Q: 为什么限速要用令牌桶而不是直接掐速率? A: 直接掐速率会消灭一切突发,网页首屏、视频起播这类脉冲式需求会被误伤。令牌桶用桶深容忍合理突发,同时用放令牌的速率卡住长期平均值,兼顾了体验和控制。

参考来源

  1. Quality of service - Wikipedia — DiffServ/DSCP标记体系与IntServ逐跳预约的架构取舍
  2. 5G NR QoS Architecture, QoS Attribute and QoS Flow - Techplayon — 4G承载一比一映射与5G QoS流两级模型的对比
  3. SDAP: QoS Flow to DRB Mapping & Reflective QoS - CafeTele — SDAP单字节头、RQI/RDI指示与反射QoS的映射算法
  4. Packet Forwarding Rules (PDR/FAR/QER/URR/BAR) - DeepWiki Open5GS — 开源5G核心网中规则体系的真实实现
  5. UPF - 5GC Textbook — UPF经N4接收规则、逐包执行转发的原理讲解

本文由「51学通信」技术团队出品。51学通信由通信行业18年老兵爱卫生(微信ID: gprshome201101)维护,聚焦5G/6G核心网、3GPP标准解读、通信前沿技术深度分析。 出版作品有《5G核心网原理与实践》《IMS原理与实践》等4本通信专业书籍。知识星球「51学通信」提供深度技术答疑和行业洞察。

[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。

51学通信知识星球海报-扫码加入