<!-- title: 5G P-CSCF发现机制ePCO信令全链拆解 -->
<!-- domain: ims -->

# 5G P-CSCF发现机制ePCO信令全链拆解

在VoNR（Voice over NR）业务中，终端要打通任何一通IMS语音、视频或RCS呼叫，都必须先完成两件事：第一，建立一条通往IMS的IP-CAN承载；第二，向IMS核心网发起SIP REGISTER注册。而横亘在这两步之间、决定整个IMS业务能否"敲门"成功的第一道关口，就是**P-CSCF（Proxy-Call Session Control Function）地址发现**。

P-CSCF是IMS网络的唯一入口网元，所有来自UE的SIP信令都必须经过它转发、压缩、加密与策略控制。如果UE拿不到一个可达的P-CSCF IP地址，那么后续的鉴权、注册、呼叫建立都无从谈起。本文聚焦3GPP TS 23.228、TS 23.501/23.502与TS 24.501所定义的**通过ePCO（Extended Protocol Configuration Options）在PDU会话建立过程中下发P-CSCF地址**这一具体机制，从信令时序、IE编码、SMF解析逻辑到抓包排错进行全链路拆解。

---

## 一、机制定位：P-CSCF发现是IMS注册的前置条件

在3GPP TS 23.228第5.1节中明确定义了IMS架构中P-CSCF的角色：它是UE接入IMS的第一个接触点（first point of contact），负责与UE之间的SIP信令交互、SIP压缩（SigComp）、IPsec安全联盟协商，并向PCF发起承载策略请求（5G中经N5/Rx接口）。正因为它是"门"，UE必须先知道这扇门在哪里。

TS 23.228定义了P-CSCF发现的几种可选方式：

1. **IP-CAN承载建立过程中的PCO/ePCO方式**——UE在PDU会话/PDN连接建立时，通过NAS信令中的PCO或ePCO信息元素请求P-CSCF地址，网络在响应中携带返回。这是当前VoNR/VoLTE现网中最主流的部署方式。
2. **DHCP方式**——UE在获得IP连通性后，通过DHCPv4（RFC 3361）或DHCPv6（RFC 3319）的SIP Server选项查询P-CSCF的IP或FQDN。
3. **DNS方式**——当DHCP返回的是P-CSCF的域名时，UE再依据RFC 3263通过DNS SRV/A记录解析出具体IP。

**设计意图**：为什么3GPP要优先把P-CSCF发现"搭便车"放在承载建立流程里，而不是单独走一次DHCP？核心在于**减少往返时延与简化UE实现**。IMS语音业务对注册时延敏感（典型要求VoNR初始注册在数秒内完成），将P-CSCF地址的请求与下发**捎带（piggyback）**在PDU会话建立的NAS消息中，可以节省一次完整的DHCP四步交互（DORA）往返，使UE在承载一建立的同时就具备发起REGISTER的条件。这也是运营商现网普遍在SMF/PGW上静态配置P-CSCF地址池、直接经ePCO下发的根本原因。

---

## 二、PCO与ePCO信息元素深度解析

### 2.1 PCO与ePCO的关系

PCO（Protocol Configuration Options）最早定义于TS 24.008第10.5.6.3节，用于在NAS信令中承载"协议配置参数"，其结构是一组（协议/容器ID + 长度 + 内容）的列表。在5G系统中，TS 24.501复用了这套PCO编码，并在此基础上引入了**ePCO（Extended PCO）**。

二者的关键差异在于**长度域与可承载能力**：

- 传统PCO的容器长度域受限，难以承载IPv6多个地址、较长的DNS列表或新型参数；
- ePCO（TS 24.501第8.3.13.2节的消息定义、第9.11.4.3节的IE编码）使用扩展的16位长度域，可携带更大的参数集合，并支持在N1 NAS模式下传递P-CSCF IPv4/IPv6地址、DNS服务器地址等更丰富的配置（这一点在3GPP提案C1-205231"Support P-CSCF and DNS IPv4 Address in ePCO for N1 mode"中得到明确强化）。

