你可能在工程模式里见过「IMS Registration: Registered」这个状态,也可能在测试VoNR时遇到过「拨号后转圈三四秒才振铃」的问题。要理解这些现象,得先回答一个根本问题:
5G网络本质上是一张IP数据网,它天生「不知道」怎么打电话。
2G时代的电话走的是电路交换——通话前先给你俩划一条独占的物理线路,像铁路专线。而4G/5G是全IP网络,所有东西都变成数据包。语音不再是「专线」,而是「快递」:把声音切成一个个小包,扔进网络,对端再拼回来。
这带来一个看似简单实则棘手的问题:普通快递可以慢、可以丢、可以乱序,但通话不行。你听到的每个字,必须在对方说完后约100~200毫秒内、按正确顺序、连续地播出来,否则对话就「撞车」——两人同时开口、同时沉默。
5G打电话(VoNR)的全部技术设计,都是在回答一个问题:如何让一张「尽力而为」的IP网络,稳定地运送「分秒必争」的语音流?
VoNR最核心的架构思想,是把「打电话」拆成两件完全不同的事:
这两件事的流量特征天差地别:信令是偶发的小流量,一年也发不了几条;媒体是持续的小包洪流,每20毫秒准时来一包,一刻不能停。把它们分开设计、分开承载、分开扩容,网络才管得好。
flowchart LR
UE["主叫手机"]
subgraph NET["IMS核心网与5G承载"]
PC["P-CSCF"]
SC["S-CSCF"]
UPF["UPF用户面"]
end
UEB["被叫手机"]
UE -->|SIP信令走信令面| PC
PC -->|转发注册与呼叫| SC
SC -->|寻址被叫| UEB
UE -.->|RTP语音包走媒体面| UPF
UPF -.->|RTP语音包| UEB
上图实线是信令面,虚线是媒体面。注意一个关键事实:RTP语音包从手机出来后直接走用户面(基站→UPF→对端),完全不经过IMS信令节点。IMS只在通话前「谈事」,通话中它不碰声音本身。这就是为什么通话建立后,即使IMS信令轻微抖动,你也不会觉得声音变差;而一旦UPF或空口拥塞,声音立刻卡顿。
用一组简单计算就能看清语音流量「小而急」的本性。语音按20毫秒一包打包,以常用的宽带语音编码模式12.65 kbps为例:
$$\text{每包载荷} = 12.65\ \text{kbps} \times 20\ \text{ms} \approx 253\ \text{bit} \approx 32\ \text{字节}$$
一秒钟只需要50个包、总共约几十kbps——比一张微信图片还小。但每一包都必须在20毫秒的节拍上准时到达。带宽要求极低,时延要求极高,这个反差就是语音业务的灵魂,也是后面所有机制(专用QoS流、抖动缓冲、丢包隐藏)的出发点。
信令面用什么语言交谈?答案是SIP(会话发起协议)——一个从互联网VoIP世界借来的文本协议,风格上和HTTP很像:请求-响应、带头部、带正文。运营商没有另造一套协议,而是把SIP整个搬进来,再配上电信级的管理框架,这个框架就叫IMS(IP多媒体子系统)。
IMS的设计哲学很聪明:它不管你从哪个接入网来(4G、5G、Wi-Fi都可以),只管「会话」本身。这实现了接入与业务解耦——同一套IMS,4G时代支撑VoLTE,5G时代支撑VoNR,协议逻辑几乎不变,变的只是下面的「路」。
IMS里的几个核心角色,可以类比一家高级餐厅:
| IMS角色 | 类比 | 职责 |
|---|---|---|
| P-CSCF | 门卫兼安检 | 手机接入IMS遇到的第一个节点,所有SIP信令必经它;负责加密保护、压缩、异常检查 |
| I-CSCF | 前台总机 | 外来请求的入口,负责查「这个客人归哪位管家服务」 |
| S-CSCF | 专属管家 | 会话控制的核心,管理注册、路由、触发增值业务(呼叫转移等) |
| HSS | 档案室 | 存放用户签约数据、鉴权密钥,回答「这人是谁、有什么权限」 |
这套分工的「为什么」值得咀嚼:P-CSCF放在网络边缘,因为它是安全边界——手机和网络互不信任,所有信令先过安检;S-CSCF放在归属地,因为它执行你的签约业务逻辑(比如你开通了遇忙转移),业务跟着「户口」走;I-CSCF只是临时入口,注册完成后就不再参与,避免成为性能瓶颈。
手机开机附着到5G网络、拿到IP地址后,并不等于能打电话。它还要在应用层再完成一次IMS注册,向网络证明「这个IMS账号真的是我」。这一步和5G接入认证是相互独立的两套机制:接入认证管「你能不能上网」,IMS注册管「你能不能打电话」。
注册用的正是SIP的REGISTER方法,配合挑战-应答式鉴权,流程如下:
sequenceDiagram
participant UE as 手机
participant P as P-CSCF门卫
participant I as I-CSCF前台
participant S as S-CSCF管家
participant H as HSS档案室
UE->>P: REGISTER我想注册
P->>I: 转发REGISTER
I->>H: 这个用户归哪个管家管
H-->>I: 分配给S-CSCF
I->>S: 转发REGISTER
S->>H: 取用户鉴权数据
H-->>S: 返回鉴权向量
S-->>P: 401请出示验证材料
P-->>UE: 401请出示验证材料
Note over UE,P: 手机用卡内密钥计算鉴权响应
UE->>P: REGISTER附鉴权响应
P->>S: 转发REGISTER
S->>S: 比对响应是否正确
S-->>P: 200 OK注册成功
P-->>UE: 200 OK注册成功
两个设计细节值得注意:
注册成功后,按下拨号键,主叫发出SIP的INVITE请求。INVITE的正文里带一份SDP(会话描述协议)——它不携带声音,只描述「我打算怎么通话」:支持哪些编解码器(AMR-WB?EVS?)、采样模式、接收媒体流的IP和端口。
这就像点菜:主叫先报「我会做的菜式和口味」(SDP Offer),被叫回一份「就按这个来」(SDP Answer),双方才确定最终菜单——比如两端都支持EVS就优先用EVS,否则退到AMR-WB。这种「提议-应答」模型保证了能力互操作:不同年代、不同厂家的终端总能找到双方都会的编解码器。
完整呼叫过程中有一个容易忽略的精妙设计——资源预留发生在「摘机」之前:
sequenceDiagram
participant A as 主叫手机
participant N as IMS网络
participant B as 被叫手机
A->>N: INVITE携带SDP提供
N->>B: INVITE携带SDP提供
B-->>N: 183携带SDP应答
N-->>A: 183携带SDP应答
Note over A,N: 主叫侧开始建立语音专用通道
Note over N,B: 被叫侧同步预留资源
A->>N: PRACK临时应答确认
N->>B: PRACK临时应答确认
B-->>N: 180振铃
N-->>A: 180振铃
B->>N: 200 OK摘机接受
N->>A: 200 OK摘机接受
Note over A,N: 媒体面RTP语音包开始流动
A->>N: BYE挂机
N->>B: BYE挂机
B-->>N: 200 OK确认挂机
为什么要在振铃阶段就铺路?如果等被叫按下接听键才开始建立专用通道,接通瞬间第一句话就会「喂……喂?」地丢字。所以协议把顺序安排为:183响应确定媒体参数 → 两侧各自预留资源 → 180振铃 → 200 OK摘机时,路已经铺好,声音即刻畅通。你在听筒里听到的「回铃音」,正是这段谈判与铺路时间被用户体验感知的形态——拨号到振铃的间隔,就是呼叫建立时延,也是VoNR相对VoLTE的优势所在(5G空口时延更低,建立更快)。
媒体协商确定后,网络为这条通话建立专用QoS流:4G里对应会话语音等级的GBR承载(QCI=1),5G里对应5QI=1的GBR QoS流。它的本质是一条带宽被预留、转发被优先的通道——哪怕小区挤爆了,这几十kbps的语音流量也有「应急车道」可走,普通数据业务在旁边排队。
这里不做QoS机制展开(那值得单独一篇),只强调与语音直接相关的因果链:语音是等时节拍流 → 时延抖动直接毁体验 → 所以必须预留+优先,而不是靠带宽堆砌。这也解释了为什么语音QoS流很「小」——它保障的不是速率上限,而是每包的准时性。
媒体面用的协议是RTP(实时传输协议)。它非常薄,只做三件事:给每个包编序号、打时间戳、标明载荷类型(哪种种编解码)。接收端靠序号发现丢包、恢复顺序,靠时间戳还原20毫秒的播放节拍。配套的RTCP周期性互报「我收到了什么」——丢包率、抖动统计,通话质量监测数据就来自这里。
出于安全要求,IMS语音媒体通常以SRTP(加密的RTP)传输,所以用抓包工具直接看媒体流,往往只能看到加密载荷,排障要更多依赖RTCP统计和信令侧信息。
网络中的包到得忽快忽慢(抖动),而播放必须均匀。解法是在接收端放一个「蓄水池」——抖动缓冲:包先存起来,按节拍匀速放出。
这是一个典型的两难权衡:
$$T_{\text{单向总时延}} = T_{\text{编码打包}} + T_{\text{空口}} + T_{\text{承载传输}} + T_{\text{核心网处理}} + T_{\text{抖动缓冲}}$$
$$P_{\text{听感丢包}} \approx P_{\text{网络丢包}} + P_{\text{迟到丢弃}}$$
工程上通常采用自适应抖动缓冲:根据网络抖动统计动态伸缩,而不是固定值。国际电联的相关建议普遍把单向端到端时延约150毫秒作为良好通话质量的参考线——注意这是从嘴到耳的全链路预算,编解码、空口、传输、缓冲每一项都在分食这个额度。
数据业务丢包靠重传,语音却等不起——重传一次至少一个往返,包到了也已经错过播放时刻,迟到即失效。语音的对策是另辟蹊径:
| 因素 | 含义 | 主要来源 | 网络对策 | 工程经验参考 |
|---|---|---|---|---|
| 时延 | 单向嘴到耳的时间 | 编解码打包、空口调度、抖动缓冲 | 低时延调度、节点下沉、自适应缓冲 | 约150ms内体验良好(ITU-T建议常用参考值) |
| 抖动 | 包到达间隔的波动 | 路由差异、调度突发、拥塞 | 优先转发、抖动缓冲吸收 | 缓冲每增大一分,时延代价一分 |
| 丢包 | 包丢失或迟到被弃 | 拥塞、无线误块、切换中断 | PLC、冗余、自适应编码 | 1%量级尚可,5%以上明显卡顿(经验值) |
在5G建设初期,你可能观察到:手机显示5G信号,一打电话信号却变成4G。这不是故障,而是一个刻意的过渡设计——EPS Fallback(回落)。
原因回到第一性原理:VoNR需要5G SA(独立组网)网络加上NR侧完整的语音条件(终端支持、IMS互通、无线能力齐备),缺一不可。在条件不齐的地方,网络干脆把通话「让」给成熟的4G VoLTE去做:发起呼叫时把手机连接迁移(切换或重定向)到LTE,在4G上完成VoLTE通话。5G只承载数据,语音暂时借道4G——避免呼损,代价是回落动作本身增加了一两秒的呼叫建立时延。
flowchart TD
A["用户按下拨号键"] --> B{"IMS注册正常且网络支持VoNR"}
B -->|支持| C["在5G上完成INVITE协商"]
C --> D["建立专用语音QoS流"]
D --> E["通话全程驻留5G"]
B -->|不支持| F["触发EPS Fallback回落"]
F --> G["手机连接迁移到4G"]
G --> H["按VoLTE流程建立通话"]
三种语音方案放在一起对比,脉络就清晰了:
| 维度 | VoLTE | EPS Fallback | VoNR |
|---|---|---|---|
| 通话所在接入网 | 4G LTE | 发起时迁回4G | 5G NR |
| 核心网 | 4G核心(EPC) | 通话走4G路径 | 5G核心网 |
| IMS | 需要 | 需要(4G侧) | 需要(5G侧) |
| LTE锚点 | 本身就在4G | 依赖4G | 无LTE锚点,全程留在5G |
| 前提条件 | 4G覆盖 | 5G SA + 4G覆盖 | 5G SA全覆盖、终端与网络均支持 |
| 呼叫建立 | 较快 | 较慢(含回落动作) | 更快(空口时延更低) |
| 典型阶段 | 4G成熟期 | 5G建设初期过渡方案 | 5G SA成熟期目标形态 |
三者的信令「语言」完全一致——都是IMS上的SIP;变的只是下面的路。这正是IMS「接入与业务解耦」设计哲学的红利:运营商升级语音方案时,核心的会话控制资产得以保留。
第一步永远是确认IMS注册状态。手机侧可查工程模式(Android的Radio Info菜单里「IMS Registration: Registered」即注册成功);网络侧抓取Gm口信令看REGISTER是否走到200 OK。大量「打不出电话」工单的根因在这一步:USIM未开通IMS、续注册失败、P-CSCF地址获取异常。
第二步看SIP响应码定位阶段。呼叫失败的响应码会直接告诉你死在哪一环:
| 响应码 | 含义 | 排障提示 |
|---|---|---|
| 401 | 未授权挑战 | 注册正常流程的第一步,不是故障 |
| 403 | 禁止 | 鉴权失败或未签约,查卡状态与开户数据 |
| 183 | 会话进展(含SDP) | 媒体协商开始、资源预留起点 |
| 180 | 振铃 | 被叫已提醒,接通前最后一步 |
| 200 | OK | 成功(注册/摘机/挂机通用) |
| 486 | 忙或拒接 | 用户行为,非网络故障 |
| 488 | 媒体不可接受 | SDP编解码或参数不匹配,查两侧codec配置 |
| 5xx | 服务器错误 | 网络侧问题,查IMS节点日志 |
第三步看RTCP统计评估听感。丢包率、抖动、往返时延三个指标对照上节表格定位问题方向:抖动大查传输路径与缓冲配置;丢包多查无线质量与切换带;时延超标则逐项分解时延预算。
几个常见的调试陷阱:
Q: VoNR和VoLTE的区别到底是什么? A: 差别在「路」,不在「话」。两者都用IMS做会话控制、都用SIP+RTP,协议逻辑基本相同;区别是VoLTE跑在4G空口+4G核心上,VoNR跑在5G空口+5G核心上,且VoNR没有LTE锚点、通话全程留在5G,因此呼叫建立更快、端到端时延更低。VoNR要求5G SA组网,NSA组网无法承载。
Q: 手机显示IMS已注册,为什么打电话还是回落4G? A: 注册只证明「信令通道就绪」,发起通话时网络还要评估NR覆盖质量、终端VoNR能力、IMS与无线侧的功能开通状态等。任何一项不满足就触发EPS Fallback。所以排查时要把「注册域」和「通话决策域」分开看。
Q: 语音丢包为什么不用重传解决? A: 实时语音的生命周期只有20毫秒一拍,重传至少耗费一个往返时延,包补回来时播放时刻早已过去。所以语音网络用丢包隐藏(PLC)、冗余打包、自适应编码来「掩饰」丢包,而不是消除丢包——这是实时业务与数据业务在可靠性哲学上的根本分野。
Q: VoNR通话时,5G上网会中断吗? A: 不会。VoNR的语音走独立的专用QoS流,与数据业务并发传输。这正是全IP架构相对于2G/3G电路交换「打电话不能上网」的代际进步;专用流只保障语音的几十kbps,上网速率基本不受影响。
Q: SIP和HTTP这么像,为什么不干脆用HTTP? A: 两者都是文本请求-响应协议,但SIP面向的是「会话」——建立、修改、终结一段持续的关系(通话),而不是一次性的内容获取。SIP的INVITE可以携带SDP去协商、可以用UPDATE在会话中途修改参数、可以由任一方发起BYE终结,这些「对等、长时、可变」的语义是HTTP这类「客户端拉取」模型不天然具备的。
本文由「51学通信」技术团队出品。51学通信由通信行业18年老兵爱卫生(微信ID: gprshome201101)维护,聚焦5G/6G核心网、3GPP标准解读、通信前沿技术深度分析。 出版作品有《5G核心网原理与实践》《IMS原理与实践》等4本通信专业书籍。知识星球「51学通信」提供深度技术答疑和行业洞察。