<!-- title: 5G条件切换CHO机制拆解 -->
<!-- domain: ran -->

# 5G 条件切换（CHO）机制全链拆解：UE 自主执行的预编排切换

## 一、为什么需要 CHO：传统切换的"决策时延"困境

在 LTE 与 NR 早期（R15）的传统切换（Legacy HO）中，切换决策权完全掌握在网络侧：UE 上报测量报告 → 源 gNB 判断 → 下发 `HO Command` → UE 执行。这是一条**反应式（reactive）**链路，所有判断都集中在"最后一刻"。当 UE 处于小区边缘、高速移动（高铁、车载）或 FR2 毫米波快衰落场景时，从测量上报到 HO Command 下发的这段时间内，源链路可能已严重恶化甚至 RLF，导致 HO Command 根本送不到 UE，触发切换失败与重建。

3GPP 在 **Release 16** 引入 **Conditional Handover（CHO，条件切换）**，彻底改变了这一范式：网络**提前**完成目标小区准备，把切换命令和"执行条件"一并下发给 UE，UE 在源链路上继续工作并**持续本地评估**条件，一旦条件满足就**自主**发起切换执行。本质上，CHO 把"何时切"的决策权从网络侧下沉到更靠近无线环境的 UE 侧，把"切到哪、怎么准备"留给了网络侧。

TS 38.300 §9.2.3.2 给出的定义是：**CHO 是指 UE 在一个或多个切换执行条件被满足时所执行的切换。** UE 在收到 CHO 配置后即开始评估执行条件，并在切换被执行（无论是 CHO 执行还是传统 HO 执行）后停止评估。

```mermaid
flowchart LR
    subgraph Legacy["传统切换(R15) 决策链"]
        A1[UE 上报 MR] -->|网络判断,易超时| A2[源 gNB 决策]
        A2 --> A3[下发 HO Command]
        A3 -->|链路可能已断| A4[执行切换]
    end
    subgraph CHO["条件切换(R16) 决策链"]
        B1[源 gNB 提前准备] --> B2[下发 CHO 配置+条件]
        B2 --> B3[UE 本地持续评估]
        B3 -->|条件满足即时执行| B4[执行切换]
    end
    style A3 fill:#f5c2c2
    style B4 fill:#c2e8c2
```

## 二、CHO 的核心设计原则（TS 38.300 / TS 38.331）

3GPP 为 CHO 定义了若干不可妥协的原则，这些原则是后续所有信令细节的设计动因：

1. **候选 gNB 提供 CHO 配置**：目标候选小区的物理层、MAC、RLC、PDCP 等专用配置由候选 gNB 生成（在 HO Request Acknowledge 中带回），源 gNB 不臆造。
2. **源 gNB 提供执行条件**：何时触发由源 gNB 决定，体现在 `condExecutionCond` 中，绑定到一个测量事件（典型为 **A3** 或 **A5**）。
3. **执行条件可由 1~2 个触发条件构成**：单候选小区最多配置两个触发量（如 RSRP 与 RSRQ、或 RSRP 与 SINR 的组合），但**只支持单一参考信号类型**（RS 类型二选一：SSB 或 CSI-RS）。
4. **CHO 与 Legacy HO 的优先级**：若 UE 已配置 CHO、且在条件满足前又收到传统 HO Command，则 **Legacy HO 优先**，UE 立即按新 HO Command 执行，丢弃 CHO 评估。这是为了避免网络与 UE 决策冲突。
5. **执行期不监听源**：从 UE 开始与目标小区同步起，UE 不再监听源小区（无 DAPS 的回退保护）。
6. **R16 不支持 NG-C based CHO**：仅 Intra-NR、Xn 接口准备；5GC（AMF/UPF）不参与准备与执行阶段。

## 三、端到端信令时序（Intra-NR，Xn 接口准备）

下图刻画 TS 38.300 §9.2.3.2 中"AMF/UPF 均不变更"的标准 CHO 场景，准备与执行均不经 5GC。

