首页 › deep-tech › 双激活协议栈:零中断的切换术

双激活协议栈:零中断的切换术

一、那道困扰工程师的"切换缝隙"

设想你在开车,正在用手机开一场重要的远程会议。车飞速穿过几个基站覆盖区,每一次跨区,画面都会"卡顿半秒"。对刷短视频的用户来说,这半秒微不足道;但对工业机器人、自动驾驶、远程手术这类超可靠低时延(URLLC)业务来说,这半秒就是事故。

这段卡顿,专业上叫切换中断时间(Handover Interruption Time)。传统切换走的是"先断后连"(break-before-make)的路子:终端必须先松开源基站,再去和目标基站重新对暗号、重新同步、重新排队等数据。这个空窗期,数据流是断的。

那么,能不能像"双卡双待"手机一样——在切到新卡之前,旧卡还在通话,等新的稳了再断旧的?让交接的过程里永远有人在岗,做到"换岗不脱岗"?

这正是5G在R16引入的双激活协议栈(DAPS, Dual Active Protocol Stack)切换要解决的问题。它的目标很激进:把切换中断时间压到接近0毫秒。

今天这篇,我们就拆开DAPS的"零中断魔术",看看它是怎么改造协议栈、怎么编排信令、又付出了哪些代价。

二、传统切换的中断,到底花在哪了?

要理解DAPS为什么有效,先得搞清楚传统切换的"缝隙"由哪些时间片拼成。一次传统(先断后连)切换,从终端收到切换命令那一刻起,中断大致由下面几块组成:

中断组成 大致含义 典型耗时(FR1同频)
源链路释放处理 终端停止与源小区的收发 1~2 ms
射频重调(异频才有) 重新调谐到目标频点 0(同频)/ 数 ms(异频)
目标下行同步 捕获目标小区的同步信号块 数 ms
随机接入(RACH) 与目标基站完成上行接入握手 数~十几 ms
首包到达 目标侧第一个下行数据包送达 1~数 ms

把这几项加起来,传统同频切换的中断通常在十毫秒量级;到了毫米波频段,由于波束扫描的存在,这个缝隙还可能更长。对普通业务无所谓,但对URLLC"99.999%可靠性+1ms空口时延"的目标,十几毫秒的中断足以把可靠性指标打穿。

用一句话概括传统切换的命门:

它在物理上要求"独占"——终端只有一套收发链,必须先释放源,才能腾出手去抓目标。

DAPS的核心突破,正是要打破这个"独占"假设。

三、核心思想:先连后断(make-before-break)

DAPS换了一种哲学:先连后断。终端在收到切换命令后,并不立即扔掉源链路,而是同时维持源和目标两条激活链路,直到目标链路稳稳接管,才释放源链路。

我们可以用一张时间线对比直观感受两者的差别:

sequenceDiagram
    participant S as 源gNB
    participant U as 终端(UE)
    participant T as 目标gNB
    Note over S,U: 【传统切换】break-before-make
    S->>U: 切换命令
    Note over U: ❌ 停止源收发(中断开始)
    U->>T: RACH同步(数据真空)
    T->>U: 首个下行包(中断结束)
    Note over S,U: 中断≈十毫秒量级
    Note over S,U: ━━━━━━━━━━━━━━━━━
    Note over S,U: 【DAPS切换】make-before-break
    S->>U: DAPS切换命令
    Note over U: ✅ 源链路继续收发(不断)
    U->>T: RACH同步(同时源仍在传)
    T->>U: 目标链路就绪
    Note over U: 业务无缝迁移到目标
    S->>T: SN STATUS转移+数据转发
    T->>S: 释放源上下文
    Note over U: 此时才断开源(≈0中断)

关键差别一目了然:传统切换在中间有一段"真空",而DAPS全程至少有一条链路在传数据,切换动作发生在两条链路重叠的窗口里,用户感知不到任何中断。

打个更生活化的比方:传统切换像换岗时先下班再上岗,中间岗位空着;DAPS像新旧保安并肩站岗,新保安到岗、熟悉环境、确认无误后,老保安才离开,全程岗位上从未没人。

四、协议栈改造:一个PDCP、两条RLC、两个MAC