当UE和网络（SMF）均支持ePCO时，优先使用ePCO；否则回落到PCO。

### 2.2 P-CSCF相关的容器ID

P-CSCF地址请求与下发依赖以下容器ID（定义于TS 24.008第10.5.6.3节，被TS 24.501继承）：

| 容器ID（Hex） | 名称 | 作用 | 出现位置 |
|---|---|---|---|
| 0x000C | P-CSCF IPv4 Address Request / Info | 请求/携带一个或多个P-CSCF IPv4地址 | UE请求中为"请求标志"，SMF响应中携带地址列表 |
| 0x000D | P-CSCF IPv6 Address Request / Info | 请求/携带一个或多个P-CSCF IPv6地址 | 同上，IPv6场景 |
| 0x0003 | DNS Server IPv4 Address Request | 请求DNS服务器IPv4 | 常与P-CSCF一并请求 |
| 0x0006 | MS Support of Local Address Assignment | 指示UE支持本地地址分配 | 辅助参数 |
| 0x000A | IP address allocation via NAS signalling | 指示IP地址经NAS信令分配 | 影响地址分配方式 |

ePCO将这些容器ID承载在扩展结构中，并允许**单个容器携带多至N个P-CSCF地址**，为冗余与负载分担提供基础。

### 2.3 ePCO IE结构图

```mermaid
flowchart LR
    A["ePCO IE<br/>TS 24.501 §9.11.4.3"] --> B["Configuration Protocol<br/>(4 bit 配置协议指示)"]
    A --> C["Extension bit / Spare"]
    A --> D["Protocol ID / Container ID List"]
    D --> C1["0x000C<br/>P-CSCF IPv4"]
    D --> C2["0x000D<br/>P-CSCF IPv6"]
    D --> C3["0x0003<br/>DNS IPv4"]
    C1 --> E1["IPv4地址列表<br/>(按优先级排序)"]
    C2 --> E2["IPv6地址列表<br/>(按优先级排序)"]
```

---

## 三、5G PDU会话建立中的P-CSCF发现全信令流

### 3.1 完整时序图

下面给出VoNR场景下，UE建立IMS专用PDU会话并经ePCO获取P-CSCF地址的完整信令时序（对应TS 23.502第4.3.2.2.1节"UE requested PDU Session Establishment"）：

```mermaid
sequenceDiagram
    participant UE
    participant RAN as gNB
    participant AMF
    participant SMF
    participant UDM
    participant PCF
    participant UPF
    UE->>RAN: RRC建立 + NAS: PDU Session Establishment Request
    Note over UE: DNN=ims, S-NSSAI, PDU类型=IPv4v6<br/>ePCO含0x000C/0x000D(P-CSCF请求)
    RAN->>AMF: N2 Initial UE Message(透传NAS)
    AMF->>AMF: 基于DNN=ims+S-NSSAI选择SMF
    AMF->>SMF: N11 Nsmf_PDUSession_CreateSMContext<br/>(SUPI,DNN,ePCO,请求类型)
    SMF->>UDM: Nudm_SDM_Get(获取SM签约/DNN配置)
    UDM-->>SMF: Session Mgmt Subscription(DNN信息)
    SMF->>PCF: N7 Npcf_SMPolicyControl_Create(建立SM策略)
    PCF-->>SMF: SM Policy(PCC规则, 默认5QI=5)
    SMF->>UPF: N4 Session Establishment(PFCP)
    UPF-->>SMF: N4响应(F-TEID)
    Note over SMF: 解析P-CSCF地址池(本地配置/UDM/DNS)<br/>选择IP并排序
    SMF-->>AMF: N11 响应(N1 SM msg: PDU Estab Accept + ePCO[P-CSCF IP])
    AMF->>RAN: N2 PDU Session Resource Setup(N1 SM msg + N2传输层IE)
    RAN->>UE: RRC Reconfiguration + NAS: PDU Estab Accept(ePCO含P-CSCF地址)
    Note over UE: 提取P-CSCF IP列表 → 发起SIP REGISTER
```

