当你拿着手机从小区A走到小区B,通话不能断、视频不能卡——这背后是一场以毫秒为单位的精密"接力赛"。今天我们把这个接力赛的四种跑法彻底拆开。
先做一个生活中的类比。想象你在接力跑中交接棒:前一个跑者(源基站)要把棒(你的数据流)交给下一个跑者(目标基站),既要接得稳(不丢包),又要接得快(用户感觉不到中断),还要接得准(选对下一个跑者)。
这三件事对应切换工程的三大永恒难题:
| 难题 | 通信术语 | 失败后果 |
|---|---|---|
| 接不稳 | 数据转发失败 | 丢包、卡顿、掉话 |
| 接不快 | 中断时延过大 | 游戏延迟飙升、通话断续 |
| 接不准 | 切换到错误小区 | 切换失败、乒乓切换 |
传统切换(也叫"先断后连"或"hard handover")的痛点在于:终端必须先断开与源基站的连接,才能连到目标基站。这个"断开到重新连上"的窗口期,就是用户感知到的中断。在5G之前,这个中断通常在几十毫秒级别,对语音尚可接受,但对URLLC(超可靠低时延通信)和高速移动场景就力不从心了。
5G为了彻底解决这个痛点,设计了四种切换机制,分别对应不同的性能权衡和应用场景。本文逐一拆解它们的原理、信令时序和工程价值。
mindmap
root((5G切换机制))
按信令路径分
Xn切换
源gNB与目标gNB直接交互
不经过AMF
时延最低
N2切换(NG切换)
经过AMF转发
跨AMF或Xn不可用时
时延较高
按执行方式分
传统切换(L1/L2 HO)
先断后连
基站同步切换
CHO条件切换
预配置目标
满足条件才执行
抗测量延迟
DAPS切换
双收双发
零中断切换
复杂度最高
在真正动手切换之前,网络必须先搞清楚一件事:终端到底该切到哪里去? 这就是测量报告(Measurement Report)机制的职责。
终端不是凭感觉切换,而是持续测量一组候选小区的信号质量,常用指标是 SS-RSRP(同步信号参考信号接收功率)。基站通过 RRC 重配置消息给终端下发一份"测量任务单",关键参数包括:
最经典的事件触发机制是 A3事件——当邻区信号质量比服务小区高出某个偏移量(offset)时,触发上报。用公式表达:
$$ \text{触发条件: } Mn + Ofn + Ocn > Mp + Ofp + Ocp + Hys + Off $$
其中 $Mn$ 是邻区测量值,$Mp$ 是服务小区测量值,$Hys$ 是迟滞值,$Off$ 是偏移值。这些"花里胡哨"的参数其实就一个目的:防止乒乓切换。如果只用 $Mn > Mp$ 这么简单的判断,信号稍有波动就会来回切,所以加上迟滞和偏移,让切换更"坚决"。
这里有一个常被新手误解的点:切换决策权在基站(gNB),不在终端。终端只负责"上报测量",最终"切不切、切到哪"是源 gNB 综合考虑负载、邻区关系、资源情况后拍板的。这与WiFi的"终端自己选AP"完全不同——蜂窝网络是"网络主导"的架构。
sequenceDiagram
participant UE as 终端UE
participant Source as 源gNB
participant Target as 目标gNB
participant AMF
Note over UE,Source: 阶段0:测量配置阶段
Source->>UE: RRC Reconfiguration(测量任务)
UE->>Source: RRC Reconfiguration Complete
Note over UE,Source: 阶段1:测量上报阶段
Note right of UE: 终端持续测量SS-RSRP
UE->>Source: Measurement Report(A3事件触发)
Note over Source: 阶段2:切换决策阶段
Note right of Source: 源gNB综合判断<br/>选目标、看资源
Note over Source,Target: 阶段3:切换执行阶段(见下文)
理解了"侦察→决策→执行"这个大框架,下面我们进入四种切换执行机制的核心。
Xn接口是 gNB 与 gNB 之间的"横向"直连接口。Xn切换的核心理念是:既然源基站和目标基站能直接对话,就别麻烦核心网(AMF)转发了。这样切换信令的往返路径最短,时延最低。
打一个比方:Xn切换就像两个同事之间的工位交接——你直接把文件递给隔壁工位的同事,不需要先跑到行政部(核心网)盖章再发。而N2切换则是"必须经过行政部"的流程,适合跨部门(跨AMF)或同事不直接认识(Xn接口不可用)的情况。
sequenceDiagram
autonumber
participant UE as 终端UE
participant SgNB as 源gNB
participant TgNB as 目标gNB
participant AMF as AMF
participant UPF as UPF
SgNB->>TgNB: Xn AP: Handover Request
Note right of TgNB: 目标gNB准入控制<br/>分配资源、准备低层配置
TgNB->>SgNB: Xn AP: Handover Request Acknowledge
Note left of SgNB: Ack中携带目标侧<br/>给UE的RRC重配置消息
SgNB->>UE: RRC Reconfiguration(含目标小区配置)
Note right of UE: UE切换到目标gNB<br/>同步、随机接入
UE->>TgNB: RRC Reconfiguration Complete
Note over TgNB,UPF: 路径切换阶段
TgNB->>AMF: NG AP: Path Switch Request
AMF->>UPF: 切换N3隧道端点
UPF->>TgNB: 下行数据走新路径
AMF->>TgNB: NG AP: Path Switch Request Acknowledge
TgNB->>SgNB: Xn AP: UE Context Release
Note right of SgNB: 源gNB释放UE上下文<br/>切换完成
Xn切换的精妙之处在于它的"时序设计"。注意第1步到第3步:切换请求和确认完全在RAN内部完成,核心网(AMF)此时根本不知道要发生切换。只有当终端已经成功接入目标基站后(第5步之后),才通过 Path Switch Request 告诉核心网:"喂,这个 UE 现在归我管了,请把数据流改路由到我这儿。"
这种"先斩后奏"的设计,让切换执行的时延几乎只取决于Xn接口的传输时延(通常几毫秒),而不是到核心网的往返时延。
切换过程中,源基站可能还缓存着一些发给终端但还没发出去的下行数据。如果直接丢弃,就会丢包。解决办法是数据转发(Data Forwarding):源基站把缓存的PDCP包通过Xn接口转发给目标基站,目标基站再按序发给终端。
| 转发类型 | 含义 | 适用场景 |
|---|---|---|
| 不转发 | 源直接丢包 | 非GBR业务,丢一点无所谓 |
| 按序转发 | PDCP SN连续转发 | GBR业务、需要零丢包 |
| 转发+状态同步 | 带PDCP状态报告 | 无损切换 |
N2切换(也叫NG切换)不是Xn切换的"低配版",而是为以下场景设计的"标准流程":
sequenceDiagram
autonumber
participant UE as 终端UE
participant SgNB as 源gNB
participant AMF as AMF
participant TgNB as 目标gNB
participant UPF as UPF
SgNB->>AMF: NG AP: Handover Required
Note right of AMF: AMF选择目标gNB<br/>做"中间人"
AMF->>TgNB: NG AP: Handover Request
Note right of TgNB: 目标gNB准入控制
TgNB->>AMF: NG AP: Handover Request Acknowledge
AMF->>SgNB: NG AP: Handover Command
SgNB->>UE: RRC Reconfiguration(切换命令)
Note right of UE: UE切换到目标gNB
UE->>TgNB: RRC Reconfiguration Complete
Note over TgNB,AMF: 路径切换
TgNB->>AMF: NG AP: Handover Notify
AMF->>UPF: 切换N3隧道
UPF->>TgNB: 下行数据走新路径
AMF->>SgNB: NG AP: UE Context Release Command
Note right of SgNB: 释放源侧资源
对比Xn切换,你能看出N2切换多了两次AMF的"中转跳":第1步源→AMF,第2步AMF→目标;第3、4步反向再走一遍。每一次中转都增加一段传输时延,所以N2切换的执行时延通常比Xn切换高出不少。
| 对比维度 | Xn切换 | N2切换 |
|---|---|---|
| 信令路径 | 源gNB ⇄ 目标gNB | 源gNB → AMF → 目标gNB |
| 是否经核心网 | 否(仅Path Switch通知) | 是(全程参与) |
| 执行时延 | 低(毫秒级) | 较高 |
| 适用场景 | 同AMF、Xn可用 | 跨AMF、Xn不可用 |
| 决策灵活度 | 高(RAN自主) | 低(需AMF协调) |
工程经验法则:优先Xn,回退N2。现网中绝大多数同AMF内的切换都是Xn切换,N2切换主要发生在跨AMF或厂商边界。
传统切换有个天生的软肋。回到第2节的时序图:终端上报测量报告 → 基站决策 → 基站联系目标 → 目标准备 → 下发切换命令 → 终端执行。这一串动作在理想情况下几十毫秒能完成,但在高速移动场景(高铁、飞机)下,问题来了:
终端上报的测量报告反映的是几毫秒甚至几十毫秒前的信号状况。等基站决策完、目标准备好、切换命令下发下来,终端可能已经驶出目标小区的覆盖范围——切换到一个已经不可用的目标,必然失败。
这就是传统切换在高铁场景掉话率居高不下的根本原因:信令往返时延赶不上信道变化速度。
条件切换(CHO,Conditional Handover)的解法非常巧妙:既然"决策→准备→执行"的串行链路太慢,那就把它们解耦。
flowchart LR
A[阶段1:配置阶段<br/>源gNB预选多个<br/>候选目标小区] --> B[阶段2:准备阶段<br/>多个候选目标<br/>提前准入、分配资源]
B --> C[阶段3:执行阶段<br/>UE自主判断<br/>哪个候选满足触发条件]
C --> D{满足条件?}
D -->|是| E[UE立即执行切换<br/>无需等源gNB命令]
D -->|否| F[继续等待]
F --> C
style A fill:#e1f5fe
style B fill:#fff3e0
style C fill:#e8f5e9
style E fill:#c8e6c9
CHO的精髓在于把"何时切换"的最终决策权下放给了终端。基站提前做好所有准备工作(联系多个候选目标、分配资源),并给终端一份"执行条件清单"——比如"当候选小区C的RSRP > -90dBm时,立即切过去"。终端自己监控条件,一旦满足,立即执行切换,不再等待基站命令。
这就像接力跑中,你提前知道接下来几个跑者的位置,只要跑到交接区且看到某个跑者举手,就直接把棒递过去——不用等教练吹哨。
CHO的触发条件本质上是A3事件类的判定,但由终端本地持续评估。关键约束是:终端只能在已配置的候选小区列表里选,不能自作主张切到列表外的小区。
| CHO要素 | 说明 |
|---|---|
| 候选小区配置 | 源gNB提前通过RRC下发,含每个候选的执行条件和接入参数 |
| 执行条件 | 通常是单个或多个A3事件判定,基于RSRP/RSRQ |
| 执行时机 | 终端检测到条件满足后立即执行,无需信令往返 |
| 失败处理 | 切换失败可尝试下一个候选,或回退源小区 |
CHO特别适合高速移动和信道快速变化场景。在350km/h的高铁上,传统切换的掉话率会显著上升,而CHO通过"提前准备+本地触发",把切换执行的及时性从"取决于网络信令时延"变成了"取决于终端本地测量",极大地提升了切换成功率。
对于eMBB(增强移动宽带)业务,几十毫秒的中断用户基本无感。但对于URLLC(超可靠低时延通信)业务——比如工业控制、自动驾驶的车联网——0ms中断才是硬性指标。传统切换哪怕是Xn切换,那短暂的"断开源→接入目标"窗口期,对URLLC来说也可能是致命的。
DAPS(Dual Active Protocol Stack,双激活协议栈)切换就是为了逼近"零中断"而生。
传统切换是"先断后连"(hard handover),DAPS反过来,采用"先连后断"(make-before-break):
flowchart TB
subgraph 传统切换[传统切换: 先断后连]
direction LR
A1[仅连源gNB] -->|断开源| A2[短暂真空期<br/>下行中断]
A2 -->|接入目标| A3[仅连目标gNB]
end
subgraph DAPS切换[DAPS切换: 先连后断]
direction LR
B1[仅连源gNB] -->|保持源| B2[同时连源+目标<br/>双收双发<br/>零中断]
B2 -->|接入成功<br/>再断源| B3[仅连目标gNB]
end
style A2 fill:#ffcdd2
style B2 fill:#c8e6c9
DAPS切换期间,终端同时维持与源gNB和目标gNB的连接——下行数据双收(两条腿走路,哪条快走哪条),上行数据双发。等到与目标gNB的连接稳定建立后,再断开与源gNB的连接。整个过程中,数据传输始终有至少一条链路在跑,从而实现近乎零中断。
天下没有免费的午餐。DAPS的"零中断"是以高昂的代价换来的:
| 代价维度 | 具体表现 |
|---|---|
| 终端复杂度 | 需要双套射频链路同时工作,对芯片和功耗要求高 |
| 资源消耗 | 切换期间同时占用源和目标两份无线资源 |
| 协议复杂度 | PDCP层要同时处理两条链路,状态管理复杂 |
| 适用范围 | 仅特定URLLC场景,不用于普通用户 |
正因代价高昂,DAPS在现网中不是默认开启的,而是针对特定URLLC业务按需启用。这就好比F1赛车的换胎——能做到2秒内完成四个胎的更换,但那套设备和人员的投入是普通家用车换胎无法比拟的。
DAPS和CHO都是为解决传统切换痛点而生,但思路截然不同:
flowchart LR
subgraph 思路对比
direction TB
CHO[CHO条件切换<br/>解决'切得准、切得及时'] -->|思路| CHO1[把决策下放给终端<br/>牺牲一点准备资源<br/>换取高速场景可靠性]
DAPS[DAPS切换<br/>解决'切得不中断'] -->|思路| DAPS1[同时连两端<br/>牺牲资源与复杂度<br/>换取零中断]
end
style CHO1 fill:#fff9c4
style DAPS1 fill:#b3e5fc
实际上,DAPS和CHO是可以组合使用的——条件触发的双激活协议栈切换,兼顾高速移动的可靠性和URLLC的零中断。这是5G-Advanced甚至6G切换演进的方向。
经过前面四节的分析,我们把四种切换机制放在一张表里横向对比,帮助你建立完整的认知地图:
| 机制 | 解决的核心问题 | 切换中断时延 | 复杂度 | 典型场景 | 引入版本 |
|---|---|---|---|---|---|
| Xn切换 | 信令路径最短化 | 低(毫秒级) | 低 | 同AMF内常规切换 | 5G基础版 |
| N2切换 | 跨核心网/无Xn场景 | 中 | 中 | 跨AMF、跨厂商 | 5G基础版 |
| CHO条件切换 | 高速移动切换失败率高 | 低 | 中 | 高铁、信道快变 | R16 |
| DAPS切换 | URLLC零中断需求 | 趋近于零 | 高 | 工业、车联网 | R16 |
需要强调的是,这四种机制不是互斥的替代关系,而是互补的工具箱。一个成熟的5G网络会根据终端能力、业务类型、移动速度、邻区状况,动态选择最合适的切换机制。源gNB的切换算法就像一个经验丰富的调度员,手里握着四种工具,根据具体情况灵活选用。
排查切换失败,不要只盯着最终结果,要按四个阶段分别定位:
flowchart TD
F[切换失败排查] --> M1[测量阶段<br/>是否上报了正确测量?]
F --> M2[准备阶段<br/>目标是否准入成功?]
F --> M3[执行阶段<br/>UE是否成功接入目标?]
F --> M4[完成阶段<br/>Path Switch是否成功?]
M1 --> M1Q{问题}
M1Q -->|测量漏报| M1A[检查测量配置参数<br/>A3门限/迟滞]
M2 --> M2Q{问题}
M2Q -->|目标拒绝| M2A[检查目标负载<br/>邻区关系表]
M3 --> M3Q{问题}
M3Q -->|接入失败| M3A[检查目标同步/PRACH<br/>参数配置]
M4 --> M4Q{问题}
M4Q -->|隧道切换失败| M4A[检查N3隧道<br/>UPF配置]
陷阱一:把"切换失败"和"掉话"画等号 切换失败≠掉话。终端切换失败后会发起RRC连接重建,如果源小区或邻近小区还能接纳,业务可以恢复。只有重建也失败才真正掉话。调试时不要看到切换失败告警就认定掉话。
陷阱二:忽略乒乓切换的根因 频繁来回切换(乒乓)往往不是切换算法的问题,而是邻区参数配置不当——比如A3事件的迟滞值(Hys)设得太小,或两小区信号强度过于接近。调大Hys和Off能有效抑制乒乓。
陷阱三:混淆Xn接口状态与切换类型 有时候你以为是Xn切换,实际跑成了N2切换。原因是Xn接口虽然物理存在,但链路状态异常或邻区关系未配置,源gNB会自动回退到N2。看日志要确认Xn链路状态和邻区关系表是否正常。
陷阱四:CHO场景下误判"切换延迟" 启用CHO后,从测量上报到实际切换执行之间可能有较长时间间隔——这是正常的,因为终端在等待条件满足。不要把这个间隔误判为"切换慢",要区分"配置阶段时延"和"执行阶段时延"。
| 日志字段 | 含义 | 调试用途 |
|---|---|---|
| HO Cause | 切换触发原因 | 确认是A3事件还是负载均衡 |
| HO Type | 切换类型 | 确认Xn/N2/CHO/DAPS |
| Source Cell / Target Cell | 源目标小区 | 排查邻区关系 |
| Preparation Duration | 准备阶段耗时 | 定位目标侧准入瓶颈 |
| Execution Duration | 执行阶段耗时 | 定位终端接入问题 |
| HO Outcome | 切换结果 | 成功/失败/重建 |
切换技术的演进脉络,本质上是对"中断"这个矛盾的持续攻坚:
未来切换的形态,可能不再是"测量→决策→执行"的被动模式,而是"预测→预配置→无缝迁移"的主动模式——网络根据终端的历史轨迹和当前速度,提前预测下一个目标小区并完成所有准备,用户感知层面真正做到"切换无感"。
Q1:Xn切换和N2切换,终端侧感受有区别吗? A:从终端信令看,两者最终都是收到一条RRC Reconfiguration(切换命令)然后执行切换,终端层面差异不大。主要区别在RAN内部:Xn切换信令不经过AMF,N2切换必须经过AMF转发。所以N2切换的时延通常更高。终端能感知到的差异主要是"切换执行时延"和"切换成功率"——Xn切换通常更快、更可靠。
Q2:CHO条件切换里,终端能自己选任意目标小区吗? A:不能。终端只能在源gNB预先配置的候选小区列表里选,并且必须满足预设的执行条件(如RSRP门限)。这个限制很重要——它保证了网络对切换的整体控制权,避免了终端"乱切"导致资源浪费或掉话。候选列表通常包含1到多个小区,终端按条件满足情况选择。
Q3:DAPS切换要求终端同时连两个基站,普通手机支持吗? A:DAPS对终端射频和基带能力要求很高(需要双激活协议栈),早期5G终端不一定支持。DAPS主要面向URLLC场景(工业、车联网),普通eMBB用户通常不需要。是否启用DAPS取决于终端能力上报和业务QoS需求,网络会综合判断。
Q4:高铁场景为什么特别需要CHO?传统切换不行吗? A:传统切换的痛点是"测量→决策→执行"链路有时延,在350km/h速度下,信道变化快于信令往返,导致切换命令下发时目标可能已经不可用。CHO通过"提前准备多个候选 + 终端本地条件触发",把执行的及时性从依赖网络信令变成依赖终端本地测量,大幅提升了高速场景的切换成功率。所以高铁、地铁等高速移动场景,CHO几乎是标配。
Q5:切换失败后一定会掉话吗? A:不一定。切换失败后,终端会尝试RRC连接重建,如果源小区或附近小区还能接纳,业务可以无缝恢复。只有重建也失败(比如终端已驶出所有候选小区覆盖),才会真正掉话。所以工程上"切换失败率"和"掉话率"是两个不同的KPI,不能混为一谈。
本文由「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 等场景全覆盖。