```mermaid
sequenceDiagram
    autonumber
    participant UE
    participant Src as 源 gNB
    participant Tgt as 候选 gNB(目标)
    participant AMF

    Note over UE,Src: 阶段一:测量与决策
    UE->>Src: MeasurementReport (A3/A5 触发,RSRP/RSRQ)
    Src->>Src: 内部 RRM 判定: 预编排 CHO 优于反应式 HO

    Note over Src,Tgt: 阶段二:目标准备(Xn,逐候选)
    Src->>Tgt: HO REQUEST (Cause,UE Context,候选 cell)
    Tgt->>Tgt: 准入控制(Slice-aware)
    Tgt-->>Src: HO REQUEST ACKNOWLEDGE (候选 cell 的 CHO 专用配置)

    Note over Src,UE: 阶段三:条件配置下发
    Src->>UE: RRCReconfiguration (condReconfigToAddModList + 执行条件)
    UE-->>Src: RRCReconfigurationComplete
    opt Early Data Forwarding
        Src->>Tgt: EARLY STATUS TRANSFER
    end

    Note over UE,Src: 阶段四:UE 本地评估(继续在源小区工作)
    loop 持续测量与条件评估
        UE->>UE: 评估 condExecutionCond(A3/A5 + RSRP/RSRQ)
    end

    Note over UE,Tgt: 阶段五:条件满足,自主执行(启动 T304)
    rect rgb(220,240,220)
    UE->>UE: 选定候选,应用存储配置,detach 源,启动 T304
    UE->>Tgt: 随机接入同步(RACH)
    UE->>Tgt: RRCReconfigurationComplete
    Tgt-->>Src: HANDOVER SUCCESS (UE 已成功接入)
    Tgt->>Src: (后续) UE CONTEXT RELEASE
    Src->>Src: 释放源资源,丢弃其余 CHO 候选配置
    end
```

### 逐步解析关键信令与 IE

| 步骤 | 消息/动作 | 接口 | 关键 IE / 含义 | 规范来源 |
|------|-----------|------|----------------|----------|
| ① | MeasurementReport | NR-Uu | measId、measResultNeighCells（RSRP/RSRQ/SINR），为后续 A3/A5 评估提供基础 | TS 38.331 §5.5 |
| ③ | HO REQUEST | Xn | Cause、UE Context、Target Cell ID（逐候选发送） | TS 38.423 §9.1 |
| ④ | HO REQUEST ACKNOWLEDGE | Xn | HO Command（候选 cell 专用 RRC 配置，含 RS/TA/小区参数） | TS 38.423 §9.1 |
| ⑥ | RRCReconfiguration | NR-Uu | **condReconfigToAddModList**（多候选）、执行条件 | TS 38.331 §5.3.6 |
| ⑦ | RRCReconfigurationComplete | NR-Uu | 确认 CHO 配置已存储（非执行） | TS 38.331 |
| ⑦a | EARLY STATUS TRANSFER | Xn | 提前转发数据，降低执行时延（代价：未执行则浪费） | TS 38.423 §9.x |
| ⑧ | 本地条件评估 | UE 内部 | 对每个候选持续评估 condExecutionCond | TS 38.300 §9.2.3.2 |
| ⑨ | RRCReconfigurationComplete | NR-Uu（→目标） | 携带至目标，标志 CHO 执行完成 | TS 38.331 |
| ⑩ | HANDOVER SUCCESS | Xn（目标→源） | 通知 UE 已成功接入目标，源可释放其他候选 | TS 38.423 |

## 四、CHO 配置的 IE 结构（TS 38.331）

理解 CHO 的关键，是看懂 `RRCReconfiguration` 中 `condReconfigToAddModList` 的嵌套结构。源 gNB 在这条消息里塞入了"一份未来才会用到的完整目标配置 + 何时启用的判据"。

```mermaid
flowchart TB
    RC[RRCReconfiguration] --> LIST[condReconfigToAddModList<br/>多候选列表]
    LIST --> C1[CondReconfigToAddMod #1]
    LIST --> C2[CondReconfigToAddMod #2]
    LIST --> CN[CondReconfigToAddMod #N]

    C1 --> ID1[condReconfigId = 1<br/>候选唯一标识]
    C1 --> COND1[condExecutionCond<br/>执行条件]
    C1 --> CFG1[候选专用 NR 配置<br/>rrcReconfiguration]

    COND1 --> Q1[触发量: RSRP / RSRQ / SINR<br/>最多 2 个,逻辑组合]
    COND1 --> EVT1[绑定测量事件 A3 / A5<br/>通过已配置的 measId]

    CFG1 --> SYNC1[ReconfigurationWithSync<br/>目标 cell,含 T304]
    CFG1 --> RB1[RadioBearerConfig / CellGroupConfig]
    note[注: 候选配置不得包含 DAPS HO 配置<br/>TS 38.300 §9.2.3.4]
    style COND1 fill:#ffe9a8
    style note fill:#f0d0d0,stroke:#b00
```

### condExecutionCond 的设计要点

