你的手机连接5G网络后,如果什么都不做,电池能撑多久?答案取决于一个关键机制:DRX(不连续接收)。没有DRX,你的手机需要每个毫秒都盯着下行控制信道(PDCCH),看基站有没有给它发数据——这就好比你站在快递柜前,24小时不间断地盯着屏幕等快递通知,体力消耗可想而知。
DRX的核心思想很简单:没数据的时候就去睡觉,有数据的时候再醒来。但"什么时候醒""醒多久""怎么判断该不该醒"这些问题的答案,构成了5G中最精巧的省电设计之一。
在移动通信中,基站通过PDCCH(物理下行控制信道)告诉终端:"下一个时隙,你的数据在哪个资源格子上"。如果终端不持续监听PDCCH,就可能漏掉基站的调度指令,导致数据丢失或延迟。
但持续监听的代价极其昂贵:
| 维度 | 持续监听 | DRX模式 |
|---|---|---|
| 射频模块状态 | 始终开启 | 周期性关闭 |
| 功耗(相对值) | 100%(基准) | 20%-60% |
| PDCCH解码次数/秒 | 1000-4000次 | 几十到几百次 |
| 电池续航影响 | 5G下可能仅数小时 | 可延长30%-50% |
这就引出了DRX的设计目标:在满足业务延迟要求的前提下,尽可能减少终端不必要的PDCCH监听。
5G NR引入了三种RRC状态,每种状态都有自己的DRX机制。理解这三者的关系,是掌握DRX全景的关键。
stateDiagram-v2
[*] --> RRC_IDLE: 开机注册
RRC_IDLE --> RRC_CONNECTED: RRC Setup/Resume
RRC_CONNECTED --> RRC_IDLE: RRC Release
RRC_CONNECTED --> RRC_INACTIVE: RRC Release(挂起)
RRC_INACTIVE --> RRC_CONNECTED: RRC Resume
RRC_INACTIVE --> RRC_IDLE: 移出RNA区域
state RRC_IDLE {
[*] --> 寻呼DRX
寻呼DRX: 监听P-RNTI
寻呼DRX: 周期320ms~2.56s
}
state RRC_INACTIVE {
[*] --> 寻呼DRX_RAN
寻呼DRX_RAN: 监听P-RNTI
寻呼DRX_RAN: RAN侧寻呼
}
state RRC_CONNECTED {
[*] --> CDRX
CDRX: 监听C-RNTI
CDRX: 周期10ms~1024ms
}
手机在RRC_IDLE状态下,与网络没有连接,但网络可能随时发起寻呼(比如有人打电话给你)。终端需要周期性地醒来检查有没有属于自己的寻呼消息。
工作原理: - 网络通过SIB1广播寻呼周期(默认320ms、640ms、1.28s或2.56s) - 终端根据自己的UE_ID(5G-S-TMSI)计算自己应该在哪个寻呼帧(PF)和寻呼时机(PO)醒来 - 每个周期只需醒来监听一个PO(通常1个时隙),其余时间全部休眠
$$PF = (T \div N) \times (UE_ID \mod N)$$
$$i_s = \lfloor (UE_ID \div N) \mod Ns \rfloor$$
其中$T$是寻呼周期,$N$是$T$内的PF数量,$Ns$是每个PF内的PO数量,$i_s$是PO的索引。
省电效果: 非常显著。以默认1.28s周期为例,终端每1.28秒只需醒来监听约1ms,99.9%的时间在睡觉,待机功耗接近关机状态。
RRC_INACTIVE是5G新引入的状态。终端虽然释放了空口连接,但核心网和基站侧仍然保留了终端的上下文。这样当有下行数据到达时,可以通过RAN侧寻呼快速恢复连接,而不需要走完整的初始接入流程。
非活跃态DRX的机制与空闲态基本相同,但有几点关键区别:
| 特征 | 空闲态DRX | 非活跃态DRX |
|---|---|---|
| 寻呼发起方 | AMF(核心网) | 上一个服务gNB(RAN侧) |
| 寻呼范围 | TA列表(跟踪区) | RNA(RAN通知区) |
| 恢复时延 | 较长(需完整RRC建立) | 较短(RRC Resume) |
| 上下文保持 | 不保持 | gNB和核心网均保持 |
| 寻呼周期配置 | SIB1广播 | SIB1 + RRC释放消息 |
连接态DRX是最复杂也最有工程价值的DRX机制。终端虽然保持着RRC连接,但不需要每个时隙都监听PDCCH,而是按照网络配置的周期性"值班表"来工作。
一个生活类比: 想象你是一个值班保安。以前的工作方式是24小时盯着监控屏幕(持续监听PDCCH),非常累。现在公司给你配了一个值班表: - 每隔一段时间(DRX周期),你到监控室盯一会儿(On Duration) - 如果这段时间内监控有异常(收到PDCCH调度),你就继续工作(重启非活跃定时器) - 如果一切正常(定时器超时),你就回休息室睡觉
这就是C-DRX的核心逻辑。
C-DRX的精妙之处在于,它不是简单的"醒-睡-醒-睡"循环,而是由多个定时器协同控制的状态机。理解这些参数的含义和交互关系,是调优DRX配置的基础。
flowchart TB
subgraph DRX状态机
A[持续监听PDCCH] -->|drx-InactivityTimer超时| B{配置了短周期?}
B -->|是| C[进入短DRX周期]
B -->|否| D[进入长DRX周期]
C -->|drx-ShortCycleTimer次后| D
D -->|On Duration到来| E[监听PDCCH]
E -->|收到调度| A
E -->|onDurationTimer超时 无调度| D
A -->|收到调度 重启| A
end
style A fill:#ff6b6b,color:#fff
style C fill:#ffd93d,color:#333
style D fill:#6bcb77,color:#fff
style E fill:#4d96ff,color:#fff
| 参数 | 含义 | 典型值 | 对省电的影响 |
|---|---|---|---|
| onDurationTimer | 每个DRX周期开始时,终端保持清醒的时间 | 1-10ms | 越短越省电,但可能漏掉调度 |
| drx-InactivityTimer | 收到PDCCH后,终端继续保持清醒的时间 | 2-100ms | 越短越省电,但 burst传输可能中断 |
| drx-LongCycle | 长DRX周期(一次醒来到下一次醒来的间隔) | 40-320ms | 越长越省电,但调度延迟增大 |
| drx-ShortCycle | 短DRX周期(可选,用于过渡) | 2-80ms | 提供省电与响应速度的折中 |
| drx-ShortCycleTimer | 经过多少个短周期后切换到长周期 | 2-16 | 控制过渡时间 |
| drx-RetransmissionTimer | 等待HARQ重传时保持清醒的时间 | 0-6ms | 确保不漏掉重传 |
让我们用一个具体的例子来说明C-DRX的完整工作流程:
时间轴 →
|←── 长DRX周期 (160ms) ──→|←── 长DRX周期 (160ms) ──→|
| | |
| OnDuration | 睡眠 | OnDuration | 睡眠 |
| 5ms监听 | 155ms | 5ms监听 | 155ms |
| | | | |
↓ 收到调度 ↑ ↓ 无调度 ↑
| | | |
|← InactivityTimer →| 回去睡觉
| 20ms保持清醒 |
| 持续监听PDCCH |
| |
↑ 再次收到调度,重启Timer
关键时间节点解释:
drx-InactivityTimer=20ms为什么需要短周期?直接用长周期不就最省电吗?
考虑一个典型的流量模式:短视频播放。视频数据是以突发(burst)方式到达的,两个burst之间有一个短暂的间隔。如果数据刚停下来就切换到160ms的长周期,下一个数据突发到达时可能要等最坏情况下160ms才能被调度,用户会感受到卡顿。
短周期的设计就像一个过渡缓冲:
活跃状态 → [InactivityTimer超时] → 短周期(20ms × 几次) → 长周期(160ms)
$$T_{short_total} = drx_ShortCycle \times drx_ShortCycleTimer$$
例如:短周期=20ms,短周期定时器=8,则过渡期总时长=160ms,之后切换到长周期。
理解DRX的关键之一是弄清楚Active Time(活跃时间)的定义。终端在以下任一条件满足时必须保持清醒:
| 条件 | 触发原因 | 说明 |
|---|---|---|
| onDurationTimer运行中 | DRX周期开始 | 必须监听PDCCH看有没有调度 |
| InactivityTimer运行中 | 刚收到PDCCH调度 | 可能有连续的burst传输 |
| RetransmissionTimer运行中 | 等待HARQ重传 | 不能漏掉重传数据 |
| 竞争解决定时器运行中 | 随机接入进行中 | 需要等待Msg4 |
| 调度请求待处理 | 终端请求上行资源 | 需要等待基站分配资源 |
| MAC层期望收到新数据的重传 | HARQ NACK已发送 | 需要等待基站重传 |
用Mermaid时序图来展示一个完整的Active Time生命周期:
sequenceDiagram
participant UE as 终端
participant gNB as 基站
Note over UE: On Duration到来,醒来
UE->>UE: 启动onDurationTimer
gNB->>UE: DCI: DL调度(新数据)
UE->>UE: 重启drx-InactivityTimer
Note over UE: Active Time持续
gNB->>UE: DCI: 又一次DL调度
UE->>UE: 再次重启InactivityTimer
Note over UE: onDurationTimer超时
Note over UE: InactivityTimer仍在运行
gNB->>UE: DCI: UL调度
UE->>UE: 再次重启InactivityTimer
Note over UE: InactivityTimer超时
Note over UE: Active Time结束,进入睡眠
Note over UE: 等待下一个On Duration...
到5G R16版本,DRX机制得到了进一步增强:引入了DCI Format 2-6,也就是所谓的唤醒信号(WUS)。
传统C-DRX有一个浪费:即使基站在整个On Duration期间都没有数据要发给终端,终端也必须醒来,打开射频模块,解码PDCCH,最后发现"原来没有我的数据",再回去睡觉。
这个过程虽然比持续监听好得多,但仍然浪费了: - 射频模块启动和稳定的能量 - PDCCH盲检的基带处理功耗 - On Duration期间的时钟和处理器功耗
WUS的核心想法是:在On Duration到来之前,基站提前告诉终端"你需不需要醒"。
flowchart LR
A[DRX睡眠中] --> B{On Duration到来前<br/>监听DCI 2-6}
B -->|WUS=1 有数据| C[正常醒来<br/>监听On Duration]
B -->|WUS=0 无数据| D[跳过On Duration<br/>继续睡觉]
style A fill:#95a5a6,color:#fff
style C fill:#2ecc71,color:#fff
style D fill:#3498db,color:#fff
具体工作机制:
ps-Offset)监听DCI Format 2-6WUS的省电效果可以用以下公式估算:
$$P_{saving} = P_{DRX} \times P_{no_data}$$
其中$P_{DRX}$是On Duration期间的功耗,$P_{no_data}$是On Duration期间没有数据的概率。
在实际网络中,终端大部分时间处于连接态但没有数据传输。假设: - On Duration = 5ms,DRX周期 = 160ms - 80%的On Duration没有数据(典型场景) - WUS监听仅需约0.5ms
无WUS时的功耗: 每个160ms周期醒来5ms 有WUS时的功耗: 每个160ms周期仅醒来0.5ms(80%情况),仅20%情况需要醒来5ms
$$E_{WUS} = 0.8 \times 0.5 + 0.2 \times 5.5 = 0.4 + 1.1 = 1.5ms$$
$$E_{noWUS} = 5ms$$
省电增益: $(5 - 1.5) / 5 = 70\%$(在On Duration部分额外省电70%)
| 业务场景 | On Duration | 长周期 | Inactivity Timer | 短周期 | 设计逻辑 |
|---|---|---|---|---|---|
| VoLTE/VoNR语音 | 2-5ms | 20-40ms | 5-10ms | 不配或10ms | 语音包每20ms一个,周期必须匹配 |
| 视频流媒体 | 2-5ms | 40-80ms | 20-50ms | 20ms | Burst传输后需要缓冲期 |
| 即时消息 | 2ms | 80-160ms | 5-10ms | 20-40ms | 低频小包,允许稍高延迟 |
| 后台数据 | 1-2ms | 160-320ms | 2-5ms | 40ms | 最大省电,容忍较高延迟 |
| 云游戏/AR | 5-10ms | 10-20ms | 20-50ms | 不配 | 极低延迟需求,几乎不睡眠 |
误区1:DRX周期越长越省电
不完全正确。过长的DRX周期会导致: - 调度延迟增加,影响TCP拥塞窗口增长 - 可能触发基站过早释放RRC连接(因为基站认为终端不活跃) - 在移动场景中,长周期可能错过切换命令
误区2:On Duration越短越好
On Duration太短的风险: - 如果基站在On Duration期间正好有下行数据但还没来得及组DCI,终端已经睡着了 - 导致多次不必要的短周期→长周期切换 - 反而可能因为重传而更费电
误区3:DRX和调度策略无关
实际上,DRX参数与基站的调度策略紧密耦合: - 基站的调度器需要知道终端的DRX配置,才能在On Duration期间调度数据 - 如果基站调度器与DRX配置不匹配,可能出现"基站想发数据但终端在睡觉"的情况 - 现网中,基站通常会在终端醒来时批量缓存数据(buffering),以最大化DRX效果
调试DRX问题时,工程师最常关注以下信息:
| 日志字段 | 含义 | 调试关注点 |
|---|---|---|
| DRX Status | 当前DRX状态 | 是否正确进入/退出DRX |
| On Duration Start/End | On Duration的起止时间 | 是否与配置一致 |
| Inactivity Timer状态 | 定时器运行/超时 | 是否因为业务频繁而无法进入DRX |
| Short Cycle计数 | 短周期执行次数 | 是否在短周期和长周期间正常切换 |
| PDCCH解码次数 | On Duration期间的盲检次数 | 验证省电效果 |
| Active Time比例 | 活跃时间占总时间比例 | 核心省电指标 |
一个实用的经验公式:
$$省电比例 \approx 1 - \frac{Active_Time}{Total_Time}$$
如果Active Time比例从100%(无DRX)降到30%(有DRX),理论上省电约70%。
DRX与HARQ(混合自动重传请求)的交互是工程实践中的一个常见困惑点。
问题场景: 终端收到一个TB(传输块),解码失败,发送NACK。按照HARQ机制,基站需要重传。但此时如果终端的InactivityTimer超时了怎么办?
答案:DRX为HARQ重传专门设计了Retransmission Timer。
时间轴:
收到数据 → 解码失败 → 发NACK → 启动drx-RetransmissionTimer
|
等待重传...
|
┌─ 收到重传 → 解码成功 → Timer停止
└─ Timer超时 → 不再等待 → 进入睡眠
关键规则: - 每个HARQ进程有独立的状态追踪 - 只有当对应HARQ进程的NDI(新数据指示)翻转时,才认为收到了新数据 - Retransmission Timer确保终端不会因为提前睡眠而漏掉重传
8个HARQ进程的并行管理使得DRX状态机更加复杂,但核心逻辑不变:只要有未完成的重传,终端就不能完全睡眠。
| 特性 | 4G LTE DRX | 5G NR DRX |
|---|---|---|
| 时间粒度 | 子帧级(1ms) | 时隙级(可变,取决于子载波间隔) |
| RRC状态 | 两种(IDLE/CONNECTED) | 三种(IDLE/INACTIVE/CONNECTED) |
| 唤醒信号 | 无(R15之前) | DCI Format 2-6(R16引入) |
| 跨载波调度 | 有限支持 | 更灵活的跨时隙调度感知 |
| SCell管理 | 无休眠态 | SCell休眠态(R16) |
| 波束管理 | 不涉及 | DRX需要考虑波束恢复时间 |
| 典型最小周期 | 10ms | 可更短(取决于SCS) |
5G引入的RRC_INACTIVE状态本身就与DRX密切相关。INACTIVE态下的终端使用与IDLE类似的寻呼DRX,但保留了连接上下文,使得从"深度省电"到"快速恢复"的路径更短——这就是5G在省电设计上的整体思路升级。
回过头来看DRX的整套设计,可以提炼出三个核心哲学:
预测性省电:通过定时器和周期配置,让终端和基站达成默契——"你在这个时间醒,我保证在这个时间之前把数据准备好"
分层渐进:活跃→短周期→长周期,逐级深入省电,避免"非黑即白"的二元选择
业务感知:不同的业务特征(语音、视频、消息)匹配不同的DRX配置,没有"万能参数"
DRX不是孤立的技术点,它是5G协议栈中MAC层、RRC层、物理层协同工作的缩影。理解DRX,就理解了移动通信中"如何在保持连接的同时最小化功耗"这一核心矛盾的经典解法。
Q1: C-DRX和Idle DRX最本质的区别是什么? A: 本质区别在于终端与网络的关系不同。Idle DRX的终端没有RRC连接,醒来是为了听寻呼(有人找你);C-DRX的终端保持着RRC连接,醒来是为了听调度(基站给你分配资源)。C-DRX的周期更短(毫秒级),Idle DRX的周期更长(秒级),因此省电效果差异很大。
Q2: 如果DRX周期内终端有上行数据要发怎么办? A: 终端可以随时发起调度请求(SR),这会立即中断DRX睡眠,进入Active Time。终端不需要等到下一个On Duration才能发数据。这也是为什么DRX主要针对下行省电——上行数据是终端主动发起的,不受DRX周期限制。
Q3: WUS(唤醒信号)在现网中普及了吗? A: WUS(DCI Format 2-6)在R16中引入,目前主流芯片平台(高通、联发科)均已支持,但运营商网络的开启程度不一。部分运营商在VoNR场景下已启用WUS来延长通话时的终端续航,因为语音通话期间大部分On Duration确实没有数据。
Q4: DRX配置是谁决定的——终端还是网络? A: DRX配置由网络侧(基站)通过RRC Reconfiguration消息下发。终端可以上报辅助信息(UE Assistance Information),告知网络自己的省电偏好,但最终决策权在基站。终端不能自行修改DRX参数。
Q5: 同一个基站下所有终端的DRX配置都一样吗? A: 不一定。C-DRX是终端级别的配置,基站可以根据终端的业务类型和QoS需求为不同终端配置不同的DRX参数。但Idle DRX的寻呼周期是小区级别的广播参数,同一小区内所有终端使用相同的寻呼周期(但每个终端的PO位置不同)。
本文由「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 等场景全覆盖。
