本文为通信原理科普系列第3篇。阅读对象:有1-3年经验的无线/核心网工程师。
你有没有想过一个问题:手机待机时,基站到底知不知道你在哪?
答案是:既知道,也不知道。网络不需要你“时刻在线”——如果你的手机像电脑一样保持一条永远激活的无线连接,光是周期性的反馈、测量、信道探测就会把电池在几个小时内耗光。但另一方面,微信来消息了、运营商要给你打电话了,网络又必须在几秒内找到你。
这就产生了永恒的三角矛盾:
quadrantChart
title 无线连接设计的三个互相制约的目标
x-axis "省电(低功耗)" --> "费电(高功耗)"
y-axis "慢速响应" --> "快速响应"
"深度睡眠": [0.1, 0.15]
"保持在线": [0.95, 0.95]
"折中方案": [0.45, 0.6]
为了平衡这对矛盾,移动通信系统设计了一套状态机:让手机在不同状态之间迁移,每个状态保留不同程度的“在线痕迹”,消耗不同的电量,换取不同的响应速度。
4G只设计了两种状态:RRC_IDLE(空闲态) 和 RRC_CONNECTED(连接态)。而5G做了一个非常精巧的改进——在两者之间加了一个“半睡半醒”的中间态:RRC_INACTIVE(非激活态)。这个状态是5G状态机里最有设计智慧的部分,也是本文的主角。
用住宿来类比三种RRC状态:
| 状态 | 类比 | 发生了什么 |
|---|---|---|
| RRC_CONNECTED | 正在客房住着 | 有专属房间,随叫随到,服务(数据传输)即时响应 |
| RRC_INACTIVE | 退房了但行李寄存在前台 | 人走了(省电),但前台还留着你的登记信息和行李(UE上下文),回来只需报个暗号就能秒速入住 |
| RRC_IDLE | 彻底退房走人 | 前台什么都没留,再回来要重新登记、重新办手续(完整的连接建立) |
这个“行李寄存”就是理解RRC_INACTIVE的关键——网络并没有完全忘掉你,只是冻结了你。
stateDiagram-v2
[*] --> IDLE: 开机/附着
IDLE --> CONNECTED: RRCSetup<br/>(连接建立,全新上下文)
CONNECTED --> IDLE: RRCRelease<br/>(释放一切,上下文丢弃)
CONNECTED --> INACTIVE: RRCRelease带suspendConfig<br/>(挂起,上下文保留)
INACTIVE --> CONNECTED: RRCResume<br/>(恢复,上下文取回)
INACTIVE --> IDLE: 异常/超时<br/>(上下文最终丢弃)
IDLE : 小区重选 + CN寻呼
IDLE : 无UE上下文,核心网记住位置(跟踪区)
INACTIVE : 小区重选 + RAN寻呼
INACTIVE : gNB保留UE上下文 + RNA管理
CONNECTED : 测量上报 + 切换
CONNECTED : 双向数据传输,专用资源
注意两条关键的转换边:
RRCRelease消息,但里面捎带了一个suspendConfig(挂起配置)。这不是“释放”,而是“挂起”。RRCResumeRequest,比从IDLE态重新建立的RRCSetupRequest流程短得多、快得多。| 维度 | RRC_IDLE | RRC_INACTIVE | RRC_CONNECTED |
|---|---|---|---|
| UE上下文 | 不保留(核心网仅有签约信息) | gNB完整保留,UE持有恢复标识 | 基站和UE均激活维护 |
| 寻呼由谁发起 | 核心网(AMF)通过5GC寻呼 | 基站(gNB)发起RAN寻呼,核心网寻呼也可能叠加 | 不需要寻呼 |
| 移动性 | 小区重选(UE自主) | 小区重选(UE自主) | 测量上报+切换(网络控制) |
| 位置管理 | 跟踪区(TA)更新,报给核心网 | RNA更新,报给接入网 | 不需要,切换时网络实时掌握 |
| DRX | 空闲态DRX,周期可达秒级 | 可配置非激活态DRX,可更长(含eDRX扩展) | 密集DRX,周期通常几十毫秒 |
| 恢复到数据传输 | 全新连接建立(十几条信令) | 1~2条信令快速恢复 | 无需转换 |
| 端到端可达性 | 数秒级 | 数百毫秒级 | 毫秒级 |
| 功耗 | 最低 | 低(介于两者之间) | 最高 |
为什么5G要费这么大劲造出第三个状态?答案藏在业务形态的变化里。
4G时代的主流业务是“人找人”:打电话、刷网页。用户的行为模式是长连接——要么一直在传数据,要么干脆闲置很久。
5G时代的业务被重新洗牌了:
于是5G的解法是:把“释放”拆成两档。轻度的、很快会回来的,挂起(suspend);重度的、短时间内不回来的,彻底释放(release)。RRC_INACTIVE就是那道“介于开和关之间的半开状态”。
从信令成本看这个设计的价值:
$$\text{恢复成本比} = \frac{N_{\text{resume}}}{N_{\text{setup}}} \approx \frac{2}{10+}$$
从十几条信令(含随机接入、RRC建立、NAS层认证/安全激活、承载建立)压缩到两条左右,恢复时延从秒级降到百毫秒级,同时UE不需要维持专用无线资源——这就是“既省电又快”的数学本质。
这是RRC_INACTIVE最精妙的部分。当基站决定挂起一个UE时,它做三件事:
flowchart TB
subgraph GNB["gNB(基站侧)"]
A["UE Context 完整保留<br/>包括:AS安全密钥、承载配置、<br/>能力信息、PDU会话信息"]
end
subgraph UE["UE(手机侧)"]
B["保存 resumeIdentity(I-RNTI)<br/>保存 nextHopChainingCount<br/>保存自己的AS安全上下文"]
end
subgraph AIR["空口"]
C["RRCRelease 消息<br/>+ suspendConfig 字段<br/>(含DRX配置、RNA标识、恢复标识)"]
end
GNB -->|下发| AIR
AIR -->|接收| UE
要点解读:
1. 双方各自保存“一半”的状态。 基站保存完整的UE上下文;手机只保存一个很短的恢复标识(I-RNTI,短格式24比特、长格式40比特)加上自己的安全上下文。这个I-RNTI就像寄存行李时给你的取件码——凭它回来,不用重新登记。
2. 安全是“接续”而非“重建”。 挂起时双方约定了一个密钥更新参数(nextHopChainingCount),恢复时手机用旧的AS密钥推导出新的AS密钥。整个过程不需要核心网重新跑一遍认证——这是恢复速度快的核心原因之一。
3. 核心网完全不知情。 挂起/恢复纯粹是UE和gNB之间的接入层(AS)行为,AMF全程无感。这个设计减少了核心网信令负载,但也埋下了一个工程隐患(后面讲)。
sequenceDiagram
participant UE as UE
participant gNB as gNB(原基站)
participant gNB2 as gNB(新基站)
participant AMF as AMF
Note over UE,gNB: === 挂起阶段 ===
gNB->>UE: RRCRelease(含suspendConfig + I-RNTI)
Note over UE: 进入INACTIVE<br/>启动周期性RNA更新定时器
Note over gNB: 保留完整UE Context
Note over UE,gNB2: === 恢复阶段(假设UE换了小区)===
UE->>gNB2: RRCResumeRequest(携带I-RNTI + 恢复MAC-I校验)
alt I-RNTI指向本基站
gNB2->>gNB2: 本地取回UE Context
gNB2->>UE: RRCResume(安全命令 + SRB1恢复)
UE->>gNB2: RRCResumeComplete
else I-RNTI指向别的基站
gNB2->>gNB: 经Xn接口取回UE Context
gNB-->>gNB2: 返回上下文
gNB2->>UE: RRCResume
UE->>gNB2: RRCResumeComplete
end
Note over gNB2,AMF: 若需要(如恢复用户面承载)<br/>gNB2与AMF之间做上下文同步
三个工程细节值得注意:
IDLE态下,核心网通过跟踪区(TA)管理UE位置——UE跨TA才发TAU。但INACTIVE态如果继续用TA,会遇到一个结构性问题:INACTIVE的移动性是UE自主的小区重选,基站完全不知道UE走到了哪里。
如果复用TA,UE每跨一次TA都要惊动核心网做一次更新——这违背了“把核心网挡在门外”的设计初衷。所以5G发明了一个接入网自己的位置管理粒度:RNA(RAN-based Notification Area,基于RAN的通知区域)。
flowchart TB
subgraph CN["核心网视角"]
TA1["跟踪区 TA<br/>(较大粒度,IDLE态使用)<br/>AMF只知道UE在哪个TA"]
end
subgraph RAN["接入网视角"]
RNA1["RNA(可小可大)<br/>(INACTIVE态使用)<br/>gNB知道UE在哪个RNA内"]
C1["RNA配置方式1:<br/>一组小区列表"]
C2["RNA配置方式2:<br/>N个小区"]
C3["RNA配置方式3:<br/>N个小区 + 一个距离环<br/>(离开原小区超过N圈才更新)"]
RNA1 --> C1
RNA1 --> C2
RNA1 --> C3
end
CN -.包含.-> RAN
三种RNA配置方式各有取舍:
| 方式 | 原理 | 优点 | 缺点 |
|---|---|---|---|
| 小区列表 | 显式下发RNA包含哪些小区 | 寻呼范围精确 | 小区多时消息体积大 |
| N个小区 | 以服务小区为中心的N圈 | 配置简单 | 边界UE可能频繁更新 |
| N小区+距离环 | 需同时离开原小区N次且距原小区超过一定圈数 | 减少边界乒乓更新 | 实现稍复杂 |
INACTIVE态的UE像IDLE态一样自主重选小区,但必须遵守RNA边界规则。触发RNAU的时机:
RNAU的报文形式非常巧妙:它就是一条RRCResumeRequest,但里面带了一个resumeCause = rna-update(或类似的原因值)。基站收到后执行一次“快速挂起-恢复”循环,然后立刻再把UE挂回去。也就是说,RNA更新在协议上被建模成一次“假恢复”——复用了resume的信令骨架,不需要专门发明新流程。这种设计上的复用思想非常值得品味。
寻呼是状态机设计的“最后一公里”——当有业务到达,网络如何唤醒UE?
flowchart TB
D["下行数据/信令到达"] --> W{"UE当前状态?"}
W -->|IDLE| P1["核心网寻呼<br/>AMF→所有相关gNB→空口Paging"]
W -->|INACTIVE| P2{"数据来源?"}
P2 -->|来自核心网,如语音| P3["路径切换时gNB发现UE在INACTIVE<br/>触发RAN寻呼(同时可能叠加CN寻呼)"]
P2 -->|来自原gNB缓存的上行授权| P4["gNB直接在RNA内发起RAN寻呼<br/>(不惊动核心网)"]
W -->|CONNECTED| P5["无需寻呼,直接调度"]
P1 --> R["UE收到寻呼→发起连接建立/恢复"]
P3 --> R
P4 --> R
关键差异:
| 维度 | IDLE态寻呼 | INACTIVE态寻呼 |
|---|---|---|
| 发起者 | AMF(核心网) | gNB(接入网) |
| 寻呼范围 | 整个TA列表 | 当前RNA |
| 触发原因 | 核心网有话要送达 | gNB有下行数据或需要上下文交互 |
| UE响应动作 | 走RRCSetup完整建链 | 走RRCResume快速恢复 |
| 核心网参与 | 必须 | 可以完全不需要 |
寻呼时机(Paging Occasion)的数学:寻呼不是随时发的,UE为了省电只在特定的帧“睁眼看一下”。寻呼帧满足:
$$\text{SFN} \bmod T = \left\lfloor \frac{T}{N} \right\rfloor \cdot \left( \text{UE_ID} \bmod N \right)$$
其中 $T$ 是寻呼周期(DRX周期),$N$ 是一个周期内的寻呼组数,$\text{UE_ID}$ 由UE标识推导。这个公式把所有UE按ID均匀打散到不同的寻呼时机上,避免所有UE在同一帧醒来造成信令拥塞——这是把随机负载离散化、削峰填谷的经典设计。
INACTIVE态还允许配置比IDLE更长的DRX周期(甚至支持eDRX扩展),让省电上限更高——代价是被唤醒的响应时间更长。这是协议留给运营商的重要优化旋钮。
进入INACTIVE不是UE说了算,而是基站单方面决策。核心逻辑是基于RRC不活动定时器(RRC inactivity timer):
flowchart TD
A["UE停止数据传输"] --> B["启动/重置RRC不活动定时器"]
B --> C{"定时器超时前<br/>有新数据?"}
C -->|有| B
C -->|超时| D{"基站策略判断"}
D -->|"该UE历史行为<br/>是'短间隔突发型'"| E["挂起:RRCRelease + suspendConfig"]
D -->|"该UE历史行为<br/>是'长时间不用'"| F["彻底释放:普通RRCRelease"]
基站的策略可以很简单(一刀切定时器),也可以很智能(参考UE过去几轮的“挂起后再活跃间隔”统计,动态选择挂起或释放)。这个决策完全在接入网本地完成,不需要问AMF——又一次体现了“5G把智能下推到边缘”的架构哲学。
在Uu口抓包看到这些关键字眼时,你就知道碰到了INACTIVE机制:
RRCRelease 中出现 suspendConfig IE → 挂起;RRCResumeRequest / RRCResume / RRCResumeComplete → 恢复;RRCSetup回下来)→ 上下文丢失导致的降级。由于挂起对AMF透明,核心网工程师排查“用户有数据但一直不通”的问题时,容易被误导:AMF以为用户还连着,实际UE在INACTIVE态且RAN寻呼没成功。跨无线/核心网的问题,要先对齐“双方各自认为的UE状态”,这是排障时的经典陷阱。
RRC_INACTIVE的本质,是把“连接”这个二元概念连续化了:
$$\text{在线程度} = f(\text{保留的上下文量},\ \text{恢复所需的信令数},\ \text{寻呼的主体与范围})$$
4G只有“全开”和“全关”两个端点;5G在中间加了一个可调节的中间点。手机睡得香,但网络给它留了一盏灯、一份档案、一个取件码——回来时不用重新登记,报上暗号就能立刻续住。这盏灯,就是5G为海量突发小包和低时延业务准备的答案。
Q1: RRC_INACTIVE和RRC_IDLE的核心区别是什么? A: 一句话——IDLE是“网络忘了你的无线细节”,INACTIVE是“基站还记着,但让你睡了”。具体体现在三点:①INACTIVE下gNB保留完整UE上下文,恢复只需两条信令;②IDLE由核心网(AMF)寻呼、INACTIVE由基站发起RAN寻呼;③IDLE用TA做位置管理、INACTIVE用RNA。
Q2: 挂起(suspend)和释放(release)在信令上看起来一样,怎么区分?
A: 都是通过RRCRelease消息下发的,区别在于消息里是否携带suspendConfig信息元素。带了就是挂起(进入INACTIVE),没带就是彻底释放(进入IDLE)。所以抓包时不能只看消息名,要看IE。
Q3: 为什么RNA更新要伪装成一次RRCResume,而不单独设计流程? A: 这是协议设计的复用智慧。RNAU需要的是“向基站报到+更新位置”,而RRCResume天然具备“让基站重新认识这个UE”的骨架。复用它意味着RNAU顺带完成了安全校验(恢复MAC-I验证)、上下文同步,不需要为RNAU单独发明一套鉴权机制。缺点是每次RNAU要付出一次resume+re-suspend的信令成本。
Q4: 恢复失败(resume被拒)的常见原因有哪些? A: 主要三类:①原基站的UE上下文因超时或资源回收已被删除;②I-RNTI在新基站查不到对应的上下文(跨站映射失败);③恢复MAC-I校验失败(安全上下文对不上)。失败后UE被指示回退到IDLE态走完整建链,表现为用户体感“突然卡了几秒”。
Q5: 运营商应该如何权衡RRC不活动定时器的长短? A: 看业务画像。对短视频/社交类用户占比高的网络,适当加长(减少无谓的挂起-恢复循环);对IoT和低频心跳类业务,缩短(尽快释放无线资源)。更精细的做法是基站按UE历史行为动态决策。这个参数是无线侧“用户体验 vs 资源效率”最直接的旋钮之一。
本文由「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 等场景全覆盖。