"先连后断"听起来简单,但要在一个终端里同时维持两条激活链路,协议栈必须动手术。DAPS对承载(DRB)的改造是这样的:

flowchart TB
    subgraph UE["终端(UE) DAPS承载结构"]
        PDCP["PDCP实体(共用·重排序/加密)"]
        SRLC["源侧RLC实体"]
        TRLC["目标侧RLC实体"]
        SMAC["源MAC实体"]
        TMAC["目标MAC实体"]
        PDCP --> SRLC
        PDCP --> TRLC
        SRLC --> SMAC
        TRLC --> TMAC
    end
    SMAC -.收发.-> SRC["源小区(继续下行)"]
    TMAC -.接入.-> TGT["目标小区(新建)"]
    style PDCP fill:#cfe8ff,stroke:#1976d2
    style SRLC fill:#ffe0b2,stroke:#e65100
    style TRLC fill:#c8e6c9,stroke:#2e7d32

为什么要这样设计?因为切换的本质是一条逻辑承载在不同物理支路间迁移。PDCP是"账本",记录哪些包发了、哪些没发、序号到哪了;RLC/MAC是"运输队"。DAPS让一个账本同时指挥两支运输队(源队继续送旧货,目标队准备接新货),账本负责把两支队送来的货按序号理顺,避免重复或乱序。

这一点和双连接(DC)的分流承载很像,但用途完全不同:DC是为了"一份数据两条腿走、凑吞吐量",是稳态的长期配置;DAPS是为了"切换这一瞬间的平稳过渡",是短暂的临时态。

一句话记牢:DAPS = 一个账本(PDCP)+ 两个运输队(源RLC/MAC + 目标RLC/MAC)+ 一个重叠窗口。

五、DAPS切换信令时序全流程

现在把完整的信令时序摊开看。这是一次基于Xn接口的DAPS切换,请重点留意源链路在何时才真正断开:

sequenceDiagram
    autonumber
    participant U as 终端UE
    participant S as 源gNB
    participant T as 目标gNB
    participant AMF as 核心网(AMF/UPF)

    U->>S: 1.测量报告(MeasurementReport)
    Note over S: 判决触发DAPS切换
    S->>T: 2.切换请求(Handover Request, Xn)
    Note over T: 准入、分配资源、生成DAPS切换命令
    T->>S: 3.切换请求确认(含DAPS切换命令)
    S->>U: 4.RRC重配(reconfigurationWithSync=切换命令)
    Note over U: ★关键:不断开源!同时启动目标RACH
    par 源链路保持激活
        S-->>U: 源侧继续下行数据
        U-->>S: 源侧继续上行数据
    and 目标链路建立
        U->>T: 5.随机接入(RACH,可RACH-less)
    end
    S->>T: 6.SN STATUS转移(上行计数/下行状态)
    S->>T: 7.数据转发(在途下行包)
    U->>T: 8.RRC重配完成(经目标侧)
    Note over U,T: 目标链路就绪,业务无缝迁移
    T->>AMF: 9.路径切换请求(Path Switch, N2)
    AMF->>T: 10.路径切换响应(N3隧道改到目标)
    T->>S: 11.UE上下文释放(UE Context Release)
    Note over S: ★此刻才释放源小区链路

把这张时序图和传统切换对照看,你会发现DAPS在第4步后多了两个"并行轨",这是整个设计的灵魂所在。梳理几个关键节点:

  1. 第2~3步,切换请求与确认:源gNB通过Xn向目标gNB发起请求,目标gNB在响应里带回一份"透传容器"——里面装着给UE的DAPS切换命令(即 reconfigurationWithSync),源gNB不解析、只转发。

  2. 第4步,下发切换命令:UE收到命令后,不释放源链路,而是立即把目标小区的配置激活,同时保持源的收发。这是DAPS与传统切换最大的分水岭。

  3. 第5步的并行轨:源侧数据照常流淌,目标侧同时进行随机接入。两条腿同时迈,这就是零中断的物理来源。

  4. 第6步,SN STATUS转移:源gNB把PDCP序列号状态(哪些上行包还没收到确认、下行序号发到哪了)交给目标gNB,让目标gNB能无缝续上。

  5. 第7步,数据转发:源gNB把还在路上、没收到的下行包转发给目标gNB,避免丢包。

  6. 第8~9步,完成与路径切换:UE通过目标侧回送完成消息,目标gNB向核心网请求把N3下行隧道改路到自己这边。

  7. 第11步,才释放源:直到此刻,源小区链路才被释放。在此之前,UE始终有一条激活链路在传数据。

