传统5G NR切换(Baseline Handover)遵循一个朴素的串行模型:源gNB根据测量报告决定切换目标 → 通过Xn/N2接口完成目标侧准备 → 源gNB下发 RRCReconfiguration(内含 reconfigurationWithSync) → UE立即同步到目标小区并执行切换。这条链路的致命弱点在于:从测量报告上报到切换命令下发的这段空口往返时延内,无线信道可能已发生剧烈变化。尤其在高速移动(高铁、车联网)或FR2毫米波频段(信号易受遮挡、波动剧烈)场景下,经常出现"切换命令下发时目标小区已经变差"甚至"源链路在切换命令送达前就已中断"的窘境,导致切换失败、无线链路失败(RLF)乃至RRC重建。
为解决这一"决策与执行之间的信道鸿沟",3GPP在 Rel-16 引入了条件切换(Conditional Handover,CHO),定义于 TS 38.331(NR RRC协议规范)、TS 38.300(NR总体描述)以及 TS 38.423(Xn接口应用层,XnAP)/ TS 38.413(NG接口应用层,NGAP)。CHO的核心思想可以一句话概括:
网络预先为UE准备好多个候选目标小区及其切换配置,并附带"执行条件",下发后UE不再等待网络指令,而是自行持续评估条件,一旦某个候选小区满足条件,UE立即自治执行切换。
这把传统切换中"网络决策—网络下发—UE执行"的串行强耦合,解耦为"网络预配置 + UE自治判断",把切换执行点交给了对无线质量感知最敏锐的UE自己,从而显著提升切换成功率、降低切换失败与RLF概率。
需要强调的是,本文聚焦的是 TS 38.331 中CHO的具体信令机制与IE结构(Rel-16基线,并涵盖Rel-18增强),而非泛泛的移动性架构演进。下面我们从传统切换与CHO的对比切入,逐步拆解完整信令链路。
| 对比维度 | 传统切换(Baseline HO) | 条件切换(CHO) |
|---|---|---|
| 决策主体 | 源gNB单向决策,下发后立即执行 | 源gNB预配置,UE基于条件自治执行 |
| 目标小区数量 | 单一目标小区(1个) | 多个候选小区(最多 maxNrofCondCells-r16 个) |
| 切换命令下发时机 | 网络判断时刻立即下发 | 提前下发,UE存储后等待条件满足 |
| 执行触发 | 收到命令即执行(无延迟) | UE评估测量条件满足后执行(有条件) |
| 执行时延 | 含网络侧决策与空口往返时延 | 仅UE本地评估时延(亚毫秒级) |
| 抗信道波动能力 | 弱(决策与执行间存在时延窗口) | 强(执行点贴近真实信道质量) |
| 信令开销 | 每次切换1次Xn/N2准备+1条RRC | 1次准备多个候选+1条RRC(含候选列表) |
| 数据前转(forwarding) | 切换命令下发后即开始前转 | 执行时刻才前转到被选中的目标 |
| 适用场景 | 低速、信道稳定 | 高速移动、FR2、边缘覆盖、URLLC |
CHO全过程可清晰划分为三个阶段,每个阶段在不同接口、不同网元上发生:
HANDOVER REQUEST 向多个候选gNB发起切换准备,各候选gNB准入后回 HANDOVER REQUEST ACKNOWLEDGE,返回各自候选小区的切换命令(RRCReconfiguration,含 reconfigurationWithSync)。RRCReconfiguration(携带 condReconfigToAddModList-r16)下发给UE;UE存储全部候选配置,继续在源小区正常收发数据,同时对每个候选小区持续评估执行条件。RRCReconfigurationComplete;目标侧通过 HANDOVER SUCCESS 通知源gNB,随后发起路径切换(Path Switch),源gNB撤销未被选中的候选小区并释放UE上下文。下面是Xn接口下CHO的完整信令时序图:
sequenceDiagram
participant UE
participant SgNB as 源gNB(SpCell)
participant C1 as 候选gNB-1
participant C2 as 候选gNB-2
participant AMF
UE->>SgNB: MeasurementReport(测量事件A3/A5上报)
Note over SgNB: 决策采用CHO<br/>选定候选小区列表(C1, C2)
par 并行准备
SgNB->>C1: XnAP: HANDOVER REQUEST(候选1准备)
SgNB->>C2: XnAP: HANDOVER REQUEST(候选2准备)
end
par 准入应答
C1-->>SgNB: HANDOVER REQUEST ACK(候选1 HO Command)
C2-->>SgNB: HANDOVER REQUEST ACK(候选2 HO Command)
end
Note over SgNB: 拼装单条RRCReconfiguration<br/>含condReconfigToAddModList
SgNB->>UE: RRCReconfiguration(CHO配置:候选列表+执行条件)
Note over UE: 存储所有候选配置<br/>启动条件评估,仍驻留源小区收发
loop 持续测量评估
UE->>UE: 逐候选评估执行条件(A3/A5)
end
Note over UE: 候选1执行条件满足→CHO执行
UE->>UE: 应用候选1存储配置(reconfigurationWithSync)
UE->>C1: RACH(随机接入)+RRCReconfigurationComplete
C1->>SgNB: XnAP: HANDOVER SUCCESS(UE已接入候选1)
C1->>AMF: NGAP: PATH SWITCH REQUEST(路径切换)
AMF-->>C1: PATH SWITCH REQUEST ACKNOWLEDGE
Note over SgNB: 撤销未被选中的候选
SgNB->>C2: XnAP: HANDOVER CANCEL(释放候选2)
C1->>SgNB: XnAP: UE CONTEXT RELEASE
Note over SgNB: 释放源UE上下文与剩余资源
CHO在RRC层最核心的载体是 RRCReconfiguration 消息中的 conditionalReconfiguration-r16 字段(位于 RRCReconfiguration-IEs)。其ASN.1顶层结构(TS 38.331 §6.3.2)如下:
ConditionalReconfiguration-r16 ::= SEQUENCE {
attemptCondReconfig-r16 ENUMERATED {true} OPTIONAL,
condReconfigToAddModList-r16 CondReconfigToAddModList-r16 OPTIONAL,
condReconfigToRemoveList-r16 CondReconfigToRemoveList-r16 OPTIONAL,
...
}
CondReconfigToAddModList-r16 ::= SEQUENCE (SIZE(1..maxNrofCondCells-r16))
OF CondReconfigToAddMod-r16
CondReconfigToAddMod-r16 ::= SEQUENCE {
condReconfigId-r16 CHO-IE-Identity, -- 候选唯一标识
rrcReconfiguration-r16 RRCReconfiguration OPTIONAL, -- 该候选完整RRC配置
secondaryCellGroupConfig-r16 OCTET STRING OPTIONAL -- 辅小区组配置(DC)
}
其中:
- attemptCondReconfig-r16:布尔标志,指示UE"尝试"条件重配。源gNB用它要求UE进入条件评估模式。
- condReconfigToAddModList-r16:候选小区列表,每个表项描述一个候选小区的完整切换配置。maxNrofCondCells-r16 限定了同时配置的候选小区上限(Rel-16默认上限为8)。
- condReconfigId-r16:CHO-IE-Identity 类型,为每个候选小区分配一个唯一标识,用于后续UE上报选中候选、网络撤销候选等操作。
- rrcReconfiguration-r16:嵌套一个完整的 RRCReconfiguration 消息,其内部携带 reconfigurationWithSync(目标小区同步信息:PCI、SSB、RACH配置、TA、新C-RNTI等)。这相当于把"传统切换命令"完整地打包进每个候选表项。
- condReconfigToRemoveList-r16:用于撤销(withdraw)已配置的候选小区,例如源gNB判断某候选资源紧张时主动移除。
下图展示了一个含2个候选小区的CHO RRCReconfiguration 消息IE树状结构:
graph TD
A[RRCReconfiguration] --> B[reconfigurationWithSync? 无,可选]
A --> C[conditionalReconfiguration-r16]
A --> D[measConfig-r16 持续测量配置]
C --> E[attemptCondReconfig-r16 = true]
C --> F[condReconfigToAddModList-r16]
F --> G1[CondReconfigToAddMod #1]
F --> G2[CondReconfigToAddMod #2]
G1 --> H1[condReconfigId-r16 = 1]
G1 --> I1[rrcReconfiguration-r16<br/>含reconfigurationWithSync→候选1同步参数]
G1 --> J1[执行条件: condEventA3 cond-rsrp]
G2 --> H2[condReconfigId-r16 = 2]
G2 --> I2[rrcReconfiguration-r16<br/>含reconfigurationWithSync→候选2同步参数]
G2 --> J2[执行条件: condEventA5 cond-rsrq]
style C fill:#e1f5ff
style F fill:#fff4e1
CHO最巧妙的设计在于"执行条件"。每个候选小区绑定一个执行条件,由UE自行评估。执行条件本质上是一类测量事件(TS 38.331 §5.5.4/§5.5.5定义的事件A系列),CHO复用 事件A3 和 事件A5 两种,封装在 CondExecutionConfig-r16 中:
CondExecutionConfig-r16 ::= SEQUENCE {
condExecutionConfigId-r16 CHO-IE-Identity,
condExecutionCond-r16 CHOICE {
condEventA3-r16 CondEventA3-r16,
condEventA5-r16 CondEventA5-r16
},
hysteresis-r16 Hysteresis,
timeToTrigger-r16 TimeToTrigger,
...
}
各参数含义见下表:
| IE字段 | 类型 | 含义与作用 |
|---|---|---|
condReconfigId-r16 |
CHO-IE-Identity | 候选小区唯一标识,关联候选与执行条件 |
condEventA3-r16 |
条目 | 候选小区测量值优于(服务小区+偏移),对应事件A3 |
condEventA5-r16 |
条目 | 服务小区变差且候选变好,对应事件A5 |
cond-rsrp/cond-rsrq/cond-sinr |
测量量选择 | 选择用于评估的测量量(RSRP/RSRQ/SINR) |
hysteresis-r16 |
Hysteresis(0~30) | 迟滞值,避免条件在临界点频繁抖动 |
timeToTrigger-r16 |
TimeToTrigger(0~5120ms) | 触发时间窗,条件需持续满足TTT才算触发 |
a3-Offset / a5-Threshold1/2 |
偏移/阈值 | A3偏移量、A5双阈值 |
事件A3执行条件公式(CHO中最常用):
Mn + Ofn + Ocn − Hys > Mp + Ofp + Ocp + Off
其中 Mn 为候选小区测量值,Mp 为服务小区(SpCell)测量值,Ofn/Ofp 为频率偏移,Ocn/Ocp 为小区偏移,Off 为A3偏移,Hys 为迟滞。当该不等式持续满足 timeToTrigger 时间后,UE判定该候选满足执行条件。
事件A5执行条件公式(双重判据,适合源链路劣化场景):
条件1: Mp + Hys < Thresh1 (服务小区低于阈值1)
条件2: Mn + Ofn + Ocn − Hys > Thresh2 (候选小区高于阈值2)
A5同时要求源链路变差和候选链路变好,更适合作为"防御性"切换触发。
CHO执行逻辑完全驻留在UE RRC层。下图刻画了UE从接收CHO配置到执行切换的状态流转:
stateDiagram-v2
[*] --> 已存储CHO配置
已存储CHO配置 --> 条件评估中: 启动逐候选测量评估
条件评估中 --> 条件评估中: 条件未满足(继续驻留源小区)
条件评估中 --> 执行切换: 某候选条件满足且持续TTT
条件评估中 --> 配置撤销: 收到condReconfigToRemoveList
配置撤销 --> 条件评估中: 仍有候选
配置撤销 --> [*]: 无候选,退出CHO
执行切换 --> 切换成功: RACH+RRCReconfigurationComplete成功
执行切换 --> CHO失败: T304超时(接入失败)
切换成功 --> [*]: 释放所有候选配置,接入目标
CHO失败 --> RRC重建: 回退到RRCReestablishment
CHO失败 --> [*]: 评估是否仍有候选可重试
UE执行CHO的关键行为规则(TS 38.331 §5.3.4.x):
rrcReconfiguration-r16 连同其执行条件存储下来。measConfig 持续测量候选小区。注意,此时UE不再需要为切换而上报MeasurementReport触发网络决策(但常规测量上报可继续)。condReconfigId 顺序或配置中的优先级)。reconfigurationWithSync(含新C-RNTI、TA、RACH资源),向候选小区发起RACH,启动定时器 T304。RRCReconfigurationComplete 后,UE释放所有存储的CHO候选配置,切换完成。整个执行过程中只应用一个候选的配置,不会叠加多个候选。源gNB决定启用CHO后,会基于测量报告与邻区关系,选定多个候选小区,并通过XnAP 并行向各候选gNB发起 HANDOVER REQUEST。各候选gNB完成准入、分配资源、生成各自的HO Command后,回 HANDOVER REQUEST ACKNOWLEDGE。源gNB收集齐所有候选的HO Command后,统一拼装成一条 RRCReconfiguration 下发。这一"多候选并行准备 + 单消息下发"的设计,把多次网络交互压缩到一次,既降低了空口信令次数,又把切换执行权下放给UE。
当源gNB与候选gNB之间无Xn接口(或跨PLMN)时,CHO可经NG-AP(N2)准备:源gNB向AMF发送 HANDOVER REQUIRED(携带多个目标小区ID),AMF向各目标gNB转发 HANDOVER REQUEST,应答反向返回,流程类似但多经AMF一跳。
CHO允许源gNB在UE执行前主动撤销已配置的候选小区。当某候选gNB资源紧张(如负载升高、发生故障)时,它会通过 HANDOVER PREPARATION FAILURE 或专用通知告知源gNB,源gNB随即下发携带 condReconfigToRemoveList-r16 的 RRCReconfiguration,UE收到后删除对应候选配置、停止对其评估。这避免了UE切换到一个已不可用的目标小区。撤销机制是CHO区别于传统切换的另一关键韧性设计。
UE接入被选中候选(设为C1)并发送 RRCReconfigurationComplete 后,C1向源gNB发送XnAP HANDOVER SUCCESS,告知"UE已成功接入C1"。随后:
PATH SWITCH REQUEST(NG-AP)给AMF,将N3/N9用户面路径从源gNB切换到C1;AMF回 PATH SWITCH REQUEST ACKNOWLEDGE。HANDOVER CANCEL,释放其上为该UE预留的资源;同时源gNB收到C1的 UE CONTEXT RELEASE 后释放本侧UE上下文。传统切换中,源gNB在切换命令下发后即开始向目标前转下行PDCP SDU(含状态前转)。而CHO中,由于UE执行时刻不确定,前转需谨慎:
HANDOVER SUCCESS 时)才启动到被选中的目标。这避免了向多个候选同时前转造成的冗余开销与乱序风险。CHO引入了更细的失败处理逻辑:
HANDOVER SUCCESS,会主动撤销候选并清理资源。这种"失败后仍可尝试其他候选"的容错机制,正是CHO提升鲁棒性的根本所在。
CHO在Rel-16落地后,Rel-17/Rel-18持续增强,TS 38.331/38.300/38.423 相应章节演进:
ConditionalReconfiguration 同时承载CHO候选与CPC候选)。在Wireshark/Tshark中识别CHO流程,关键看以下特征:
HANDOVER REQUEST(向不同gNB-DU/gNB),随后多条 HANDOVER REQUEST ACKNOWLEDGE,这是多候选并行准备的指纹。conditionalReconfiguration 字段中解析到 condReconfigToAddModList(多条目)且 attemptCondReconfig = true,即可确认是CHO而非普通重配/普通切换。RRCReconfigurationComplete:传统切换中UE收到 reconfigurationWithSync 后立即接入并回Complete;CHO中UE先存储,期间可能继续上/下行数据,过一段时间才在目标小区出现 RRCReconfigurationComplete,且源小区无对应应答。HANDOVER SUCCESS + HANDOVER CANCEL 同时出现:成功接入一个候选(SUCCESS)的同时,向其他候选发CANCEL,这是CHO完成的标志。| 故障现象 | 可能原因 | 排错思路 |
|---|---|---|
| UE收到CHO配置但从不执行 | 执行条件参数过严(offset过大、TTT过长) | 检查 condEventA3.a3-Offset、timeToTrigger;核对候选小区测量值是否达标 |
| UE执行某候选后T304超时 | 候选小区RACH资源失效或PCI/SSB配置错误 | 核对候选 reconfigurationWithSync 中RACH配置、SSB index;检查候选gNB实际是否仍准入 |
| 多候选均不满足条件导致长期驻留弱源 | 候选选择过少或邻区漏配 | 检查源gNB的候选小区选择算法与ANR邻区;增大候选数 |
| 撤销候选后UE仍尝试该候选 | condReconfigToRemoveList 未被UE正确处理 |
检查RRC消息是否成功送达(源链路质量);核对 condReconfigId 匹配 |
| 切换后用户面中断过长 | 前转隧道未预建或路径切换延迟 | 检查 HANDOVER SUCCESS 与 PATH SWITCH REQUEST 时序;评估预先前转策略 |
| ## 十、设计意图总结 |
CHO的设计体现了3GPP移动性管理的一次范式转变:从"网络中心化决策"走向"网络预配置 + 终端自治"。其设计意图可归纳为三点:
理解CHO的关键,在于把握"单消息多候选预配置 + UE自治条件评估 + 失败多候选兜底"这一核心机制链,以及它在TS 38.331 conditionalReconfiguration 信元、TS 38.423 XnAP多候选准备、TS 38.300移动性总述三处的协同定义。
Q1:CHO和传统切换最本质的区别是什么? A:传统切换中,源gNB决策后下发切换命令、UE立即执行,决策与执行之间存在空口往返时延窗口,信道可能已变化;而CHO中,源gNB提前下发多个候选小区配置与执行条件,UE存储后自行评估,条件满足时才自治执行。本质区别在于"执行触发权"从网络转移到了UE,且目标从单一变为多候选。
Q2:UE如何决定切换到多个满足条件候选中的哪一个?
A:当多个候选小区的执行条件同时满足时,UE按标准定义的优先级选择——通常是按 condReconfigId 顺序或RRC配置中指定的优先级,选择第一个满足条件的候选执行。一旦开始执行,UE即停止评估其他候选,原子化地应用被选候选的配置。
Q3:CHO中数据前转和传统切换有何不同? A:传统切换在切换命令下发后立即向单一目标前转数据;CHO中前转隧道可预先为多个候选建立,但实际数据前转延迟到UE执行时刻,且只向被UE选中的那个目标前转,避免向多候选冗余前转造成的开销与乱序。厂商可对最可能被选中的候选预先前转以降低中断。
Q4:如果UE执行某候选失败(T304超时)会怎样? A:UE不会立即RLF重建。它会先检查是否仍有其他已存储候选小区满足执行条件,若有则尝试下一个候选;若所有候选均不可用,才触发RRC重建。这种"失败可重试其他候选"的机制正是CHO鲁棒性的来源。
Q5:CHO需要网络和终端分别支持什么?
A:网络侧(gNB)需支持XnAP/NGAP多候选并行准备与撤销(HANDOVER REQUEST×N、HANDOVER CANCEL、condReconfigToRemoveList);终端侧需支持TS 38.331 Rel-16的 conditionalReconfiguration 信元解析、多候选配置存储、自治条件评估(A3/A5)与原子化执行。UE能力通过 ue-CapabilityRRC-Parameters 中的CHO能力信元上报。
本文由「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 等场景全覆盖。