### 3.2 关键信令消息与IE逐步解析

**消息①：UE → gNB（透传至AMF）—— PDU Session Establishment Request**

这是整条流程的起点，也是P-CSCF发现请求真正"上车"的地方。该NAS消息（TS 24.501第8.3.1节）中的核心IE包括：

- **DNN（Data Network Name）= "ims"**：UE显式请求建立的是一条**IMS专用PDU会话**，而非普通的internet数据会话。这个DNN值是运营商在UE的"IMS APN/DNN"配置中下发的。
- **S-NSSAI**：IMS会话通常归属一个专用切片（如标准切片SST=2对应URLLC，但IMS常用一个独立S-NSSAI）。
- **PDU Session Type = IPv4 / IPv6 / IPv4v6**：决定P-CSCF地址族，IPv4v6最为常见。
- **ePCO（TS 24.501 §9.11.4.3）**：UE在此IE中携带容器`0x000C`（P-CSCF IPv4 Address Request）与`0x000D`（P-CSCF IPv6 Address Request），向网络声明"我要P-CSCF地址"。这正是P-CSCF发现的请求载体。
- **SSC mode（Session and Service Continuity mode）**：通常为SSC mode 1（保持锚点不变），与IMS会话连续性要求匹配。

**消息③：AMF → SMF —— Nsmf_PDUSession_CreateSMContext（N11/SBI）**

AMF依据`(DNN, S-NSSAI)`查询NRF或本地配置选择SMF后，通过服务化接口N11发起SM上下文创建。**AMF会把UE的ePCO原样透传给SMF**——注意，AMF并不理解也不修改ePCO内容，它只是搬运工。真正的P-CSCF解析与决策发生在SMF。

**消息④-⑤：SMF ↔ UDM**

SMF通过`Nudm_SDM_Get`获取该SUPI在IMS DNN上的签约数据（DNN配置、SSC模式、允许的PDU会话类型、默认5QI等）。在某些部署中，UDM/UDR也会保存该DNN对应的P-CSCF候选地址列表或FQDN，作为SMF解析的输入之一。

**消息⑥-⑦：SMF ↔ PCF**

SMF向PCF发起`Npcf_SMPolicyControl_Create`建立SM策略关联。PCF下发PCC规则，确定IMS信令默认QoS流为**5QI=5**（Standardized 5QI，Non-GBR，优先级0.5，对应IMS信令承载）。这一步与P-CSCF地址下发并不同一回事，但同属IMS会话的策略准备。

**SMF内部：P-CSCF地址解析与选择**

这是整个机制的"心脏"。SMF拿到ePCO中的P-CSCF请求后，按如下优先级解析地址：

1. **本地OAM配置的P-CSCF地址池**（最常见）：SMF静态配置一组P-CSCF IP，按拓扑/负载/TAI选择一个或多个返回；
2. **DNS解析**：若配置的是FQDN，SMF按RFC 3263做NAPTR→SRV→A/AAAA解析得到IP列表；
3. **UDM签约下发**：取签约中该DNN绑定的P-CSCF候选。

随后SMF对返回的多个地址**按优先级排序**（可基于到UPF的拓扑就近、实时负载、健康检查结果），填入ePCO响应。

**消息⑨：SMF → AMF（透传至UE）—— PDU Session Establishment Accept**

SMF构造N1 SM消息`PDU SESSION ESTABLISHMENT ACCEPT`（TS 24.501第8.3.2节），其中：

- **PDU Address**：为UE分配的IP地址/前缀（IPv4地址或IPv6接口标识符，UE再做SLAAC拼成完整IPv6）；
- **QoS规则**：包含5QI=5的默认QoS规则；
- **ePCO**：携带容器`0x000C`（一个或多个P-CSCF IPv4地址）与`0x000D`（一个或多个P-CSCF IPv6地址）。**这就是P-CSCF地址真正下发到UE的载体**。

