在 IMS(IP Multimedia Subsystem,IP 多媒体子系统)架构中,三个 CSCF 各司其职:P-CSCF(Proxy-CSCF) 是 UE 接入 IMS 的代理,与 UE 之间建立 IPsec 安全联盟;I-CSCF(Interrogating-CSCF,问询 CSCF) 是归属网络的"问询台",负责通过 Cx 接口查询 HSS 来确定由谁服务用户;S-CSCF(Serving-CSCF,服务 CSCF) 则是真正承载会话逻辑的核心节点——它执行 iFC(initial Filter Criteria,初始过滤规则)触发业务、维护注册状态、执行 SIP 路由、作为用户在 IMS 域的"锚点"。
关键认知:S-CSCF 不是网络拓扑中的固定节点,而是为每个注册用户动态分配的逻辑锚点。 一个用户的全部 IMS 业务(注册、主叫、被叫、补充业务触发)都必须最终落到"服务于他的那一个 S-CSCF"上。
这就引出了本文的核心问题:I-CSCF 凭什么知道该把信令送到哪个 S-CSCF? 答案就藏在 Cx 接口的三套 Diameter 信令机制里:
这三套机制在 TS 23.228(Stage 2)、TS 29.228(Cx/Dx 数据模型)、TS 29.229(Cx/Dx 流程与命令)中定义,是 IMS 信令工程师必须吃透的"地基"。一个常见的工程误区是把会话路由时的 I-CSCF 查询笼统称为"选 S-CSCF"——实际上,真正意义的选择只发生在注册时,会话时只是"查找已分配的服务器"。本文即围绕这一精确边界展开。
Cx 接口位于 I-CSCF / S-CSCF 与 HSS 之间(当存在 SLF——Subscription Locator Function——时,I-CSCF 先经 Dx 接口查 SLF 定位具体 HSS,再走 Cx)。它基于 Diameter 协议(RFC 6733),应用 ID 为 16777216。下表给出与本文相关的六对核心命令:
表 1:Cx 接口核心 Diameter 命令职责对比
| 命令对 | 3GPP 名称 | 命令码 | 发起方 → 接收方 | 触发场景 | 核心作用 |
|---|---|---|---|---|---|
| UAR/UAA | User-Authorization-Request/Answer | 300 | I-CSCF → HSS | 注册的每次 REGISTER | 返回 S-CSCF 能力要求(初次)或已分配的 S-CSCF 名字(重注册) |
| SAR/SAA | Server-Assignment-Request/Answer | 301 | S-CSCF → HSS | 注册/注销/档案更新 | 分配 S-CSCF、下载用户档案(含 iFC)、通知 HSS 记录归属 |
| LIR/LIA | Location-Info-Request/Answer | 302 | I-CSCF → HSS | 会话请求(主叫/被叫) | 查询已注册用户当前服务的 S-CSCF 名字 |
| MAR/MAA | Multimedia-Auth-Request/Answer | 303 | S-CSCF → HSS | IMS-AKA 鉴权 | 下载鉴权向量(RAND/AUTN/XRES/IK/CK) |
| PPR/PPA | Push-Profile-Request/Answer | 304 | HSS → S-CSCF | 用户档案变更 | HSS 主动推送更新的用户档案到 S-CSCF |
| RTR/RTA | Registration-Termination-Request/Answer | 305 | HSS → S-CSCF | 网络侧强制注销 | 通知 S-CSCF 删除用户的注册状态 |
一句话区分:UAR/SAR 是"建立"锚点(注册时),LIR 是"找"锚点(会话时),RTR 是"拆"锚点(注销时)。
注册流程定义在 TS 23.228 Section 5.3.2("Registration flows"),其中 S-CSCF 选择逻辑集中在 5.4.1.2(I-CSCF 关于 S-CSCF 选择的操作)。下图给出初始注册时(含 IMS-AKA)S-CSCF 选择与分配的完整时序:
sequenceDiagram
participant UE
participant PCSCF as P-CSCF
participant ICSCF as I-CSCF
participant HSS
participant SCSCF as S-CSCF
Note over UE,SCSCF: 第①段:选择阶段 (UAR/UAA)
UE->>PCSCF: REGISTER (IMPU, IMPI)
PCSCF->>ICSCF: REGISTER (+Path: P-CSCF地址)
ICSCF->>HSS: Cx-Query / UAR (Auth-Type=REGISTRATION)
HSS-->>ICSCF: Cx-Query Resp / UAA (Server-Capabilities: Mandatory/Optional)
Note over ICSCF: 按能力匹配算法选出一个 S-CSCF
ICSCF->>SCSCF: REGISTER (转发至被选中的 S-CSCF)
Note over UE,SCSCF: 第②段:鉴权向量下载 (MAR/MAA)
SCSCF->>HSS: Cx-Auth-Data-Get / MAR (索取鉴权向量)
HSS-->>SCSCF: Cx-Auth-Data / MAA (RAND,AUTN,XRES,IK,CK)
SCSCF-->>UE: 401 Unauthorized (WWW-Authenticate: RAND,AUTN)
Note over SCSCF,PCSCF: IK/CK 通过私有头域单独发送给 P-CSCF,不下发UE
Note over UE,SCSCF: 第③段:鉴权响应与正式分配 (SAR/SAA)
UE->>PCSCF: REGISTER (Authorization: RES响应)
PCSCF->>ICSCF: REGISTER
ICSCF->>HSS: UAR (再次查询,验证鉴权通过)
HSS-->>ICSCF: UAA (S-CSCF-Name: 已选中)
ICSCF->>SCSCF: REGISTER
SCSCF->>HSS: Cx-Put/Select-Pull / SAR (Server-Assignment-Type=REGISTRATION)
HSS-->>SCSCF: SAA (User-Profile: 含 iFC + 公共/私有标识)
Note over HSS: HSS 记录: 该用户由本 S-CSCF 服务
Note over UE,SCSCF: 第④段:第三方注册 + 成功响应
SCSCF->>SCSCF: 评估 iFC, 匹配注册触发点则向 AS 发起第三方 REGISTER
SCSCF-->>PCSCF: 200 OK (Service-Route: S-CSCF地址)
PCSCF-->>UE: 200 OK (保存 Service-Route 供后续会话)
第①段(UAR/UAA):I-CSCF 收到 P-CSCF 转发的 REGISTER 后,向 HSS 发送 UAR。UAR 中最关键的 AVP(Attribute-Value Pair)是:
sip:[email protected])HSS 在 UAA 中通过 Server-Capabilities AVP 返回能力要求,内含两组整数集合:
- Mandatory-Capability:候选 S-CSCF 必须全部支持的强制能力(如能力号 1 代表支持某种业务引擎、2 代表支持特定 AS 互通等,编号由运营商自定义)。
- Optional-Capability:可选能力,用于在多个合格候选间择优。
设计意图:把"谁能服务该用户"的策略集中在 HSS 的用户档案里定义,而把"实际从一组同质 S-CSCF 中负载分担"的决策权交给 I-CSCF。这样运营商可在 HSS 里按用户/套餐配置能力要求(例如 IMS 集群电话用户只分配支持其专网能力的 S-CSCF),而 I-CSCF 仍可在合格集合内做轮询/负载均衡,实现策略集中 + 调度分散。
第②段(MAR/MAA):选中 S-CSCF 后,S-CSCF 向 HSS 下载鉴权向量,启动 IMS-AKA。注意 P-CSCF 会在 401 中剥离发给 UE 的 IK/CK(IP 安全密钥),仅保留 RAND/AUTN 给 UE,因为 IK/CK 是给 P-CSCF 用于建立与 UE 间 IPsec SA 的,绝不能泄露给 UE 之外的设备。
第③段(SAR/SAA):鉴权成功后,S-CSCF 发送 SAR(Server-Assignment-Type = REGISTRATION)做正式"服务器分配"。HSS 在 SAA 的 User-Data AVP 中返回完整的 Service-Profile,包括: - 该私有标识下的所有公共标识(IMPU 列表、隐式注册集) - iFC(initial Filter Criteria)——后续业务触发的核心规则集 - 计费、计费信息、Core Network Service Authorization 等
同时,HSS 把"本用户当前由该 S-CSCF 服务"记录下来——这正是会话阶段 LIR 能查到该 S-CSCF 的数据基础。
第④段:S-CSCF 评估 iFC,若某个 iFC 的触发点匹配"REGISTER 方法",则向对应 AS 发起第三方注册(Third-Party Registration)——即 S-CSCF 代表用户向 AS 发一个 REGISTER,使 AS 得知用户已上线(这是 Presence、补充业务等 AS 初始化的逻辑前提)。最后 200 OK 中携带 Service-Route 头域,其值为本 S-CSCF 的 SIP URI;UE/P-CSCF 保存它,用于后续所有会话请求的寻址。
S-CSCF 选择算法定义在 TS 23.228 Section 5.4.1.2。其本质是一个"约束满足 + 负载分担"的两段式决策,下图给出决策流程:
flowchart TD
A[I-CSCF 收到 REGISTER] --> B[发 UAR 给 HSS]
B --> C{UAA 返回内容?}
C -->|Server-Name 已指定| D[直接用该 S-CSCF<br/>重注册/已有分配场景]
C -->|Server-Capabilities 能力集| E[读取强制/可选能力]
D --> Z[转发 REGISTER 到目标 S-CSCF]
E --> F[过滤:必须满足全部 Mandatory-Capability]
F --> G{合格候选数}
G -->|0个| H[回退: 用运营商默认<br/>或按本地策略选一个]
G -->|1个| I[选该 S-CSCF]
G -->|多个| J[在合格集中择优:<br/>优先满足 Optional-Capability<br/>再用轮询/最少负载分担]
H --> Z
I --> Z
J --> Z
表 2:Server-Capabilities 相关 AVP 说明
| AVP 名称 | 含义 | 取值示例 | 影响 |
|---|---|---|---|
| Server-Name | 已分配/已选中的 S-CSCF SIP URI | sip:scscf1.ims.mnc.mcc.3gppnetwork.org |
命中则直接路由,跳过能力匹配 |
| Mandatory-Capability | 强制能力号集合 | {1, 3} |
候选必须全部支持,否则淘汰 |
| Optional-Capability | 可选能力号集合 | {2, 5} |
用于合格候选间的择优排序 |
| Server-Assignment-Type | 分配类型枚举 | REGISTRATION / RE_REGISTRATION / UNREGISTERED_USER / USER_DEREGISTRATION | 控制 SAR 的语义与 HSS 行为 |
| User-Data | 用户档案(含 Service-Profile/iFC) | XML 形式的 Service Profile | 决定 S-CSCF 的业务触发行为 |
S-CSCF 选择完成后,还有一个常被忽略却至关重要的机制:注册时建立的两条"路由绑定",决定了会话时信令往哪走。
sequenceDiagram
participant UE
participant PCSCF as P-CSCF
participant ICSCF_T as I-CSCF(被叫侧)
participant HSS
participant SCSCF_T as S-CSCF(被叫侧)
participant OSCSCF as 主叫 S-CSCF
Note over OSCSCF,UE: 主叫侧: 由 Service-Route 直接定路由
UE->>PCSCF: INVITE (Route取自Service-Route)
PCSCF->>OSCSCF: INVITE (直达服务S-CSCF,不查Cx)
Note over OSCSCF,SCSCF_T: 被叫侧: ENUM/DNS 找到被叫归属域 I-CSCF
OSCSCF->>ICSCF_T: INVITE (经DNS/ENUM解析到被叫域)
Note over ICSCF_T: 会话阶段定位: 这是 LIR 而非 UAR!
ICSCF_T->>HSS: Cx-Location-Info / LIR (查被叫的S-CSCF)
HSS-->>ICSCF_T: LIA (S-CSCF-Name: 服务被叫的S-CSCF)
ICSCF_T->>SCSCF_T: INVITE
Note over SCSCF_T: S-CSCF 评估 iFC 触发业务<br/>沿注册时保存的 Path 找到被叫 P-CSCF
SCSCF_T->>PCSCF: INVITE
PCSCF->>UE: INVITE
设计精髓:注册时建立的 Service-Route/Path,把"动态分配的 S-CSCF"与"后续会话路由"解耦成两层——主叫靠 P-CSCF 缓存的 Service-Route 直接命中,被叫靠被叫域 I-CSCF 的 LIR 查询命中。注册开销只付一次,会话路由变得轻量。
这是全文最容易被混淆、也最该讲清的边界。当被叫侧 I-CSCF 收到来自主叫网络的 INVITE 时(主叫 S-CSCF 已通过 DNS/ENUM 把 tel URI 解析为被叫归属域的 SIP URI,再 DNS 查到该域的 I-CSCF),它发送的是 LIR(Location-Info-Request,Cx 命令码 302),而非 UAR。
| 维度 | UAR/UAA(注册) | LIR/LIA(会话) |
|---|---|---|
| 触发信令 | REGISTER | INVITE/MESSAGE 等会话请求 |
| 触发节点 | I-CSCF | 被叫侧 I-CSCF |
| 典型返回 | Server-Capabilities(选)或 Server-Name(已选) | Server-Name(已注册)或能力集(未注册) |
| 是否做选择 | 是(合格集内择优) | 否(仅查已分配的服务器) |
| 是否粘性 | 注册生命周期内锁定同一 S-CSCF | 始终指向注册时锁定的那个 |
抓包关键:会话阶段在 I-CSCF 上看到的 Cx 查询命令码是 302(LIR);如果你在 INVITE 流程里抓到 300(UAR),那基本是抓错了或流程异常——UAR 只属于注册。
理解一个机制最好的方式是对比。IMS 的 S-CSCF 选择、4G EPC 的 MME 选择、5G 的 AMF/SMF 选择,本质上都是"为用户在控制面选定一个服务锚点",但实现哲学迥异:
表 3:IMS S-CSCF 选择 vs 5G AMF/SMF 选择 vs 4G MME 选择
| 维度 | IMS S-CSCF 选择 | 5G AMF/SMF 选择 | 4G MME 选择 |
|---|---|---|---|
| 选择执行者 | I-CSCF(归属网内) | AMF 选择(基于 GUAMI/NRF) | MME 池区/负载均衡 |
| 选择依据 | HSS 返回的能力要求(强制/可选) | UE 请求的 Slice/NSSAI、容量、拓扑 | DNS 权重、S1-flex 池区负载 |
| 策略存储点 | HSS 用户档案 | NSSF/NRF + AMF 配置 | DNS + MME 配置 |
| 是否动态分配 | 是(每用户注册时) | AMF 由 RAN 选择,SMF 按 DNN/Slice 选 | 池区内相对静态 |
| 锚点迁移机制 | SSC-like:注销/重注册可换 S-CSCF | SSC mode 3 重选 SMF/UPF | TAU/切换 |
| 查询协议 | Diameter Cx | SBI HTTP/2 (Namf/Nsmf) | DNS / S10 |
可以看到,IMS 把"能力匹配"放在 Cx 接口显式建模,是其与 5G SBA(能力发现散落在 NRF 的 NF Profile)最显著的设计差异。这也解释了为什么 IMS 时代 S-CSCF 选择是确定性的、可审计的——每一步都有 Diameter 消息为证。
用 Wireshark 过滤 diameter.cmd.code == 300 || diameter.cmd.code == 301 || diameter.cmd.code == 302,按时间排序即可看到注册/会话的 Cx 交互。关键判读:
| 现象 | 可能根因 | 排错方向 |
|---|---|---|
| 注册时 403 Forbidden | UAA 返回能力集但 I-CSCF 无合格 S-CSCF | 核对 I-CSCF 本地能力表与 HSS Mandatory-Capability 是否对齐 |
| 主叫正常、被叫不通 | LIA 返回能力集(被叫未注册)或 LIR 失败 | 确认被叫注册状态、HSS 是否记录了 S-CSCF-Name |
| 业务 AS 不触发 | SAR 未下载 iFC / iFC 触发点不匹配 | 检查 User-Data XML 中的 iFC、第三方注册是否发出 |
| 重注册后掉线/换 S-CSCF | HSS 未返回原 Server-Name,重新走了匹配 | 检查 HSS 是否正确维持 S-CSCF 归属记录 |
| 跨厂商能力号不一致 | 能力字典未对齐 | 统一能力编号定义,验证 UAA 中能力集语义 |
| ## 九、常见问题 |
Q1:UAR 和 LIR 都向 HSS 查询 S-CSCF,到底有什么本质区别? A:UAR(命令码 300)只在注册时使用,目的可能是"选一个 S-CSCF"(返回能力集)或"确认已选的 S-CSCF"(返回 Server-Name);LIR(命令码 302)只在会话时使用,目的纯粹是"查已分配的 S-CSCF",不涉及选择。简言之:UAR = 选/确认,LIR = 查找。
Q2:为什么主叫会话通常不经过 I-CSCF,而被叫必须经过? A:因为注册时 S-CSCF 通过 Service-Route 把自己的地址告诉了 P-CSCF,主叫 P-CSCF 可直达该 S-CSCF,省去一次 Cx 查询;而被叫请求来自外部网络,其归属域入口只能是 I-CSCF,必须靠 I-CSCF 的 LIR 才能定位到服务被叫的具体 S-CSCF。
Q3:强制能力(Mandatory-Capability)和可选能力(Optional-Capability)的编号是谁定义的? A:由运营商在 I-CSCF 本地能力表与 HSS 用户档案中私有约定,3GPP 不规定具体含义。跨厂商对接时必须人工对齐能力字典,否则能力匹配会失真。
Q4:用户在注册生命周期内会换 S-CSCF 吗? A:正常情况下不会——重注册时 HSS 在 UAA 里直接返回原 Server-Name,保持粘性。只有在注销(RTR/SAR Type=USER_DEREGISTRATION)后重新注册,或 S-CSCF 故障(HSS 标记用户为"未分配")时,才会重新走完整能力匹配并可能换到新的 S-CSCF。
Q5:SAR 下载的 User-Data 里最重要的内容是什么? A:是 iFC(initial Filter Criteria)。它定义了 S-CSCF 在会话/注册信令上何时、按什么优先级、向哪个 AS 触发业务,是 IMS 补充业务、Presence、彩铃等所有 AS 业务的入口规则。没有 iFC,S-CSCF 就退化为一个纯 SIP 路由器。
本文由「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 等场景全覆盖。
