<!-- title: 5G PRACH随机接入功率控制拆解 -->
<!-- domain: ran -->

# 5G PRACH 随机接入：前导码选择与功率攀升机制深度拆解

随机接入（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、寻址逻辑与故障定位思路。

---

## 一、为什么是"两条腿"：4-step 与 2-step 的并存逻辑

在 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 |

---

## 二、4-step RACH 完整信令时序

经典竞争式四步流程的信令时序如下，其中 Msg1/Msg3 为上行，Msg2/Msg4 为下行：

```mermaid
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
```

### 逐步 IE 解析

**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**：用于加扰承载 RAR 的 PDCCH。计算公式为：
  `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，无需额外身份字段。
- **Timing Advance Command（12 bit）**：UE 据此调整上行帧时间对齐。
- **UL Grant（27 bit）**：为 Msg3 分配上行 PUSCH 资源（MCS、RB、功率修正等）。
- **Temporary C-RNTI（16 bit）**：在竞争解决前临时使用。
- **Backoff Indicator（BI）**：当 gNB 负荷高或多个 UE 碰撞时，指示 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。

---

## 三、前导码选择决策：CFRA/CBRA 与 Group A/B

前导码选择是 PRACH 的核心算法（TS 38.321 5.1.1），它决定 UE 用哪个 `RAPID`、属于哪个分组。决策树如下：

```mermaid
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 发送]
```

### Group A 与 Group B 的选择条件（TS 38.321 5.1.1）

UE 在可用前导码中选 Group B 需**同时**满足：

1. `MSG3 size > messageSizeGroupA`（典型 56 bit，由 SIB1 配置）；
2. 路径损耗约束：`P_CMAX - PL ≥ preambleReceivedTargetPower + ΔPreamble + messagePowerOffsetGroupB`，即 UE 的最大发射功率足以支撑更激进的目标接收功率。

否则选 Group A。**设计意图**：Group B 的 preamble 携带的信息量更大（更长的 CP/序列，支持大 Msg3 直接走 64QAM），让"覆盖好、有大上行数据"的 UE 一次 Msg3 就能传完，减少来回；而覆盖边缘的 UE 即便选了 Group B 也会因功率不足失败，故用约束条件 2 把它们排除，回到更鲁棒的 Group A。

### CFRA 与 CBRA 对比

| 维度 | CFRA（Contention-Free） | CBRA（Contention-Based） |
|------|------------------------|------------------------|
| 前导码来源 | gNB 专用分配（`ra-PreambleIndex`） | 从公共池随机选 |
| 是否竞争 | 否，独占 preamble | 是，可能碰撞 |
| 适用场景 | HO、BFR、SCell 添加 | 初始接入、重建、SI 请求 |
| 配置来源 | `rach-ConfigDedicated.cfra` | `RACH-ConfigCommon` |
| 时延 | 低（无 Msg4 竞争解决） | 高（需 Msg4） |

---

## 四、PRACH 功率攀升与退避机制

PRACH 采用**开环功率控制 + 功率攀升（Power Ramping）**，而非闭环 TPC。UE 不知道 gNB 实际收到的功率，只能从"是否在响应窗口收到 Msg2/MsgB"来推断成败。失败则提升功率重发，直到达到 `preambleTransMax` 次上限后上报 MAC 给 RRC，触发无线链路问题。

### 核心公式（TS 38.213）

前导码发射功率：

$$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）。

### 功率控制状态转换

```mermaid
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 主动拒绝（如小区禁止接入）而失败，纯粹靠功率攀升无济于事——这是排错时的重要判别点。

### 关键 RRC 参数一览（RACH-ConfigGeneric / Common）

| 参数 | 含义 | 典型取值 |
|------|------|---------|
| `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（MsgA/MsgB）与回退

2-step RACH 把 Msg1+Msg3 合并为 **MsgA**，把 Msg2+Msg4 合并为 **MsgB**，将往返次数从 2 次降为 1 次。MsgA 在一个 MsgA 传输机会内同时发送 PRACH preamble 和一个 PUSCH 有效载荷（携带 RRC 消息），gNB 一次性回响应。

```mermaid
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
```

### MsgB 的两种响应子类型

1. **successRAR**：preamble 与 PUSCH 均成功，直接给出 `UE Contention Resolution Identity`、TA、`C-RNTI` 或 `TC-RNTI`，流程结束。
2. **fallbackRAR**：preamble 收到但 PUSCH 部分失败。gNB 通过 fallbackRAR 给出上行授权，UE 用 MsgA 中相同的 preamble 身份发送 **Msg3**（即回退到 4-step 的第 3、4 步），避免从头竞争。

### 2-step vs 4-step 全面对比

| 维度 | 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，兼顾了效率与鲁棒。

---

## 六、RNTI 寻址：让 gNB 找到对的 UE

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 设计中最具工程美感的细节之一。

---
## 八、机制设计意图总结

1. **"按需选择"优于"统一流程"**：2-step/4-step 双轨 + RSRP 门限，让 UE 根据实时覆盖自主选型，避免一刀切。
2. **RA-RNTI 隐式寻址**：用资源位置编码身份，省去额外 ID 字段，是高并发接入的关键。
3. **功率开环 + 指数级攀升**：在未知信道状态下用最简策略逼近可接收功率，配合 BI 退避避免拥塞雪崩。
4. **Group A/B 分层**：以极小的 preamble 分组代价，让大业务量 UE 提前获得资源倾斜。
5. **fallbackRAR 平滑降级**：保证 2-step 失败时无缝衔接 4-step，避免推倒重来。

---

## 常见问题

**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 估算偏差会级联放大到前导码功率与接入成功率。

---

## 参考来源

1. [3GPP TS 38.321 V18.x — NR MAC protocol specification, Section 5.1 Random Access procedure](https://portal.3gpp.org/desktopmodules/Specifications/SpecificationDetails.aspx?specificationId=3194) — 前导码选择、MsgA/MsgB、计数器与回退机制的权威定义
2. [ETSI TS 138 321 V17.0.0 (PDF)](https://www.etsi.org/deliver/etsi_ts/138300_138399/138321/17.00.00_60/ts_138321v170000p.pdf) — 确认 `msgA-PreamblePowerRampingStepAlpha` 与 2-step 功率攀升参数映射
3. [3GPP TS 38.213 V18.x — NR Physical layer procedures for control, Section 8 PRACH transmission & power control](https://www.3gpp.org/dashboards/Specs) — PRACH 发射功率公式、RA-RNTI/MSGB-RNTI 计算、RO 到 SSB 映射
4. [ShareTechnote — 5G RACH & Power Control](https://www.sharetechnote.com/html/5G/5G_RACH.html) — 2-step RACH MsgA/MsgB 流程图与功率攀升计数器图解
5. [CafeTele — 5G NR Random Access Procedure (PRACH, Msg1–Msg4, 2-Step RACH)](https://www.cafetele.com/articles/article-5g-nr-random-access-rach.html) — 4-step/2-step 全流程对比与优化参数
6. [3GLTEInfo — 5G NR MAC Random Access (TS 38.321 Rel-18)](https://www.3glteinfo.com/5g/protocols/mac/random-access/) — Release 18 下 CFRA/CBRA、Group A/B 选择条件与 RRC 参数表

---
> 本文由「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学通信知识星球海报-扫码加入](https://wiki.500nian.com/images/zhixingqiu_qrcode.png)