执行条件（`condExecutionCond`）是整个机制的"心脏"。它把一个**测量事件**（event-based）从单纯的"上报触发"复用为"切换执行触发"。其设计要点：

- **触发量（trigger quantity）**：在 RSRP、RSRQ、SINR 中选 1~2 个。例如"目标 RSRP 比 SpCell 高 X dB **且** 目标 SINR > 阈值"这种双量组合，可显著降低乒乓与误触发。
- **绑定事件**：典型用 **A3**（邻区优于服务小区一个偏移）或 **A5**（服务小区恶化到阈值 1 **且** 邻区优于阈值 2）。A5 更适合"服务链路真的不行了才切"的保守策略，A3 更适合"目标明显更好就切"的积极策略。
- **单 RS 类型约束**：一次 CHO 配置中所有候选的测量只允许一种参考信号（SSB 或 CSI-RS），避免 UE 测量负担过重与结果不可比。

### CHO 与 Legacy HO 的关键差异

| 维度 | 传统 HO（R15） | 条件切换 CHO（R16） |
|------|----------------|---------------------|
| 决策主体 | 网络（源 gNB） | UE（本地评估执行条件） |
| 目标准备时机 | 决策后准备 | 决策前提前准备（多候选） |
| 命令下发 | HO Command，立即执行 | RRCReconfiguration + 条件，延后执行 |
| 失败窗口 | 命令下发瞬间链路脆弱 | 命令提前下发，规避末段链路恶化 |
| 多目标 | 单目标 | 多候选，首个满足条件者执行 |
| 5GC 参与 | 视路径（Xn/N2） | R16 仅 Xn，5GC 不参与准备/执行 |
| 数据转发 | 切换执行时 SN STATUS TRANSFER | 可选 EARLY STATUS TRANSFER 提前转发 |
| 与 DAPS | 可与 DAPS 组合 | 候选配置**不可**含 DAPS（互斥） |
| 信令开销 | 单候选、轻量 | 多候选、配置体积大、占 UE 存储与内存 |

## 五、UE 侧状态机：从"已配置"到"已执行"

```mermaid
stateDiagram-v2
    [*] --> CONNECTED: RRC_CONNECTED(源小区工作)
    CONNECTED --> CHO_CONFIGURED: 收到 condReconfigToAddModList<br/>存储候选,启动评估
    CHO_CONFIGURED --> CHO_CONFIGURED: 条件未满足,持续测量
    CHO_CONFIGURED --> LEGACY_HO: 期间收到 Legacy HO Command<br/>优先级抢占,丢弃 CHO
    CHO_CONFIGURED --> CHO_EXECUTING: 任一候选条件满足<br/>应用其配置,启动 T304
    CHO_EXECUTING --> HO_COMPLETED: 同步目标+发 RRCRecfgComplete<br/>释放所有其余候选配置
    CHO_EXECUTING --> RLF: T304 超时/接入失败
    RLF --> [*]: RRC 连接重建
    HO_COMPLETED --> CONNECTED
```

状态转换的两个工程要点：

1. **T304 是执行期的"安全阀"**：T304 装在候选配置的 `ReconfigurationWithSync` 中，UE 选定候选、应用配置时启动。若 T304 超时（目标同步或随机接入失败），UE 判定切换失败并触发 RLF→重建。排错时 T304 超时往往指向目标侧准入/前导分配/PUCCH 资源问题。
2. **完成即全清**：一旦某个候选执行成功，UE **释放所有其余 CHO 候选的存储配置**。这意味着网络侧也必须通过 `HANDOVER SUCCESS` 同步状态，否则源 gNB 仍以为其他候选有效，造成资源悬挂。

## 六、R17 增强：CPC 与 CHO 时效

Release 17 在 CHO 基础上做了两个重要增强：

- **条件 PSCell 添加/变更（CPC, Conditional PSCell Addition/Change）**：把 CHO 思想引入 NR-DC 双连接场景，UE 自主评估何时添加/变更辅小区组（PSCell）。CHO 与 CPC 可组合，显著提升 FR1+FR2 异构组网下的移动鲁棒性。
- **候选时效控制**：引入 CHO 候选的有效期（基于定时器或配置更新），避免长期悬挂的"僵尸候选"占用 UE 内存与网络准入资源——这正是 R16 中被诟病的"静默过期"问题的工程化解决。

## 七、抓包识别与排错实战

**如何在 trace 中识别 CHO 流程：**

