随机接入(Random Access, RACH)是 UE 从"射频可达"走向"信令可调度"的唯一入口——无论是初始注册、切换重建、波束恢复还是从 RRC_INACTIVE 唤醒,都必须先通过 PRACH(Physical Random Access Channel)完成上行同步与 C-RNTI 分配。它横跨 TS 38.300(Stage-2)、TS 38.321(MAC 层 Section 5.1)、TS 38.213(物理层控制 Section 8)和 TS 38.211(前导码序列 Section 6.3.2)四份规范,是 5G NG-RAN 中最典型的"跨层协同"机制。本文聚焦 TS 38.321 Section 5.1 的前导码选择分支(Group A/B、CFRA/CBRA)、TS 38.213 的开环功率攀升公式,以及 Rel-16 引入、Rel-17/18 持续增强的 2-step RACH(MsgA/MsgB)与回退机制,逐步拆解每条消息的 IE、寻址逻辑与故障定位思路。
在 LTE 时代 RACH 只有经典四步流程。5G NR 的场景分化(URLLC 超低时延、海量连接、卫星超大时延)让单一流程无法兼顾"覆盖鲁棒性"与"接入时延"两个相互冲突的目标。3GPP 在 Rel-16 TS 38.321 中新增 2-step RACH(MsgA/MsgB),并将两者的选择权交给 UE 基于测量门限 rsrp-ThresholdMsgA 自主决策——覆盖好、RSRP 高时走 2-step(一次往返);覆盖差、RSRP 低时回退到 4-step(功率攀升更充分、Msg3 有重传保护)。这种"双轨制"的设计哲学贯穿整个 PRACH 流程。
按 TS 38.321 5.1.1 的定义,共 9 类事件会触发 RACH:
| 序号 | 触发场景 | 默认接入类型 | 典型 RRC 参数来源 |
|---|---|---|---|
| 1 | 初始 RRC 连接建立(RRC_IDLE→CONNECTED) | CBRA | RACH-ConfigCommon (SIB1) |
| 2 | RRC 连接重建 | CBRA | RACH-ConfigCommon |
| 3 | 切换(HO)/ reconfigurationWithSync | CFRA 或 CBRA | rach-ConfigDedicated |
| 4 | UL/DL 数据到达但上行失步 | CBRA | RACH-ConfigCommon |
| 5 | 从 RRC_INACTIVE 转换 | CBRA | RACH-ConfigCommon |
| 6 | 添加 SCell 建立时间对齐 | CFRA | rach-ConfigDedicated |
| 7 | 按需请求 SI(on-demand SIB) | CBRA | RACH-ConfigCommon |
| 8 | 波束失败恢复(BFR) | CFRA 优先 | BeamFailureRecoveryConfig |
| 9 | SUL(补充上行)载波选择 | CBRA | rsrp-ThresholdSSB-SUL |
经典竞争式四步流程的信令时序如下,其中 Msg1/Msg3 为上行,Msg2/Msg4 为下行:
sequenceDiagram
participant UE
participant gNB
Note over UE: 选择 SSB + 前导码(Group A/B) + PRACH occasion
UE->>gNB: Msg1: PRACH Preamble (RAPID)
Note over gNB: 在 RA-search space 用 RA-RNTI 加扰 PDCCH
gNB->>UE: Msg2: RAR (PDCCH+PDSCH)<br/>含 TA, UL Grant, TC-RNTI, BI
Note over UE: 用 TC-RNTI 加扰发送 Msg3
UE->>gNB: Msg3: 调度传输 (RRCSetupRequest / RRCReestablishmentRequest 等)
Note over gNB: 竞争解决, 为胜出 UE 分配/确认 C-RNTI
gNB->>UE: Msg4: Contention Resolution Identity + C-RNTI
Note over UE: 校验 Msg3 镜像一致 → 接入成功, 释放临时 RA-RNTI
Msg1(PRACH Preamble) 在 MAC 层不可见,是一个物理层 Zadoff-Chu 序列。UE 在所选 PRACH Occasion(时频资源)上发送,gNB 据此计算定时提前量(TA)。前导码身份由 6-bit RAPID(0–63)标识。
Msg2(Random Access Response, RAR) 由 MAC 层的 MAC RAR 子头承载,关键 IE:
RA-RNTI = 1 + s_id + 14×t_id + 14×80×f_id + 14×80×8×ul_carrier_id
其中 s_id(0–13)是该 PRACH Occasion 的起始 OFDM 符号索引,t_id(0–79)是子帧内时隙索引,f_id(0–7)是频域索引,ul_carrier_id 区分 NUL(0)/SUL(1)。该公式的精妙之处在于:RA-RNTI 隐式编码了"UE 在哪个 RO 发的 Msg1",gNB 在响应窗口内即可定位到对应 UE,无需额外身份字段。[0, BI] ms 内随机退避后重试。Msg3 由 UE 用 TC-RNTI 加扰发送,承载真正的 NAS/RRC 初始消息,例如:
- 初始接入:RRCSetupRequest(含 5G-S-TMSI 或 random 39-bit ID)
- 重建:RRCReestablishmentRequest(含 C-RNTI、PCI、shortMAC-I)
- 切换:RRCReconfigurationComplete
Msg4 携带 Contention Resolution Identity(即 Msg3 中 UE 自己填的 ID 镜像),仅竞争胜出的那个 UE 镜像匹配成功,将其 TC-RNTI 升格为正式 C-RNTI;其余碰撞 UE 检测到不匹配,则递增功率攀升计数器重新发 Msg1。
前导码选择是 PRACH 的核心算法(TS 38.321 5.1.1),它决定 UE 用哪个 RAPID、属于哪个分组。决策树如下:
flowchart TD
A[RACH 触发] --> B{是否配置了<br/>dedicated preamble?}
B -- 是: HO/BFR/SCell --> C[CFRA 竞争无关<br/>使用指定 ra-PreambleIndex]
B -- 否 --> D[CBRA 竞争式<br/>在可用前导码池中随机选]
D --> E{Msg3 size > messageSizeGroupA<br/>且路径损耗条件满足?}
E -- 是 --> F[Group B<br/>长格式, 支持 LTE 类大 MSG3]
E -- 否 --> G[Group A<br/>短格式, 小 MSG3/默认]
C --> H[选 PRACH Occasion<br/>关联到 best SSB]
F --> H
G --> H
H --> I[计算 PREAMBLE_RECEIVED_TARGET_POWER<br/>启动功率攀升]
I --> J[Msg1 发送]
UE 在可用前导码中选 Group B 需同时满足:
MSG3 size > messageSizeGroupA(典型 56 bit,由 SIB1 配置);P_CMAX - PL ≥ preambleReceivedTargetPower + ΔPreamble + messagePowerOffsetGroupB,即 UE 的最大发射功率足以支撑更激进的目标接收功率。否则选 Group A。设计意图:Group B 的 preamble 携带的信息量更大(更长的 CP/序列,支持大 Msg3 直接走 64QAM),让"覆盖好、有大上行数据"的 UE 一次 Msg3 就能传完,减少来回;而覆盖边缘的 UE 即便选了 Group B 也会因功率不足失败,故用约束条件 2 把它们排除,回到更鲁棒的 Group A。
| 维度 | CFRA(Contention-Free) | CBRA(Contention-Based) |
|---|---|---|
| 前导码来源 | gNB 专用分配(ra-PreambleIndex) |
从公共池随机选 |
| 是否竞争 | 否,独占 preamble | 是,可能碰撞 |
| 适用场景 | HO、BFR、SCell 添加 | 初始接入、重建、SI 请求 |
| 配置来源 | rach-ConfigDedicated.cfra |
RACH-ConfigCommon |
| 时延 | 低(无 Msg4 竞争解决) | 高(需 Msg4) |
PRACH 采用开环功率控制 + 功率攀升(Power Ramping),而非闭环 TPC。UE 不知道 gNB 实际收到的功率,只能从"是否在响应窗口收到 Msg2/MsgB"来推断成败。失败则提升功率重发,直到达到 preambleTransMax 次上限后上报 MAC 给 RRC,触发无线链路问题。
前导码发射功率:
$$P_{\text{PRACH},b,f,c}(i) = \min{ P_{\text{CMAX},f,c}(i),\ P_{\text{PRACH,target}} + PL_{b,f,c} }$$
其中目标接收功率随尝试次数递增:
$$P_{\text{PRACH,target}} = \text{preambleReceivedTargetPower} + \Delta_{\text{PREAMBLE}} + (\text{PREAMBLE_POWER_RAMPING_COUNTER} - 1) \times \text{powerRampingStep}$$
preambleReceivedTargetPower:gNB 期望收到的功率基线(SIB1 配置,典型 −90 ~ −100 dBm);ΔPREAMBLE:与前导码格式相关的偏移(dB);powerRampingStep:4-step 取值 {0, 2, 4, 6} dB;2-step 由 msgA-PreamblePowerRampingStepAlpha 中的 msgA-PreamblePowerRampingStep 定义(ETSI TS 138 321 V17.0.0 已确认该参数映射);PREAMBLE_POWER_RAMPING_COUNTER:从 1 起算,每次重传 +1;PL:UE 估算的下行路径损耗(基于 SSB RSRP)。stateDiagram-v2
[*] --> Idle
Idle --> PwrCalc: RACH 触发<br/>初始化 counter=1
PwrCalc --> Msg1Tx: 计算并按 P_PRACH 发送
Msg1Tx --> WaitRAR: 启动 ra-ResponseWindow
WaitRAR --> Success: 收到含本 RAPID 的 Msg2
WaitRAR --> Backoff: 窗口超时未收到
Backoff --> PwrCalc: counter++<br/>按 BI 随机退避<br/>power += powerRampingStep
PwrCalc --> Fail: counter > preambleTransMax
Success --> [*]: TC-RNTI 升格为 C-RNTI
Fail --> [*]: 上报 MAC RA problem → RLF
关键细节:退避(Backoff)不会重置功率攀升计数器,功率会跨退避持续累加;但若前导码因被 gNB 主动拒绝(如小区禁止接入)而失败,纯粹靠功率攀升无济于事——这是排错时的重要判别点。
| 参数 | 含义 | 典型取值 |
|---|---|---|
preambleReceivedTargetPower |
gNB 期望接收功率基线 | −90 dBm |
powerRampingStep |
功率攀升步进 | 4 dB |
preambleTransMax |
最大重传次数 | n10(10 次) |
ra-ResponseWindow |
Msg2 等待窗口 | 10 slots |
messagePowerOffsetGroupB |
Group B 功率约束偏移 | 0 dB |
messageSizeGroupA |
Group A/B 切换 MSG3 阈值 | 56 bits |
msgB-ResponseWindow(2-step) |
MsgB 等待窗口 | 40 slots |
rsrp-ThresholdMsgA |
2-step/4-step 选择门限 | −110 dBm |
2-step RACH 把 Msg1+Msg3 合并为 MsgA,把 Msg2+Msg4 合并为 MsgB,将往返次数从 2 次降为 1 次。MsgA 在一个 MsgA 传输机会内同时发送 PRACH preamble 和一个 PUSCH 有效载荷(携带 RRC 消息),gNB 一次性回响应。
sequenceDiagram
participant UE
participant gNB
Note over UE: RSRP ≥ rsrp-ThresholdMsgA → 选 2-stepRA
UE->>gNB: MsgA: Preamble + PUSCH payload<br/>(RRCSetupRequest 等一次发完)
Note over gNB: 用 MSGB-RNTI 寻址响应
alt 正确接收 & 资源充足
gNB->>UE: MsgB: successRAR<br/>(TA, C-RNTI, Contention Resolution)
Note over UE: 接入成功
else preamble 收到但 PUSCH 解析失败
gNB->>UE: MsgB: fallbackRAR<br/>(含 UL grant)
Note over UE: 回退到 4-step 的 Msg3
UE->>gNB: Msg3 (用 MsgA 的 preamble 身份)
gNB->>UE: Msg4: 竞争解决
else 完全未收到 MsgB
Note over UE: 超出 msgB-ResponseWindow<br/>counter++ 重发 MsgA 或回退 4-step
end
UE Contention Resolution Identity、TA、C-RNTI 或 TC-RNTI,流程结束。| 维度 | 4-step RACH | 2-step RACH |
|---|---|---|
| 消息数 | 4(Msg1–4) | 2(MsgA/B) |
| 往返次数 | 2 RTT | 1 RTT |
| 寻址 RNTI | RA-RNTI、TC-RNTI、C-RNTI | MSGB-RNTI、TC-RNTI、C-RNTI |
| 上行载荷 | Msg3 才传 | MsgA 即传(preamble+PUSCH) |
| 控制面时延 | 高 | 低,适合 URLLC |
| 资源开销 | 小(仅 preamble) | 大(含 PUSCH) |
| 覆盖边缘表现 | 鲁棒(功率攀升充分) | 较弱,倾向回退 |
| 选择依据 | RSRP < 阈值 | RSRP ≥ rsrp-ThresholdMsgA |
| 失败处理 | 重发 Msg1 | 回退 fallbackRAR→Msg3 或重发 MsgA |
| 适用阶段 | 所有阶段 | RRC_CONNECTED 优先(Rel-17 增强) |
设计意图:2-step 用"多发一段 PUSCH"换取"省一个往返",本质是用频谱资源换时延;但在覆盖边缘,PUSCH 段易失败而 preamble 段成功,此时 fallbackRAR 让流程平滑降级为 4-step,兼顾了效率与鲁棒。
PRACH 流程中涉及三类 RNTI 的接力,理解其计算是抓包识别的基础:
| RNTI 类型 | 用途 | 计算方式 |
|---|---|---|
| RA-RNTI | 加扰 Msg2 的 PDCCH | 1 + s_id + 14·t_id + 14·80·f_id + 14·80·8·ul_carrier_id |
| MSGB-RNTI | 加扰 MsgB 的 PDCCH(2-step) | 同上公式,基于 MsgA 的 RO 位置 |
| TC-RNTI | 临时身份,加扰 Msg3/Msg4 | gNB 在 RAR/MsgB 中动态分配 |
| C-RNTI | 竞争解决后正式身份 | 现有连接态 UE 沿用;新接入由 TC-RNTI 升格 |
RA-RNTI 公式将"时-频-载波"三维 RO 位置压缩为一个 16-bit 值,使 gNB 能在响应窗口内以极低开销完成寻址——这是 PRACH 设计中最具工程美感的细节之一。
Q1: 2-step RACH 和 4-step RACH 的本质区别是什么? A: 本质是往返次数(RTT)与上行载荷时机的差异。4-step 需两次往返(Msg1→Msg2 等授权,Msg3→Msg4 等竞争解决);2-step 将 preamble 与 PUSCH 有效载荷合并为 MsgA 一次发送,gNB 一次响应 MsgB。代价是 2-step 的 MsgA 占用更多上行资源,且覆盖边缘易回退。
Q2: CFRA 和 CBRA 在切换中如何选择?
A: 若目标 gNB 在 HO 命令(reconfigurationWithSync)中给 UE 分配了 rach-ConfigDedicated.cfra(含专用 ra-PreambleIndex 和专用 RO),UE 走 CFRA,无竞争、时延低;否则走 CBRA,从公共池随机选 preamble,可能碰撞。BFR 场景同理优先 CFRA。
Q3: 功率攀升计数器何时重置?
A: 一旦 UE 在响应窗口内成功收到含本 RAPID 的 Msg2(4-step)或 successRAR(2-step),即认为成功,计数器失效;每次 Msg1/MsgA 重传时计数器 +1,达到 preambleTransMax 上限则向高层上报 RA problem。退避(BI)不重置计数器,功率跨退避持续累加。
Q4: RA-RNTI 为什么能唯一标识 UE? A: 它编码了 UE 发送 Msg1 的 PRACH Occasion 的精确时频位置(符号、时隙、频域索引)和上行载波。同一 RO 上不同 UE 通过 RAPID 区分;不同 RO 的 UE 由 RA-RNTI 自然区分。因此 gNB 在响应窗口用 RA-RNTI 寻址即可定位到对应的 RO 群体。
Q5: RSRP 测量如何影响 PRACH 整个流程?
A: 三处关键影响——①决定走 2-step 还是 4-step(rsrp-ThresholdMsgA);②决定选 NUL 还是 SUL 载波(rsrp-ThresholdSSB-SUL);③决定 Group A/B(通过路径损耗 PL 约束,而 PL 由参考功率减去测得 RSRP 得出)。RSRP 估算偏差会级联放大到前导码功率与接入成功率。
msgA-PreamblePowerRampingStepAlpha 与 2-step 功率攀升参数映射本文由「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 等场景全覆盖。