中断时间之所以趋近于0,本质上是因为"断开源"这个动作被推迟到了"目标已就绪"之后,两件事不再串行,而是并行重叠。

六、零中断是怎么"算"出来的

从时序抽象成公式,传统切换的中断时间近似为各段串行之和:

$$ T_{int}^{legacy} \approx T_{retune} + T_{sync}^{DL} + T_{RACH} + T_{first} $$

而DAPS由于源链路持续在岗,目标侧的同步与接入完全隐藏在源侧数据传输的时间窗口内,中断时间近似为:

$$ T_{int}^{DAPS} \approx \max(0,\; T_{switch} - T_{overlap}) \;\to\; \approx 0 $$

其中 $T_{switch}$ 是业务从源迁到目标的那一瞬切换动作耗时,$T_{overlap}$ 是两条链路重叠的可用时间。只要重叠窗口足够(通常都足够),中断就趋近于0。

维度 传统切换 DAPS切换
哲学 先断后连 先连后断
源链路 切换命令后立即断 目标就绪后才断
协议栈 单激活 双激活(双MAC/双RLC)
中断时间 十毫秒量级 ≈0 ms
失败回退 需RRC重建,代价大 可优雅退回源
适用 通用业务 URLLC、语音、实时业务
代价 低 UE复杂、功率分摊

七、失败也不怕:优雅回退的隐藏红利

DAPS还有一个常被低估的优势——切换失败时的鲁棒性。

传统切换一旦目标接入失败,源链路早已释放,UE只能走RRC连接重建,相当于"断线重连",业务中断动辄上百毫秒,甚至掉话。

而DAPS由于源链路一直在线,目标失败时只要源还可用,UE可以直接退回源继续传,像是什么都没发生过:

flowchart LR
    A["UE发DAPS切换"] --> B{"目标接入成功?"}
    B -- 是 --> C["业务迁移到目标<br/>释放源(正常完成)"]
    B -- 否 --> D{"源链路仍可用?"}
    D -- 是 --> E["优雅退回源<br/>业务不中断"]
    D -- 否 --> F["RRC重建(最后手段)"]
    style E fill:#c8e6c9,stroke:#2e7d32
    style F fill:#ffcdd2,stroke:#c62828

这让DAPS在高移动、信号波动剧烈的场景(高铁、密集城区)天然多了一层保险——既快,又稳。

八、三种切换哲学:DAPS vs 条件切换 vs 传统切换

把DAPS和它的"同期同学"条件切换(CHO)放在一起比,思路非常清晰。两者都是R16为提升移动性引入的,但解决的是完全不同的痛点:

维度 传统切换 条件切换(CHO) DAPS切换
解决痛点 基础移动性 切换可靠性/成功率 切换中断时间
核心机制 命令即执行 提前准备、满足条件再执行 双链并行、先连后断
准备时机 即时 提前下发 即时
中断时间 十毫秒量级 十毫秒量级 ≈0
失败鲁棒性 弱 强(条件触发,时机更准) 强(可退回源)
代价 低 中(需维护候选+条件) 高(双栈、功率分摊)

可以这样记:

有意思的是,三者并不互斥,规范里DAPS和条件切换还可以组合使用:提前准备 + 双链并行,兼顾"准"与"快"。

九、现网实战与调试连接

理论落到现网,工程师会在这些地方和DAPS打交道:

1. 能力协商是前提。 DAPS是UE可选能力,并非所有终端都支持。网络侧只有在UE上报支持DAPS、且配置了DAPS承载时,才会下发DAPS切换命令。调试时若发现某UE从不走DAPS,先查能力位和承载配置,别急着怀疑基站。

2. 功率分摊(Power Sharing)是核心代价。 终端要同时在上行维持源和目标两条链路,发射功率必须在这两条链路间分摊。这会降低两条链路上的上行质量,可能出现覆盖收缩、上行SINR下降。优化时关注的不是"中断够不够短",而是"双链重叠期内的上行功率够不够用"。