1. 在 NR-Uu 上找 `RRCReconfiguration`，解码 ASN.1，看是否含 `condReconfigToAddModList-r16`（这是 CHO 的唯一指纹，传统 HO 只有 `reconfigurationWithSync` 直接在主配置里）。
2. 在 Xn 上看 `HO REQUEST` / `HO REQUEST ACKNOWLEDGE` 是否**逐候选**多次出现，且后续是否有 `EARLY STATUS TRANSFER`、`HANDOVER SUCCESS`。
3. 关键判据：UE 发往**目标**的 `RRCReconfigurationComplete` 与发往**源**的 `RRCReconfigurationComplete` 之间，存在一段 UE 本地评估期——这段空窗正是 CHO 区别于 Legacy HO 的特征。

**常见故障与排错思路：**

| 现象 | 根因方向 | 排查动作 |
|------|----------|----------|
| 配置下发后一直不切换 | 执行条件未满足 / 候选时效已过 | 复核 condExecutionCond 阈值、A3/A5 偏移，对比 MR 实测值是否真够格 |
| 条件满足却执行失败 | 目标准备过期 / T304 超时 | 检查 EARLY STATUS TRANSFER 是否到达、目标侧 RACH/PUCCH 资源、T304 取值 |
| 资源悬挂 / 重复准备 | HANDOVER SUCCESS 未及时到源 | 查 Xn 链路、源 gNB 候选清理逻辑 |
| UE 内存告警 | 候选过多、配置过大 | 限制 condReconfigToAddModList 候选数，评估 R17 时效控制 |
| 乒乓 | A3 偏移过小、未配迟滞 Hys | 调整事件触发迟滞与时间触发（TTT） |

## 八、常见问题

**Q1: CHO 与 DAPS 切换能同时用吗？**
A: 不能。TS 38.300 明确规定 CHO 候选配置不得包含 DAPS HO 配置。DAPS 提供"双收双发、源目标并行"的链路级保护，CHO 提供"提前准备、UE 自主触发"的决策级优化，二者机制重叠且资源冲突，规范将其设为互斥。

**Q2: 如果 UE 已配置 CHO，网络又下发 Legacy HO Command 会怎样？**
A: Legacy HO 优先。UE 立即按新 HO Command 执行，停止 CHO 条件评估并丢弃存储的候选配置。这条优先级规则确保网络侧在需要时仍能"夺回"控制权，避免双轨决策打架。

**Q3: CHO 为什么 R16 不支持 N2（NG-C）接口准备？**
A: R16 将 CHO 限定在 Intra-NR、Xn 准备的场景，以降低 5GC 信令复杂度与跨节点状态同步难度。N2 based CHO 的标准化在后续版本中随 NG-RAN 重定位等议题推进，早期版本刻意收敛范围以保稳定性。

**Q4: Early Data Forwarding 是不是越多越好？**
A: 否。EARLY STATUS TRANSFER 在条件未满足时就提前转发数据，能压缩执行时延，但若条件始终不满足（候选被放弃），这些转发的数据即成浪费，还占用 Xn 带宽与目标缓存。运营商通常按场景（如 FR2 高速移动）选择性开启。

**Q5: 多个候选同时满足条件，UE 切到哪个？**
A: UE 选择**首个**满足其执行条件的候选执行，并立即停止对其余候选的评估。规范不保证"最优"候选被选中，只保证"最先满足者"被执行——这也是 CHO 在极端场景下用确定性换最优性的工程权衡。

## 参考来源

1. [3GPP TS 38.300 — NR Overall Description, §9.2.3.2 Conditional Handover](https://www.3gpp.org/dynareport/38300.htm) — CHO 流程与原则的权威定义
2. [ShareTechnote — 5G/NR CHO (Conditional Handover)](https://www.sharetechnote.com/html/5G/5G_CHO.html) — CHO 原理与 UE 视角图解
3. [WirelessBrew — Conditional Handover (CHO) in 5G NR Release 16](https://wirelessbrew.com/5g-nr/conditional-handover-in-5g-nr-release16/) — R16 CHO 原则、条件评估与 Legacy HO 优先级
4. [3GLTEInfo — 5G Conditional Handover Procedure Call Flow](https://www.3glteinfo.com/call-flows/5g-conditional-handover/) — 端到端信令流程、消息与参数解读
5. [3GPP TS 38.331 — NR RRC Protocol Specification](https://portal.3gpp.org/desktopmodules/Specifications/SpecificationDetails.aspx?specificationId=3197) — condReconfigToAddModList 等 CHO RRC IE 定义

---
> 本文由「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)
