VoNR/VoLTE 的语音承载并不像普通上网流量那样"尽力而为"。一段 EVS 或 AMR-WB 语音媒体一旦建立,必须在 NG-RAN 与 5G 核心网之间获得一条 GBR(Guaranteed Bit Rate)保证比特率的专用 QoS 流——5G 中对应 5QI=1(会话语音,PDB 100ms,PER 1e-2,GBR)。问题是:SIP 信令面只描述"想用什么编解码、多大带宽、哪个 RTP 端口",并不知道无线侧应该建多少条 QoS 流、用什么 5QI/ARP。SIP 与 5G QoS 之间,需要一个"翻译官"。
这个翻译官就是 Rx 接口(4G 称 Rx,5G 称 N5),它把 P-CSCF(作为 Application Function,AF)从 SDP 中解析出的媒体描述,翻译成 PCF 能够理解的、可被绑定到具体 QoS 流的授权请求。PCF 再通过 N7(Npcf_SMPolicyControl)把 PCC 规则下发给 SMF,SMF 才会触发 NG-RAN 建立/修改专用 QoS 流。
设计意图有三层:
Flow-Status 开关媒体流,实现精细的承载管控。Rx/N5 的完整定义见 3GPP TS 29.214(Policy and charging control over Rx reference point) 与 TS 29.514(Policy Authorization Service,即 SBI 版的 Npcf_PolicyAuthorization),PCC 框架总则见 TS 23.503。
一个常见误区是认为"5G 已经全 SBI 化,Rx 接口被淘汰了"。事实并非如此。Rel-18 中 TS 29.214 依然有效,大量现网 P-CSCF/SBC 仍只支持 Diameter;PCF 则同时提供两副面孔:
| 维度 | Rx(Diameter) | N5(SBI / Npcf_PolicyAuthorization) |
|---|---|---|
| 协议 | Diameter (RFC 6733),基于 TCP/SCTP | HTTP/2 + JSON,RESTful |
| 定义规范 | TS 29.214 | TS 29.514 |
| 命令族 | AAR/AAA、RAR/RAA、STR/STA、ASR/ASA | AppSessionContext 资源(POST/PUT/DELETE)、事件订阅 |
| 典型消息承载 | 分组的 AVP 树 | JSON body |
| 现网主力 | 绝大多数 VoNR/VoLTE P-CSCF | 云原生 PCF、AF(如 VoLTE AF、应用服务器)间互通 |
| 典型结果码 | Result-Code 2001/4xxx | HTTP 201/200/4xx |
多数运营商在 5G 部署初期让 PCF 同时支持 Diameter Rx 与 SBI Npcf_PolicyAuthorization,以兼容既有 P-CSCF(参考 Cisco UCC PCF、Open5GS 的 N5/Rx 双栈实现)。下文以 Diameter Rx 为主线拆解,N5 的语义完全对应。
下图以"被叫摘机后确认最终 SDP"的经典 VoNR 主叫为例,聚焦 P-CSCF↔PCF 的 Rx 交互(含 N7 侧联动):
sequenceDiagram
autonumber
participant UE
participant PCSCF as P-CSCF (AF)
participant PCF
participant SMF
participant UE_RAN as UE/gNB/UPF
UE->>PCSCF: SIP INVITE (SDP offer, EVS)
Note over PCSCF: 解析SDP→媒体组件<br/>但尚未拿到Answer
PCSCF->>PCF: AAR (Service-Info-Status=PRELIMINARY)<br/>含 Media-Component-Description
PCF->>SMF: N7: 提供PCC规则 (5QI=1, GBR, ARP)<br/>Npcf_SMPolicyControl Update
SMF->>UE_RAN: N11/N2/N4: 建立专用QoS流(QFI=1)
PCF-->>PCSCF: AAA (授权成功, 已绑定)
PCSCF-->>UE: 100 Trying
Note over UE,PCSCF: ... 183/PRACK/UPDATE 协商编解码 ...
UE->>PCSCF: 200 OK (SDP answer, 最终编解码=AMR-WB)
PCSCF->>PCF: AAR (Service-Info-Status=FINAL)<br/>确认最终媒体参数
PCF->>SMF: N7: 更新PCC规则(MBR/GBR)
PCF-->>PCSCF: AAA
PCSCF-->>UE: ACK
Note over UE,UE_RAN: 通话进行中...;挂起/恢复→再发AAR
UE->>PCSCF: SIP BYE
PCSCF->>PCF: STR (Session-Termination-Request)
PCF->>SMF: N7: 删除PCC规则,释放GBR QoS流
PCF-->>PCSCF: STA
关键看点:一次呼叫通常产生 2~3 次 AAR。第一次在收到 SDP offer 时(PRELIMINARY,做"预授权"并触发专用 QoS 流建立),第二次在收到 200 OK 携带最终 SDP answer 时(FINAL,把 GBR/MBR 收敛到实际协商值),呼叫中途挂起/恢复或编解码切换时还会有修改型 AAR。这是排错时最容易判错的点——"为什么我的呼叫开了好几个 AAR"。
AAR(AA-Request,Diameter 命令码 265)的核心是一个嵌套的 AVP 树。最外层是会话级 AVP,内层通过 Media-Component-Description(分组型)描述每一个媒体流(音频、视频、消息等)。其结构见下图:
flowchart TD
A[AAR 会话级 AVP] --> B1[Subscription-Id<br/>IMSI / MSISDN]
A --> B2[AF-Application-Identifier<br/>如 'IMS']
A --> B3[Service-Info-Status<br/>0=FINAL / 1=PRELIMINARY]
A --> B4[Specific-Action<br/>订阅承载丢失/恢复事件]
A --> B5[SIP-Forking-Indication<br/>单/多分支]
A --> B6[Called-Station-Id]
A --> MC[Media-Component-Description ★分组]
MC --> C1[Media-Component-Number]
MC --> C2[Media-Type<br/>AUDIO/VIDEO...]
MC --> C3[Max-Requested-BW-UL/DL]
MC --> C4[AF-Application-Identifier]
MC --> C5[Flow-Status<br/>ENABLED/DISABLED]
MC --> C6[Media-Sub-Component ★分组]
C6 --> D1[Flow-Number]
C6 --> D2[Flow-Description<br/>5元组过滤规则]
C6 --> D3[Codec-Data]
C6 --> D4[Flow-Usage<br/>RTP/RTCP]
style MC fill:#e8f5e9
style C6 fill:#fff3e0
下表对照说明每个关键 AVP 的取值与作用(依据 TS 29.214 第 5 章):
| AVP | 含义 | 典型取值 / 说明 |
|---|---|---|
Subscription-Id |
用户标识 | ENDPOINT_IDENTIFICATION=END_USER_IMSI/MSISDN,PCF 据此查找用户签约 |
AF-Application-Identifier |
业务类型 | IMS,PCF 据此匹配 PCC 规则模板(区别于其他 AF 业务) |
Service-Info-Status |
SDP 完备性 | FINAL_SERVICE_INFORMATION(0) / PRELIMINARY_SERVICE_INFORMATION(1),决定是否最终提交资源 |
Specific-Action |
事件订阅 | CHARGING_CORRELATION_EXCHANGE、INDICATION_OF_LOSS_OF_BEARER、RECOVERY_OF_BEARER、IP_CAN_CHANGE |
Media-Component-Description |
媒体组件 | 每个媒体(m=audio/m=video)一条 |
Media-Type |
媒体类别 | AUDIO/VIDEO/AUDIO+VIDEO,影响 5QI 选择 |
Max-Requested-Bandwidth-UL/DL |
请求带宽 | 由 SDP b=AS/b=RR/b=RS 换算,单位 bps |
Flow-Description |
流过滤规则 | permit in IP 协议 17 源/目的 IP:端口(即 SDF 过滤器) |
Flow-Status |
门控状态 | ENABLED/DISABLED/REMOVED/ENABLED-DOWNLINK |
Codec-Data |
编解码信息 | SDP 中 a=rtpmap/a=fmtp 原文,含 payload type |
Flow-Usage |
流用途 | RTP/RTCP,用于区分媒体与控制流 |
SIP-Forking-Indication |
分叉指示 | SINGLE_DIALOG/SEVERAL_DIALOGS |
设计精妙处:Flow-Description 把"哪条 IP 五元组流属于这个媒体"明确告诉 PCF,PCF 据此生成 SDF(Service Data Flow)过滤器绑定到具体 QoS Flow。这就是为什么 gNB 上只对 RTP 流量保证 GBR、而对 SIP 信令(走默认 QoS 流 5QI=5)不保证——两者过滤器不同,绑定到不同 QFI。
把 SDP 翻译成 5G QoS 流是一条贯穿多协议的"绑定链路":
flowchart TD
S1["SDP<br/>m=audio 5004 RTP<br/>a=rtpmap EVS"] --> S2["P-CSCF 解析"]
S2 --> S3["AAR: Media-Component +<br/>Flow-Description(permit ...:5004)"]
S3 --> S4["PCF 授权: 5QI=1, GBR, ARP<br/>生成PCC规则 + QoS规则"]
S4 --> S5["N7→SMF: 安装QoS规则<br/>绑定QFI=1"]
S5 --> S6["SMF→gNB: PDU Session<br/>Resource Setup (QFI=1)"]
S6 --> S7["专用GBR QoS流建立<br/>仅RTP流量享受保证"]
这条链路的"粘合剂"是 Flow-Description 生成的 SDF 过滤器。当 RTP 包到达 UPF 时,UPF 根据 N4 规则匹配到该过滤器,将其映射到 QFI=1 的专用 QoS 流,享受 GBR;而非 RTP 流量则落到默认 QoS 流。这种"按应用层五元组精细化绑定"正是 PCC 架构的灵魂,定义见 TS 23.503 第 6 章(Binding Mechanism) 与 TS 29.512(Npcf_SMPolicyControl)。
Service-Info-Status 是 Rx 授权最容易踩坑的 AVP。它取决于 IMS 采用早期 Offer(Early Offer)还是延迟 Offer(Delayed Offer)模型:
PRELIMINARY,让 PCF 做"预授权"并先把专用 QoS 流建起来(按 offer 中的最大带宽)。等收到 200 OK 的 answer 后,再发 FINAL 的 AAR 收敛参数。FINAL。为什么需要 PRELIMINARY:移动承载建立耗时(gNB 调度、空口资源),如果等 SDP answer 完整协商完再建承载,会显著拉长呼叫建立时延。运营商普遍偏好早期 Offer + PRELIMINARY 预授权,以预建承载、降低接通时延。Cisco PCF 的实现即明确:AAR message having Service-Info-Status AVP set to PRELIMINARY 时仅做媒体组件级授权,不最终提交(参考 Cisco UCC PCF 配置指南)。
整个 Rx 会话的状态流转如下(对应 AAA/STR/RAR/ASR 的触发点):
stateDiagram-v2
[*] --> 无会话: P-CSCF 收到 INVITE 前
无会话 --> 预授权: AAR(PRELIMINARY) / AAA成功
预授权 --> 已授权: AAR(FINAL) / AAA成功<br/>专用QoS流已建
已授权 --> 修改中: AAR(挂起/恢复/编解码切换)
修改中 --> 已授权: AAA成功
已授权 --> 承载告警: PCF发RAR/ASR<br/>(承载丢失)
承载告警 --> 已授权: 承载恢复(RAR)
承载告警 --> 终止: SIP BYE→STR
已授权 --> 终止: SIP BYE→STR/STA
终止 --> [*]: 释放GBR QoS流
注意 PCF 也能主动发起消息(不是只有 P-CSCF→PCF 单向):
- RAR/RAA(Re-Auth,258):PCF 触发 P-CSCF 重新授权,常用于策略变更或承载恢复通知。
- ASR/ASA(Abort-Session,274):当承载不可恢复(如无线丢失、QoS 流被抢占释放),PCF 主动要求 P-CSCF 终止会话,P-CSCF 进而释放 SIP 对话。这是"承载丢失→呼叫掉话"的控制通路,与 P-CSCF 在 AAR 中订阅的 INDICATION_OF_LOSS_OF_BEARER/RECOVERY_OF_BEARER 配套。
挂起/恢复(Hold/Resume):用户按静音/保持,UE 发 re-INVITE 或 UPDATE,SDP 中 a=sendonly/a=sendrecv 变化,方向变了但媒体流五元组通常不变。P-CSCF 检测到方向变化,发修改型 AAR,PCF 据此调整门控(如把下行 Flow-Status 改为 DISABLED),但 GBR QoS 流不释放,保证恢复时无重建时延。
SIP 分叉(Forking):一次 INVITE 被分叉到多个分支,可能同时振铃。SIP-Forking-Indication=SEVERAL_DIALOGS 告诉 PCF 存在多个媒体分支,PCF 需要为每个分支分别绑定资源并在最终选定分支后释放其余分支的授权,避免资源泄漏。
RTCP:媒体子组件中通常包含两条流——RTP(Flow-Usage=RTP,承载语音)和 RTCP(Flow-Usage=RTCP,承载控制反馈)。启用 RTP/RTCP 复用(RFC 5761)时,端口相同,仅一条 Flow-Description;否则需要两条过滤规则。这是抓包时常见的"一个媒体组件却绑定了两个 Flow-Number"的原因。
1. 抓包识别要点:在 P-CSCF 与 PCF 之间抓包(Diameter 走 TCP 3868 或 SCTP 3868),过滤 diameter.cmd.code == 265(AAR/AAA)。一个正常 VoNR 主叫应在 INVITE 后数毫秒内看到第一条 AAR,且 Result-Code=2001(DIAMETER_SUCCESS)。若 5G 纯 SBI 部署,则过滤 HTTP/2 :path 含 /npcf-policyauthorization/v1/app-sessions。
2. 常见故障与排错思路:
| 现象 | 可能原因 | 排错方向 |
|---|---|---|
AAR 返回 Result-Code=4030/4031(用户未知/未签约) |
Subscription-Id 错误或签约数据缺失 | 核对 IMSI/MSISDN、PCF 侧用户策略数据 |
AAR 返回 5031(QoS 超出签约最大值) |
请求带宽 > 签约授权上限 | 检查 Max-Requested-Bandwidth、PCF 策略上限 |
| 专用 QoS 流未建立、语音断续 | AAR 发了但 N7 未下发 PCC 规则;或 PRELIMINARY 后缺 FINAL |
跨段核对 PCF→SMF N7、SMF→gNB N2 |
| 呼叫建立慢、INVITE 重传 | 早期 Offer 但 P-CSCF 未发 PRELIMINARY 预建承载 | 核对 Service-Info-Status 取值与计时器 |
| 通话中掉话 | 承载丢失触发 ASR | 查 ASR/ASA、空口 RF 质量、ARP 抢占 |
| 挂起后无法恢复 | 修改型 AAR 门控未正确翻转 | 查 Flow-Status 在 Hold/Resume 前后变化 |
| 抓包看到多个 Flow-Number | RTCP 单独占一个流 | 属正常,核对 RTP/RTCP 过滤规则 |
Service-Info-Status=PRELIMINARY 的媒体组件级授权,且对 Diameter Rx 与 SBI N5 双栈(参考 Cisco UCC 5G PCF 配置指南 Rel 2025.01)。回头看整个机制,一个值得深思的设计是:为什么不让 P-CSCF 直接告诉 SMF 建承载? 答案在于"策略的归策略、会话的归会话"。P-CSCF 只懂业务(这个媒体值多少带宽),不懂用户的套餐、欠费、漫游地策略;SMF 只懂承载(建 QoS 流),不懂业务语义。PCF 居中,把"业务需求 + 签约策略 + 网络状态"三者融合,输出统一的 PCC 规则。这种分层使 VoNR、VoLTE、URLLC、IMS 视频乃至第三方 AF 业务(如游戏、直播低时延)都能复用同一套 QoS 授权框架,是 5G PCC 架构得以横向扩展的根本。
代价是多一跳、多一点时延与故障域——AAR→N7→N2 的任何一环失败都会影响呼叫。理解这条链路的每一跳,是定位"为什么我的 VoNR 呼叫建不起来"的关键。
Q1:Rx 和 N5 是同一个接口吗?为什么现网两个名字都在用? A:语义上是同一个参考点(AF↔PCF)。Rx 是 4G/5G 通用名(TS 29.214,Diameter),N5 是 5G SBA 命名(TS 29.514,HTTP/2 SBI Npcf_PolicyAuthorization)。现网为兼容老 P-CSCF,PCF 常同时支持 Diameter Rx 与 SBI N5,二者消息族一一对应。
Q2:一次 VoNR 呼叫为什么有多个 AAR?是不是异常?
A:通常正常。主叫一般在 INVITE(SDP offer)时发 PRELIMINARY 的 AAR 预授权并预建专用 QoS 流,在 200 OK(最终 SDP answer)时发 FINAL 的 AAR 收敛 GBR/MBR;中途挂起/恢复/编解码切换还会触发修改型 AAR。只有当 AAA 一直不成功或反复重发才需排查。
Q3:语音媒体为什么是 5QI=1,SIP 信令却是 5QI=5? A:5QI=1 是会话语音 GBR QoS(PDB 100ms、保证比特率),由 Rx/N5 授权并通过 N7 安装的 PCC 规则绑定到专用 QoS 流;SIP 信令不需要 GBR,走默认 QoS 流 5QI=5(信令交互,非 GBR)。两者通过 Flow-Description 的 SDF 过滤器分流到不同 QFI。
Q4:Service-Info-Status 设成 PRELIMINARY 和 FINAL,对承载有什么实际区别?
A:PRELIMINARY(值 1)表示 SDP 尚未最终确定,PCF 仅做媒体组件级预授权、可先触发承载建立以降低时延,但通常不最终确认计费/资源提交;FINAL(值 0)表示 SDP 完备,PCF 据此最终确定 PCC 规则、收敛带宽并确认资源提交。早期 Offer 模型下二者配合使用。
Q5:通话中突然掉话,怎么看是不是 Rx 侧的问题? A:先看是否出现 ASR(Abort-Session,274)——若 PCF 主动向 P-CSCF 发 ASR,说明承载不可恢复(无线丢失/QoS 流被抢占),P-CSCF 据此释放 SIP 对话导致掉话。此时需进一步排查空口 RF 质量、ARP 抢占策略、gNB 资源;若没有 ASR,则掉话可能源于 SIP/BYE 或无线链路失败,与 Rx 关系不大。
Service-Info-Status=PRELIMINARY 的媒体组件级授权实现本文由「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 等场景全覆盖。