3. 适用场景聚焦。 DAPS主要服务于对中断敏感的业务:URLLC(工业控制、远程操作)、VoNR语音连续性、云游戏、V2X等。对普通尽力而为业务,传统切换已足够,强行用DAPS只增加复杂度和功耗。

4. 调试常见坑: - 误以为DAPS适用异频:DAPS要求终端能同时收发两个小区,基本限于同频(或终端具备双射频链的异频场景),异频场景因需重新调谐射频,"先连后断"难以直接成立。 - 只看中断时间不看上行代价:DAPS把代价转嫁到了上行功率和UE复杂度上,评估时要算总账。 - 混淆DAPS与双连接:DC是稳态的吞吐增强,DAPS是切换瞬间的过渡机制,别在抓包时把两者信令搞混。

十、代价与边界:DAPS不是万能药

DAPS很好,但不是免费的午餐,它至少带来三类代价:

所以工程上的判断标准很朴素:中断带来的损失,是否大于双栈带来的代价? 对一条人命攸关的远程手术链路,值;对一条后台同步的微信消息,不值。

十一、小结

DAPS用"双激活协议栈"把切换从中断的"先断后连"改造成无缝的"先连后断"。它的智慧不在于更快的同步算法,而在于改变了交接的哲学——让新旧链路并肩站岗、重叠过渡,把"真空窗口"彻底消除。

记住三个关键画面就够了:

  1. 协议栈:一个PDCP + 两条RLC/MAC支路 + 一个重叠窗口;
  2. 时序:源链路延迟到"目标就绪后才释放",中断趋近0;
  3. 红利:目标失败可优雅退回源,既快又稳。

当你的业务对"卡顿零容忍",DAPS就是那道让切换"无感"的关键设计。

常见问题

Q:DAPS和双连接(DC)是不是一回事? A:不是。两者协议栈结构相似(共用PDCP+多条RLC支路),但用途不同:DC是稳态的长期配置,目的是分流提速、凑吞吐;DAPS是切换瞬间的临时机制,目的是平稳过渡、消除中断。一个为"跑得快",一个为"换得稳"。

Q:DAPS真的能做到完全0毫秒中断吗? A:是"趋近于0"。业务在重叠窗口内从源无缝迁移到目标,用户和上层业务感知不到中断,但协议层那一切换动作本身仍耗极短时间,因此业界普遍表述为"≈0ms"或"近零中断"。

Q:为什么DAPS基本只用于同频切换? A:因为"先连后断"要求终端能同时收发源和目标两个小区。同频时终端可同时处理;异频则需重新调谐射频,除非终端具备独立的双射频链,否则无法真正并行,所以DAPS主要落在同频场景。

Q:DAPS和条件切换(CHO)该选哪个? A:看痛点。CHO解决切换成功率(提前准备、条件触发,但中断时间不变);DAPS解决切换中断时间(双链并行、近零中断)。两者不互斥,对极敏感业务可组合使用——既提前准备又双链过渡,兼顾稳与快。

Q:终端功率有限,DAPS同时维持两条上行链路不会影响覆盖吗? A:会,这正是DAPS的主要代价。终端需在源和目标间分摊上行发射功率(半静态或动态),导致两条链路上行质量下降,小区边缘尤其明显。所以DAPS评估要算"中断收益 vs 上行代价"的总账,而非只盯着中断时间。

参考来源

  1. 5G NR Dual Active Protocol Stack (DAPS) Handover - Techplayon — DAPS切换R16流程与失败回退机制详解
  2. What is DAPS Handover? - RF Essentials — 0ms中断原理与break-before-make/make-before-break对比
  3. DAPS Handover - Devopedia — DAPS消除切换中断的概念与机制科普
  4. What is DAPS? Dual Active Protocol Stacks - 3GPP Explorer — DAPS与条件切换等移动性增强技术的定位对比
  5. 5G NR双活动协议栈(DAPS)切换 - ictbaike — URLLC场景下DAPS解决中断的中文原理讲解

本文由「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学通信知识星球海报-扫码加入