VoNR(Voice over NR)语音接续的起点并非SIP INVITE,而是发生在其之前的IMS注册(IMS Registration)。一通VoNR呼叫要建立专用承载、协商EVS编解码、触发MMTel补充业务,前提是用户已经在归属IMS域完成注册——即UE获得了一个有效的IMPI/IMPU绑定关系、S-CSCF已下载并激活了用户的初始过滤规则(iFC)、UE与P-CSCF之间建立了IPSec安全联盟(SA)。本文以3GPP TS 23.228 第5.3.2.2节定义的注册流程为主线,结合TS 33.203(IMS安全架构)、TS 29.229(Cx接口)、TS 23.501/23.502(5G下P-CSCF发现)和RFC 3310/RFC 3329,对注册全链信令逐消息、逐IE拆解,并给出抓包识别与排错要点。
IMS注册要同时完成四件事,缺一不可:
与4G VoLTE相比,5G VoNR在注册前的P-CSCF发现路径发生变化(从PDN PCO变为PDU Session的SMF下发),但其后的SIP/IMS-AKA/IPSec机制基本沿用R8以来成熟的设计。下面按时间顺序逐层展开。
IMS注册必须先知道P-CSCF地址。在5G系统中(TS 23.501 / TS 23.502),P-CSCF发现与IMS PDU会话建立强绑定,典型路径如下:
sequenceDiagram
participant UE
participant SMF
participant PCF
participant UDR
participant P-CSCF
UE->>SMF: PDU Session Establishment Request (DNN=IMS, S-NSSAI=IMS切片)
SMF->>PCF: Npcf_SMPolicyControl_Create (N7) 建立SM策略关联
PCF->>UDR: 查询IMS签约/策略数据(含P-CSCF地址列表)
UDR-->>PCF: 返回P-CSCF地址列表
PCF-->>SMF: N7响应(携带P-CSCF地址列表)
SMF-->>UE: PDU Session Establishment Accept (PCO/ePCO携带P-CSCF地址)
Note over UE,P-CSCF: UE获得P-CSCF地址,后续SIP REGISTER发往该地址
关键设计点:
0x000C(P-CSCF IPv4/IPv6地址请求),这是TS 24.008/TS 24.501延续多年的经典参数。排错提示:若UE始终发不出REGISTER,第一件事不是看SIP层,而是查这条IMS DNN的PDU会话是否建立成功、PCO里有没有带回P-CSCF地址。SMF未配置IMS DNN、PCF无IMS策略、或N7关联失败,都会导致PCO空缺。
整个注册流程在逻辑上分为三个阶段:未认证注册与S-CSCF选择 → IMS-AKA挑战与双向认证 → 服务器分配与用户档案下发。下图为完整时序(Gm: UE↔P-CSCF;Mw: CSCF之间;Cx: S-CSCF/I-CSCF↔HSS,Diameter)。
sequenceDiagram
autonumber
participant UE
participant P as P-CSCF
participant I as I-CSCF
participant S as S-CSCF
participant H as HSS
rect rgb(245,245,245)
Note over UE,H: 阶段一:未认证注册 + S-CSCF选择
UE->>P: REGISTER (无Authorization,含Security-Client、Contact、Expires)
P->>I: REGISTER (转发,记录UE的IP/端口)
I->>H: Cx-UAR (User-Authorization-Request, IMPI, visited-network)
H-->>I: Cx-UAA (返回S-CSCF能力集 或 已分配的S-CSCF name)
I->>S: REGISTER (转发到选定的S-CSCF)
end
rect rgb(235,242,255)
Note over UE,H: 阶段二:IMS-AKA挑战与认证
S->>H: Cx-MAR (Multimedia-Auth-Request, 申请认证向量)
H-->>S: Cx-MAA (RAND,AUTN,XRES,CK,IK)
S-->>I: 401 Unauthorized (WWW-Authenticate: nonce,algorithm=AKAv2-MD5)
I-->>P: 401 Unauthorized
P-->>UE: 401 Unauthorized (含Security-Server)
Note over UE,P: UE/P-CSCF据此建立IPSec ESP SA
UE->>P: REGISTER (经SA保护,含Authorization response、Security-Verify)
P->>I: REGISTER (转发,已保护)
I->>S: REGISTER (转发,已保护)
S->>S: 校验 response vs XRES
end
rect rgb(240,250,240)
Note over UE,H: 阶段三:服务器分配 + iFC下载
S->>H: Cx-SAR (Server-Assignment-Request, Server-Assignment-Type=注册)
H-->>S: Cx-SAA (用户档案: iFC/IMPU集/计费信息, 记录S-CSCF name)
S-->>I: 200 OK
I-->>P: 200 OK
P-->>UE: 200 OK (注册成功, Contact expires)
end
第①条 REGISTER(UE→P-CSCF,未认证、未保护):
| IE | 说明 |
|---|---|
Request-URI |
注册域,如sip:ims.mnc<MNC>.mcc<MCC>.3gppnetwork.org |
To / From |
均为用户的公共用户身份IMPU(如sip:[email protected]...) |
Authorization(首条无) |
首次注册不带response,但可携带username=IMPI、realm、uri,提示挑战范围 |
Security-Client |
UE声明的安全机制与参数(详见第五节),如ipsec-3gpp;alg=hmac-sha-1-96;spi-c=...;port_c=...;port_us=... |
Contact |
UE的注册联系地址,含+sip.instance(实例ID,对应GRUU)与expires |
Require / Proxy-Require |
sec-agree,强制走RFC 3329安全协商 |
Via |
UE侧的分支,含rport(让P-CSCF学习UE的NAT地址/端口) |
第③条 Cx-UAR / 第④条 Cx-UAA(Diameter,I-CSCF↔HSS):I-CSCF用User-Authorization-Request(Command Code 300)问HSS"该把这个人路由给哪个S-CSCF"。HSS在User-Authorization-Answer中回送Server-Name(已分配)或Server-Capability能力集(含Mandatory/Optional Capability整数位图),I-CSCF据此按能力匹配选一个S-CSCF。
第⑤条 Cx-MAR / 第⑥条 Cx-MAA(S-CSCF↔HSS):S-CSCF用Multimedia-Auth-Request(Command Code 303)向HSS申请认证向量AV。MAA回送一个或一组AV,每组含RAND(128bit随机挑战)、AUTN(128bit认证令牌,内含MAC、SQN、AMF)、XRES(期望响应)、CK(加密密钥)、IK(完整性密钥)。这正是IMS-AKA的"料"。
第⑦条 401 Unauthorized(S-CSCF→UE):核心是WWW-Authenticate头:
WWW-Authenticate: Digest realm="ims.mnc<MNC>.mcc<MCC>.3gppnetwork.org",
nonce="<base64(RAND||AUTN||server-specific-data)>",
algorithm=AKAv2-MD5,
qop="auth-int",
opaque="<...>"
第⑨条 REGISTER(UE→P-CSCF,已保护、含response):UE的ISIM校验AUTN通过后,用RES推算出Digest响应:
Authorization: Digest username="<IMPI>", realm="...",
nonce="<同上>", uri="sip:ims...",
response="<MD5(A1:nonce:nc:cnonce:qop:H(entity-body))>",
algorithm=AKAv2-MD5, cnonce="<...>", nc=00000001,
qop=auth-int
S-CSCF收到后用XRES重算并比对response,一致则认证通过。同时,因qop=auth-int,摘要覆盖了消息体(entity-body),可有效防止SDP被篡改。
认证通过后,S-CSCF发Cx-SAR(Command Code 301,Server-Assignment-Type=NAME_NOT_PROVISIONED表示首次注册),HSS在Cx-SAA中回送完整用户档案,并在数据库中把"S-CSCF name"绑定到该用户(供后续被叫寻址LIR/LIA用)。SAA中的核心是iFC——它是一组带优先级的触发规则,决定哪些SIP请求被转发到哪个AS(如MMTel AS、SMS-over-IP AS、彩铃AS)。
IMS-AKA的本质是:用3GPP AKA的强双向认证能力,套在HTTP Digest(RFC 2617)的语法外壳里,复用SIP已有的401/Authorization机制。
P-CSCF/S-CSCF发出的nonce并非纯随机串,而是按RFC 3310定义的base64编码结构:
graph LR
A["nonce (base64解码后)"] --> B["RAND<br/>16字节<br/>HSS生成的随机挑战"]
A --> C["AUTN<br/>16字节<br/>含MAC⊕SQN⊕AMF"]
A --> D["server-specific data<br/>可变<br/>可选时间戳/索引"]
A --> E["可选MAC<br/>对前面字段的完整性保护"]
style B fill:#fff3cd
style C fill:#fff3cd
style D fill:#d1ecf1
style E fill:#d4edda
UE解码出RAND/AUTN后:①用共享密钥K验证AUTN中的MAC与SQN是否正确且新鲜(防重放);②用K和RAND算出RES、CK、IK;③把RES(或AKAv2下的RES‖IK‖CK)当作Digest的"口令"计算响应。这样,网络的挑战(RAND/AUTN)和UE的应答(RES)天然构成了双向认证:UE通过AUTN验网络、网络通过RES验UE。
设口令P:AKAv1-MD5下 P=RES;AKAv2-MD5下 P=RES‖IK‖CK。则:
A1 = H( username ":" realm ":" P )
request-digest(qop=auth-int) = H( A1 ":" nonce ":" nc ":" cnonce ":" qop ":" H(entity-body) )
H()为MD5(algorithm字段后缀决定)。网络侧用XRES(与RES同值)以同样公式计算并比对response。
若USIM检测到SQN超出有效窗口(如HSS/UE计数器严重错位),UE会拒绝该AUTN,并在新REGISTER的Authorization里回送auts参数(携带UE侧SQN)。S-CSCF据此发起新一轮MAR携带AUTS,触发HSS再同步(re-synchronization)(TS 33.102),把SQN_MS回填,重新下发可用AV。这是抓包中"反复401"的常见根因。
Gm接口(UE↔P-CSCF)是接入网到IMS核心的信任边界。TS 33.203要求用IPSec ESP隧道模式保护这段信令,并通过RFC 3329的Security Mechanism Agreement完成机制协商。三个专用SIP头协同工作:
| SIP头 | 方向 | 出现时机 | 作用 |
|---|---|---|---|
Security-Client |
UE→网络 | 首条未保护REGISTER | 声明UE支持的安全机制、SPI、算法、端口 |
Security-Server |
网络→UE | 401响应 | 网络选定机制、下发SPI、算法、P-CSCF端口 |
Security-Verify |
UE→网络 | 后续已保护消息 | 回显Security-Server值,防降级攻击 |
graph TB
subgraph UE侧["UE侧 (IPSec SA: client pair)"]
U1["SPI_C_UE<br/>(出方向加密/完整性)"]
U2["SPI_S_UE<br/>(入方向)"]
U3["port_uc / port_us<br/>受保护端口"]
end
subgraph P侧["P-CSCF侧 (IPSec SA: server pair)"]
P1["SPI_C_P<br/>(入方向, 与UE出方向配对)"]
P2["SPI_S_P<br/>(出方向, 与UE入方向配对)"]
P3["port_pc / port_ps<br/>受保护端口"]
end
U1 -.配对.- P1
P2 -.配对.- U2
style U3 fill:#d4edda
style P3 fill:#d4edda
SA参数协商要点:
port_uc/port_us(UE)与port_pc/port_ps(P-CSCF)区分受保护信令流。后续所有SIP信令(含注册成功后的INVITE)都必须走这些受保护端口。hmac-sha-1-96,RFC 2404),机密性算法集(如aes-cbc,RFC 3602,或null)。早期IMS常允许"无加密+仅完整性",但运营商策略多强制启用加密。CK,完整性密钥来自IK,再经TS 33.203定义的推演生成实际的ESP SA密钥。Security-Verify的防降级意义:UE在受保护REGISTER中逐字回显网络在401里选定的Security-Server内容。P-CSCF核对一致才接受——攻击者若试图把强机制降级为弱机制(bidding-down),UE回显的值就会与网络真实选择不符而被拒。设计逻辑:为什么不用TLS而用IPSec?——因为Gm要保护的不止SIP,还包括UE与P-CSCF间所有IMS信令流的机密性与完整性,且需在注册阶段(尚无上层会话)就建立端到端(UE↔P-CSCF)保护,IPSec ESP能以端口粒度精准选流,且天然承载AKA派生的CK/IK。
| 消息/IE | 含义 | 异常影响 |
|---|---|---|
Request-URI/To/From |
注册域与IMPU | IMPU拼写错误→403 |
Authorization.username |
IMPI(私有身份) | 与USIM不匹配→认证失败 |
Expires |
注册有效期(常3600s) | 过小触发频繁刷新;为0表示注销 |
Contact;+sip.instance |
设备实例ID,支撑GRUU | 缺失影响后续被叫按设备寻址 |
WWW-Authenticate.nonce |
base64(RAND‖AUTN…) | base64解码后不足32字节→格式错误 |
WWW-Authenticate.algorithm |
AKAv1-MD5 / AKAv2-MD5 | UE与网络不一致→拒绝 |
WWW-Authenticate.qop |
auth-int(含体完整性) | UE不支持→协商失败 |
Security-Server |
选定机制/SPI/端口 | SPI或端口与UE不匹配→SA建不起来 |
Security-Verify |
回显防降级 | 与Security-Server不一致→丢包 |
| Cx-SAR Server-Assignment-Type | 注册/再注册/注销 | 取值错误→用户档案不下发 |
| 维度 | MD5(共享密钥) | AKAv1-MD5 | AKAv2-MD5 |
|---|---|---|---|
| 口令来源 | 静态共享密钥 | AKA的RES | RES ‖ IK ‖ CK |
| 密钥派生 | 无 | 仅RES进Digest | CK/IK绑定进Digest |
| 双向认证 | 弱(仅单向) | 强(AUTN双向) | 强(AUTN双向) |
| SA密钥绑定 | 无 | CK/IK用于ESP,但与Digest弱关联 | Digest与SA密钥强绑定 |
| 典型场景 | 早期/测试 | Rel-7及以前主流 | Rel-12+、NASS-IMS、新部署首选 |
AKAv2的演进动机:AKAv1虽然用上了AKA,但CK/IK只用于ESP、没进Digest,导致"Digest成功"与"SA密钥正确"之间缺少密码学绑定。AKAv2把RES‖IK‖CK一起作为Digest口令,使认证与密钥一致,并利于NASS-IMS等捆绑认证场景。
stateDiagram-v2
[*] --> NOT_REGISTERED: 开机/未注册
NOT_REGISTERED --> AUTH_PENDING: 发出首条REGISTER(含Security-Client)
AUTH_PENDING --> SA_PROVISIONAL: 收到401, 协商Security-Server
SA_PROVISIONAL --> PROTECTED_AUTH: IPSec SA建立, 发出受保护REGISTER
PROTECTED_AUTH --> REGISTERED: 200 OK (S-CSCF完成SAR/SAA)
REGISTERED --> REGISTERED: 周期性刷新REGISTER(Expires到期前)
REGISTERED --> NOT_REGISTERED: 注册过期/网络注销(RTD)/异常
AUTH_PENDING --> NOT_REGISTERED: 认证失败(403)/SQN再同步失败
PROTECTED_AUTH --> NOT_REGISTERED: Security-Verify不匹配/SA失败
对应S-CSCF侧,用户注册态由Cx-SAR驱动:NAME_NOT_PROVISIONED→REGISTERED,网络侧注销走Cx-RTD(Registration-Termination,Command Code 304)。
sip.Method == "REGISTER" 锁定Gm注册;diameter.cmd.code >= 300 && diameter.cmd.code <= 307 锁定Cx。注意受保护REGISTER在N3/N6抓包看到的是ESP(解密需SA密钥),在P-CSCF内部抓包才是明文SIP。WWW-Authenticate里algorithm=AKAv2-MD5、noncebase64解码后应见16字节RAND+16字节AUTN。| 现象 | 典型根因 | 排查思路 |
|---|---|---|
| 反复401,永远注册不上 | SQN失步/IMPI错误/USIM未开通IMS | 查Authorization是否带auts;核对HSS签约 |
| 403 Forbidden | 认证失败、IMPU不属于该IMPI、漫游受限 | 查HSS返回码、iFC/IMPU归属 |
| 首条REGISTER后无401 | S-CSCF选择失败/I-CSCF↔HSS不通 | 查Cx-UAR/UAA是否成功、能力匹配 |
| 408 Request Timeout | I-CSCF选不到S-CSCF或S-CSCF宕机 | 查S-CSCF能力集、节点健康 |
| 受保护REGISTER被丢 | Security-Verify与Security-Server不符/SPI端口不匹配 | 比对两端SPI/port_uc/port_us |
| 注册成功但无法被叫 | iFC未下发/IMPU未关联/S-CSCF name未写HSS | 查Cx-SAA是否含iFC、LIR能否返回S-CSCF |
| NAT下周期性掉线 | rport学习失败/SA端口被改 | 查Via rport、NAT保活(SIP keepalive/NAT binding) |
| ## 常见问题 |
Q1:IMS注册为什么要发两次REGISTER?
A:第一次(未保护、无response)有两个目的:让P-CSCF学习UE地址(rport)、并在Security-Client声明能力;同时触发网络侧取AV并回401。UE据此建立IPSec SA并算出response,第二次REGISTER才在受保护通道内完成认证。即"一次试探+一次认证"。
Q2:AKAv1-MD5和AKAv2-MD5到底差在哪? A:核心在Digest"口令"的构成:AKAv1用RES;AKAv2用RES‖IK‖CK。后者把AKA派生的密钥也绑进Digest计算,使"认证成功"与"IPSec SA密钥正确"形成密码学关联,防篡改能力更强,是新部署与NASS-IMS捆绑认证的首选。
Q3:为什么被叫能找到用户的S-CSCF? A:注册成功时,Cx-SAR让HSS记录了"该用户当前由哪个S-CSCF服务"。被叫流程中,I-CSCF用Cx-LIR(Location-Info-Request,Command Code 302)向HSS查询,HSS回送S-CSCF name,I-CSCF据此把INVITE路由过去。这就是为什么"SAR没成功、S-CSCF name没写HSS"会导致注册看起来成功却收不到被叫。
Q4:注册成功了,为什么还要周期性刷新?
A:IMS注册有有效期(Expires,常3600s)。UE须在到期前发刷新REGISTER维持状态,否则网络侧超时注销。刷新REGISTER通常无需再走完整AKA挑战(已有有效AV或SA),但某些场景会重新协商;刷新也是NAT保活与重新发布联系地址(如IP变化)的手段。
Q5:Security-Verify和Security-Server必须完全一致吗?
A:是的。RFC 3329规定,UE在受保护消息里逐字回显网络在401中选定的Security-Server值作为Security-Verify。P-CSCF核对二者一致才接受该消息,这是抵御降级攻击(bidding-down)的关键——任何中间篡改都会导致不一致而被丢弃。
本文由「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 等场景全覆盖。