UE收到后，从ePCO中取出P-CSCF地址列表，选首个地址作为目标，向其发起SIP REGISTER——至此P-CSCF发现完成，IMS注册流程正式开始。

---

## 四、三种P-CSCF发现方式对比

| 维度 | ePCO/PCO捎带方式 | DHCP方式 | DNS方式 |
|---|---|---|---|
| 触发时机 | PDU会话/PDN建立NAS流程内 | 承载建立后单独发起 | 获得FQDN后查询 |
| 标准依据 | TS 23.228 §5.1; TS 24.501/24.008 | RFC 3361/3319 | RFC 3263 |
| 额外信令往返 | 无（捎带） | 1次DORA往返 | 1~多次DNS查询 |
| 时延影响 | 最小 | 中 | 较大 |
| 地址形态 | 直接返回IP | IP或FQDN | 需先有FQDN |
| 现网部署 | 主流首选 | 备选/异厂商对接 | 常作为DHCP后的二级解析 |
| UE实现复杂度 | 低 | 中（需DHCP客户端） | 中（需DNS+RFC3263） |

**选型逻辑**：由于ePCO方式零额外往返、对UE最友好，且与5GC的会话管理天然耦合，几乎成为所有VoNR现网的事实标准。DHCP方式更多见于跨厂商对接或早期VoLTE过渡阶段；DNS方式则作为DHCP返回域名时的必然后继步骤。

---

## 五、P-CSCF冗余、负载分担与故障转移

ePCO允许SMF一次返回**多个P-CSCF地址**，这不仅是冗余设计，更承载着负载分担语义。UE按地址列表的顺序（由SMF排序决定优先级）选择首个P-CSCF发起REGISTER；若该P-CSCF在一定时间内无响应（定时器超时，典型如SIP T1重传到上限）或返回5xx类错误，UE则**切换到列表中的下一个P-CSCF地址**重试。

下图为P-CSCF发现后的注册决策与故障转移流程：

```mermaid
flowchart TD
    A[UE完成IMS PDU会话建立] --> B[ePCO返回P-CSCF地址列表]
    B --> C[按优先级取首个P-CSCF IP]
    C --> D[发起SIP REGISTER]
    D --> E{注册成功?}
    E -->|成功| F[IMS注册完成]
    E -->|超时/5xx失败| G{列表中还有<br/>备选P-CSCF?}
    G -->|是| H[切换到下一地址]
    H --> D
    G -->|否| I[注册失败上报<br/>触发会话重建/重选]
```

这一机制使得单台P-CSCF故障时，UE无需重建PDU会话即可自动切换，显著提升VoNR业务可用性。SMF侧通常配合健康检查（如定期N端口探测或与P-CSCF的邻接关系维护）动态调整地址池，避免把故障P-CSCF排在首位。

---

## 六、实战：抓包识别与排错

### 6.1 Wireshark中如何识别该流程

在5G核心网抓包（NGAP/NAS或N11 SBI）时，识别P-CSCF发现的关键是定位**PDU SESSION ESTABLISHMENT REQUEST / ACCEPT**这两条NAS消息，并展开其`Extended protocol configuration options`字段：

- 在`PDU SESSION ESTABLISHMENT REQUEST`中应能看到容器ID `0x000c`（P-CSCF IPv4 address request）和/或 `0x000d`（P-CSCF IPv6 address request），此时仅为请求标志，内容为空；
- 在`PDU SESSION ESTABLISHMENT ACCEPT`的ePCO中，`0x000c`/`0x000d`容器里应填入一个或多个P-CSCF IP地址。若此处为空，说明SMF未下发P-CSCF地址——这是VoNR注册失败的头号原因。

### 6.2 常见故障点与排错思路

| 现象 | 可能原因 | 排错方向 |
|---|---|---|
| UE始终不发REGISTER | ePCO中P-CSCF地址为空 | 检查SMF的P-CSCF地址池配置、DNN=ims匹配、UDM签约 |
| REGISTER发出但无响应 | P-CSCF地址不可达/防火墙拦截 | ping/traceroute到P-CSCF；核查UPF到P-CSCF路由、IPsec策略 |
| 偶发注册失败 | 首选P-CSCF负载高或故障 | 查ePCO是否返回多个地址；核查P-CSCF健康检查与负载均衡 |
| IPv6场景P-CSCF缺失 | UE请求IPv4但DNN仅配IPv6 P-CSCF | 核对PDU Session Type与地址族配置一致性 |
| UE发了DHCP而未用ePCO | UE或网络未协商ePCO能力 | 查UE 5GS capability与SMF ePCO支持开关 |
## 常见问题

**Q: PCO和ePCO到底该用哪个？会不会冲突？**
A: 不会冲突。当UE和SMF均支持ePCO时，双方优先使用ePCO；若任一方不支持，则回落到传统PCO。二者承载的容器ID（如0x000C/0x000D）语义一致，ePCO的优势在于扩展的长度域与更丰富的参数支持，是PCO的超集演进。

**Q: P-CSCF地址是UE自己选，还是网络指定？**
A: 网络指定。SMF完成地址解析、排序后，把P-CSCF地址列表（含优先级）经ePCO下发给UE；UE只能在列表内按顺序选择，不能自行发明地址。这种"网络主导、UE执行"的设计保证了运营商对IMS入口的完全掌控。

**Q: 如果ePCO里没有下发P-CSCF地址，UE还能注册IMS吗？**
A: 理论上可以走DHCP/DNS方式兜底，但现网中绝大多数UE不会主动这么做，而是直接判定IMS会话不可用。因此ePCO地址缺失通常直接表现为VoNR/VoLTE注册失败，是排错的首要怀疑点。

**Q: P-CSCF发现和IMS的IPsec安全联盟（SA）建立是什么关系？**
A: P-CSCF发现只解决"地址在哪"，是后续所有SIP交互的前提。拿到P-CSCF地址后，UE才会在REGISTER/401/REGISTER/200的鉴权过程中与P-CSCF协商建立IPsec SA（基于port Kaiser/Ipsec-3gpp参数），二者是先后承接的两个独立机制。

**Q: VoNR和VoLTE在P-CSCF发现上有本质区别吗？**
A: 机制一致，差异在承载载体：VoLTE中是PDN Connectivity流程的PCO（TS 24.301/23.401），VoNR中是PDU Session Establishment流程的ePCO（TS 24.501）。5G的ePCO在扩展性与参数容量上更强，是4G PCO向5G的演进。

---

## 参考来源

1. [3GPP TS 23.228 — IMS架构Stage 2，P-CSCF发现程序（第5.1节）](https://www.3gpp.org/dynareport/23228.htm)
2. [3GPP TS 23.502 — 5G系统流程，UE请求的PDU会话建立（第4.3.2.2.1节）](https://www.3gpp.org/dynareport/23502.htm)
3. [3GPP TS 24.501 — 5G NAS协议，ePCO信息元素（第8.3.13.2节/第9.11.4.3节）](https://www.3gpp.org/dynareport/24501.htm)
4. [3GPP TS 24.008 — PCO信息元素格式与容器ID定义（第10.5.6.3节）](https://www.3gpp.org/dynareport/24008.htm)
5. [Cisco UCC 5G SMF配置指南 — IMS PDU Sessions for Voice（ePCO携带P-CSCF现网实践）](https://www.cisco.com/c/en/us/td/docs/wireless/ucc/smf/2025-01/config-and-admin/b_ucc-5g-smf-config-and-admin-guide_2025-01/m_ims-pdu-sessions-for-voice.html)
6. [ShareTechnNote — 5G VoNR信令流程](https://www.sharetechnote.com/html/5G/5G_VoNR.html)
7. [RFC 3263 — SIP: Locating SIP Servers](https://www.rfc-editor.org/rfc/rfc3263)

---

> 本文由「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学通信知识星球海报-扫码加入](https://wiki.500nian.com/images/zhixingqiu_qrcode.png)
