<!-- title: 5G两步RACH MsgA/MsgB信令机制拆解 -->
<!-- domain: ran -->

# 5G NR 两步随机接入（2-step RACH）MsgA/MsgB 信令机制深度拆解

## 一、为什么需要两步随机接入：从四步到两步的范式转变

5G NR 在 Release 15 沿用了 LTE 的四步随机接入（4-step RACH，Msg1→Msg2→Msg3→Msg4），但 3GPP 在 **Release 16** 引入了**两步随机接入（2-step RACH）**机制，其核心动机并非"步数少一步"这么简单，而是为了解决 5G 网络中三类关键场景的接入瓶颈：毫米波（mmWave）波束失败恢复（BFR）的高时延敏感、小数据传输（SDT）的频繁小包接入开销、以及工业物联网（URLLC）对初始接入时延的极致要求。

在四步 RACH 中，UE 与 gNB 之间需要完成四次空口往返（round trip），其中 Msg1/Msg2 的 preamble 与 RAR 握手主要解决"我在线"与上行同步（TA）问题，Msg3/Msg4 才真正传输身份与竞争解决。这意味着**一个完整的接入至少要付出 4 次空口交互的时延代价**。而 2-step RACH 将"preamble 握手"与"上行数据载荷传输"合并为一条 **MsgA**（PRACH preamble + PUSCH payload），将"RAR 响应"与"竞争解决"合并为一条 **MsgB**，从而将交互轮次压缩到 2 次。

需要强调的是，2-step RACH 并非完全替代 4-step，二者在 5G 网络中**长期共存**，UE 根据 RRC 配置和实时信道质量（RSRP）在两种过程类型间动态选择。规范层面，2-step RACH 的 MAC 过程定义在 **3GPP TS 38.321（MAC 协议规范）Section 5.1 "Random Access procedure"**，物理层参数定义在 **TS 38.213 Section 8**，而相关 RRC 配置信元定义在 **TS 38.331** 的 `RACH-ConfigCommonTwoStepRA`、`MsgA-PUSCH-Config` 等信息元素中。

## 二、随机接入过程类型选择（RA Type Selection）决策机制

UE 何时选择 2-step、何时选择 4-step，并非 UE 自由决定，而是由 **TS 38.321 Section 5.1.2 "Random Access Resource selection"** 中定义的判定逻辑严格控制。其核心判据是 **`msgA-RSRP-Threshold`**（承载于 `RACH-ConfigCommonTwoStepRA` 中）。

判定流程如下：UE 首先根据业务触发原因（initial access、RRC re-establishment、handover、BFR、UL non-sync、SDT 等）确定本次 RA 是否被允许使用 2-step。若该触发的 RACH 资源同时配置了 2-step 和 4-step 资源，UE 测量选定 SS/PBCH block（SSB）或 CSI-RS 的 RSRP：**当 RSRP ≥ `msgA-RSRP-Threshold` 时，UE 选择 2-step RACH；否则回退选择 4-step RACH**。

这一设计意图非常清晰：2-step RACH 要求 UE 在 MsgA 阶段就一次性把上行数据（包括控制信令或用户数据）发送出去，对上行覆盖有较高要求。如果 RSRP 太低（即 UE 处于小区边缘或深度衰落），MsgA 的 PUSCH 部分极可能解码失败，反而不如先通过 4-step 的低阶 preamble 完成握手再发数据可靠。因此 RSRP 阈值是**接入可靠性与时延之间的工程权衡点**，由运营商根据小区半径和部署场景（如室内小站 vs 宏站）配置。

```text
stateDiagram-v2
    [*] --> 触发RA: 初始接入/BFR/切换/SDT
    触发RA --> 选择SSBorCSI-RS: 测量RSRP
    选择SSBorCSI-RS --> 检查2-step配置: 该BWP是否配置2-step资源?
    检查2-step配置 --> 无2step配置: 选择4-step RACH
    检查2step配置 --> 有2step配置: RSRP >= msgA-RSRP-Threshold?
    有2step配置 --> 不满足阈值: 选择4-step RACH (Msg1)
    有2step配置 --> 满足阈值: 选择2-step RACH (MsgA)
    无2step配置 --> [*]
    不满足阈值 --> [*]
    满足阈值 --> [*]
```

此外，对于**基于非竞争的 2-step CFRA（Contention Free Random Access）**——典型场景是切换和 BFR——gNB 会通过专用 RRC 信令（`RACH-ConfigDedicatedTwoStepRA`）直接为 UE 分配专用 preamble，此时不再受 RSRP 阈值约束，UE 直接走 CFRA 2-step 路径，时延最短。

## 三、MsgA 的双重结构：PRACH preamble 与 PUSCH payload 的融合

MsgA 是 2-step RACH 区别于 4-step 的本质所在。一条 MsgA 在物理层上**同时占用两个上行信道资源**：在 PRACH 上发送 preamble（称为 **MsgA PRACH**），在 PUSCH 上发送上行载荷（称为 **MsgA PUSCH**）。这两者并非独立无关联，而是通过规范的映射规则严格绑定。

```mermaid
flowchart TB
    subgraph MsgA["MsgA (一条逻辑消息)"]
        direction TB
        M1["MsgA PRACH (在PRACH上)"] --> M2["MsgA PUSCH (在PUSCH上)"]
    end

    subgraph PRACH资源["PRACH Occasion (RO)"]
        R1["RO 索引<br/>Preamble Index"]
    end

    subgraph PUSCH资源["PUSCH Occasion (PO)"]
        P1["PO 索引<br/>DMRS端口/序列"]
    end

    M1 -.->|"承载preamble"| R1
    M2 -.->|"承载payload"| P1
    R1 ==>|"规范定义映射规则<br/>每个preamble ↔ 一个PO+DMRS"| P1

    subgraph PUSCH载荷["MsgA PUSCH Payload 内容"]
        L1["CCCH SDU<br/>(如RRCSetupRequest) 或"]
        L2["MAC CEs / 用户数据(SDT) 或"]
        L3["C-RNTI MAC CE(切换/BFR)"]
    end
    M2 --> PUSCH载荷
```

这里的关键机制是 **RO（PRACH Occasion）与 PO（PUSCH Occasion）之间的关联映射**。在 TS 38.331 的 `MsgA-PUSCH-Config` 中，网络配置了 PRACH 资源与 PUSCH 资源的对应关系：每个 PRACH preamble 索引被映射到一个特定的 PUSCH 时机（PO）和 DMRS 端口/序列组合。gNB 一旦在某个 RO 上检测到某个 preamble，就**无需额外信令**即可推算出对应的 PO 位置去解码该 UE 的 MsgA PUSCH。这种"preamble 即地址"的设计是 2-step RACH 高效的根本原因。

为了支持 MsgA PUSCH 的传输，preamble 被分为两组：一组专用于 2-step MsgA（每个 preamble 对应一个 PO），另一组预留用于回退（fallback）。`RACH-ConfigCommonTwoStepRA` 中的 `msgA-PUSCH-ResourceGroupA` 等参数定义了分组边界，与 4-step 中的 group A/B 思路类似，用于区分载荷大小（小包用 group A，大包/高路径损耗用 group B）。

MsgA PUSCH 携带的载荷内容取决于触发场景：初始接入时携带 **CCCH SDU**（如 `RRCSetupRequest`）；切换或 BFR 时携带 **C-RNTI MAC CE**；SDT 场景下则直接携带**用户面小数据包**。这意味着 UE 在接入的第一步就能把"我想干什么"甚至"我的数据"一次说清。

## 四、MsgB 响应机制：successRAR 与 fallbackRAR 的双轨设计

UE 发送 MsgA 后，会在配置的 **MsgB 接收窗口**内监听以 **MSGB-RNTI**（即 2-step RACH 的 RNTI，由 RO 的时间/频率索引计算）加扰的 PDCCH。gNB 收到 MsgA 后的响应分为三种 MAC RAR 子 PDU 类型，这是 2-step RACH 信令设计的精髓。

| MsgB 子 PDU 类型 | 触发条件 | 携带的关键信元 | UE 收到后的动作 |
|---|---|---|---|
| **BI（Backoff Indicator）子头** | gNB 限流/过载 | 回退参数 BI | 仅作为窗口参数，UE 暂无成功接入则按 BI 退避 |
| **fallbackRAR** | preamble 检测成功，但 MsgA PUSCH **解码失败** | RAPID、Timing Advance、UL Grant、TC-RNTI | **回退到 4-step**：用 fallbackRAR 的 UL grant 把 MsgA PUSCH 内容作为 Msg3 重传 |
| **successRAR** | preamble 与 MsgA PUSCH **均成功解码** | RAPID、竞争解决 ID、TA、C-RNTI 或 TC-RNTI、UL Grant、可选 PHR 指示 | **接入成功**：竞争解决完成，进入连接态 |

`fallbackRAR` 的设计是 2-step RACH 工程鲁棒性的关键。考虑到 MsgA PUSCH 比 preamble 更脆弱、更易解码失败，规范没有让 UE 直接判定接入失败并重发 MsgA，而是提供了一个"软着陆"通道：gNB 既然已经检测到 preamble（说明 RO 资源已占用、上行粗同步可行），就干脆回退指示 UE 用传统 Msg3 的方式重传载荷，避免 MsgA 重传带来的时延和资源浪费。**fallbackRAR 之后的流程与 4-step 的 Msg3→Msg4 完全等价**。

`successRAR` 则是 2-step RACH 的成功终态。其中**竞争解决 ID（Contention Resolution Identity）**用于解决多 UE 碰撞——若多个 UE 恰好选了同一 preamble，gNB 在 successRAR 中回显成功 UE 的 ID，其余 UE 据此判定碰撞并重发。successRAR 携带的 TA 完成上行精同步，UL Grant 分配后续 PUSCH 资源，C-RNTI（已有连接）或 TC-RNTI（首次接入）完成 RNTI 分配。至此，**一条 MsgA + 一条 MsgB 即完成全部接入**。

## 五、完整信令时序对比

下面用时序图清晰对比 4-step 与 2-step RACH 的完整信令交互，以及 2-step 的成功路径与 fallback 路径。

```mermaid
sequenceDiagram
    participant UE
    participant gNB

    rect rgb(240,245,255)
    Note over UE,gNB: 4-step RACH（传统，4次空口往返）
    UE->>gNB: Msg1 (PRACH Preamble)
    gNB->>UE: Msg2 (RAR: TA + TC-RNTI + UL Grant)
    UE->>gNB: Msg3 (CCCH SDU / C-RNTI MAC CE)
    gNB->>UE: Msg4 (竞争解决)
    Note over UE,gNB: 接入完成
    end

    rect rgb(235,255,240)
    Note over UE,gNB: 2-step RACH 成功路径（2次往返）
    UE->>gNB: MsgA (Preamble@PRACH + Payload@PUSCH)
    Note right of UE: RSRP≥msgA-RSRP-Threshold 触发
    gNB->>UE: MsgB = successRAR<br/>(竞争解决ID + TA + C-RNTI + UL Grant)
    Note over UE,gNB: 接入完成（一步到位）
    end

    rect rgb(255,245,235)
    Note over UE,gNB: 2-step RACH 回退路径（PUSCH解码失败）
    UE->>gNB: MsgA (Preamble成功 + PUSCH解码失败)
    gNB->>UE: MsgB = fallbackRAR<br/>(RAPID + TA + UL Grant + TC-RNTI)
    Note right of gNB: 指示UE回退到Msg3
    UE->>gNB: Msg3 (用fallbackRAR的grant重传PUSCH载荷)
    gNB->>UE: Msg4 (竞争解决)
    Note over UE,gNB: 回退后等价于4-step完成
    end
```

## 六、2-step 与 4-step RACH 工程对比

| 对比维度 | 4-step RACH（Type-1） | 2-step RACH（Type-2） |
|---|---|---|
| **3GPP 引入版本** | Rel-15 | Rel-16 |
| **空口交互轮次** | 4 次 | 2 次（理想）/ 3~4 次（回退） |
| **首条上行消息** | Msg1：仅 preamble，无载荷 | MsgA：preamble + PUSCH 载荷 |
| **PUSCH 时机** | Msg3 才首次传 PUSCH | MsgA 即传 PUSCH |
| **响应信令** | Msg2（RAR）+ Msg4 | MsgB（successRAR 或 fallbackRAR） |
| **接入时延** | 高 | 低（小小区/良好覆盖下显著） |
| **信令开销** | 较大 | 较小（尤其适配 SDT） |
| **覆盖/鲁棒性要求** | 高（preamble 抗衰能力强） | 较高（MsgA PUSCH 需可靠解码） |
| **触发选择判据** | 默认 / RSRP 低时选用 | RSRP ≥ msgA-RSRP-Threshold 且配置了 2-step 资源 |
| **典型适配场景** | 大小区、边缘覆盖、高碰撞 | mmWave BFR、SDT、URLLC、室内小站、切换 CFRA |
| **gNB 检测复杂度** | 低 | 高（联合 preamble+PUSCH 检测、RO/PO 映射） |
| **关键 RRC 配置** | RACH-ConfigCommon | RACH-ConfigCommonTwoStepRA + MsgA-PUSCH-Config |

## 七、RRC 关键配置信元一览

2-step RACH 的使能与参数全部通过 RRC 下发，工程师在抓包或排查时需重点关注以下信元：

| RRC 信元 | 所在 IE | 作用 |
|---|---|---|
| `msgA-RSRP-Threshold` | RACH-ConfigCommonTwoStepRA | **2-step/4-step 选择阈值**，RSRP≥此值才用 2-step |
| `msgA-RSRP-ThresholdSSB` | RACH-ConfigCommonTwoStepRA | 选定 SSB 用于 MsgA 的 RSRP 门限 |
| `msgA-TransMax` | RACH-ConfigCommonTwoStepRA | MsgA 最大传输次数，耗尽后判失败 |
| `msgA-PreambleReceivedTargetPower` | RACH-ConfigCommonTwoStepRA | MsgA preamble 目标接收功率初值 |
| `MsgA-PUSCH-Config` | BWP-UplinkCommon → msgA-PUSCH-Config | PO 资源、DMRS、MCS、TPC、RO↔PO 映射 |
| `msgA-PUSCH-ResourceGroupA` | RACH-ConfigCommonTwoStepRA | preamble 分组边界（小包/大包） |
| `RACH-ConfigDedicatedTwoStepRA` | SpCellConfig 等 | 专用 CFRA 资源（切换/BFR 无竞争 2-step） |

## 八、实战连接：抓包识别与故障排查

**如何在抓包中识别 2-step RACH**：在 Wireshark（配合 MAC/PHY 层解析，如 Amarisoft、srsRAN 或商用基带 log）中，2-step 的特征是 UE 的上行方向上 **PRACH preamble 与 PUSCH 在极短时间窗内同时出现**（而非先 Msg1 等 RAR 再 Msg3）。下行方向用 **MSGB-RNTI 加扰的 PDCCH** 调度 MsgB，其 MAC 层 payload 可展开看到 `fallbackRAR` 或 `successRAR` 子结构，RAPID 与上行 preamble 一一对应。

**常见故障点与排错思路**：

1. **频繁出现 fallbackRAR**：说明 preamble 检测成功但 MsgA PUSCH 反复解码失败。排查方向：上行干扰（检查 RSSI/底噪抬升）、PO/RO 映射配置是否与 gNB 一致、DMRS 配置、MsgA PUSCH 的 MCS 与发射功率（`msgA-PreambleReceivedTargetPower` + 功率爬坡）。若大面积 UE fallback，多为网络侧 MsgA-PUSCH-Config 配置错误或上下行 TA 估计偏差过大。

2. **UE 始终不选择 2-step**：检查 `msgA-RSRP-Threshold` 是否配置过高，或当前 BWP/小区根本未配置 `RACH-ConfigCommonTwoStepRA`，导致 UE 永远走 4-step。也可能是 UE 能力不支持 Rel-16 2-step RACH。

3. **MsgA 重发至 msgA-TransMax 耗尽仍无 MsgB**：上行覆盖严重不足或 gNB 未正确监听对应 RO/PO。应核查 RSRP 是否真的满足阈值（边缘 UE 误判）、preamble 功率爬坡是否生效、RO 资源时频位置是否与小区实际配置匹配。

4. **CFRA 2-step（切换/BFR）失败**：核查 `RACH-ConfigDedicatedTwoStepRA` 是否随切换命令正确下发，专用 preamble 与目标小区 PO 资源是否对应。

## 九、设计意图总结

2-step RACH 的设计哲学可以概括为三点：**其一**，以"preamble 即上行地址"的 RO/PO 映射，消除 4-step 中 Msg1/Msg2 的握手往返，用一次联合上行传输替代两次串行交互；**其二**，以 `msgA-RSRP-Threshold` 实现"好覆盖用快、差覆盖用稳"的自适应类型选择，兼顾时延与可靠性；**其三**，以 fallbackRAR 提供 2→4 的平滑降级通道，在 MsgA PUSCH 失败时不丢弃已建立的 preamble 同步成果，最大化资源复用。这三点共同使 2-step RACH 成为 5G 应对 mmWave、SDT、URLLC 三大挑战的接入层基石。

## 常见问题

**Q1：2-step RACH 一定能降低接入时延吗？**
A：不一定。只有当 UE 处于良好覆盖（RSRP 满足阈值）且 MsgA PUSCH 一次解码成功（收到 successRAR）时，2-step 才真正实现 2 次往返的最低时延。若 MsgA PUSCH 失败触发 fallbackRAR，则退化为 Msg3→Msg4，时延与 4-step 接近甚至更高（多了 MsgA PUSCH 的无效发送）。因此边缘覆盖场景下 4-step 反而更优。

**Q2：MsgA 和 Msg3 是什么关系？**
A：MsgA 的 PUSCH 部分在功能上等价于 4-step 的 Msg3——都是 UE 接入后的第一条上行数据/信令载荷。区别在于 MsgA 把 Msg1（preamble）和 Msg3（payload）合并成一条消息发送，省去了中间 Msg1/Msg2 的握手。正因如此，fallbackRAR 触发后，UE 直接把 MsgA PUSCH 的内容当作 Msg3 重传即可，逻辑无缝衔接。

**Q3：fallbackRAR 和 4-step 的 Msg2（RAR）完全一样吗？**
A：信元结构高度相似（都含 RAPID、TA、UL Grant、TC-RNTI），但承载场景不同。fallbackRAR 出现在 2-step 的 MsgB 窗口内、由 MSGB-RNTI 调度，语义是"你的 MsgA PUSCH 没解出来，请用这个 grant 重传"。收到 fallbackRAR 后，UE 不再重发 MsgA，而是按 4-step 逻辑发 Msg3，后续竞争解决（相当于 Msg4）由 successRAR 或普通竞争解决机制完成。

**Q4：为什么 BFR（波束失败恢复）特别需要 2-step CFRA RACH？**
A：波束失败时 UE 已丢失服务波束，必须尽快在新波束上恢复连接。4-step 需要四次往返，在 mmWave 的苛刻时延下可能触发 RLF（无线链路失败）。2-step CFRA 用专用 preamble 无竞争接入，2 次往返即完成恢复，是 mmWave 波束恢复的关键技术，因此 Rel-16 起 BFR 被设计为优先使用 2-step CFRA。

**Q5：小数据传输（SDT）和 2-step RACH 是什么关系？**
A：SDT（Rel-17 增强）允许 UE 在 RRC_INACTIVE 态直接传小包数据而不进入连接态，2-step RACH 的 MsgA PUSCH 天然适合承载这类小数据——UE 在接入的第一步就把数据发出去。二者结合后，一次 2-step 接入即可完成"接入 + 数据上传"，是 IoT/即时消息等小包场景的极致优化组合。

## 参考来源

1. [3GPP TS 38.321 V18.x — NR; MAC protocol specification, Section 5.1 Random Access procedure](https://www.3gpp.org/dynareport/38321.htm) — 2-step/4-step RA 类型选择、MsgA 发送、MsgB 接收处理
2. [3GPP TS 38.213 V18.x — NR; Physical layer procedures for control, Section 8](https://www.3gpp.org/dynareport/38213.htm) — 物理层 RACH 参数、PRACH occasion 与 PUSCH occasion 映射
3. [3GPP TS 38.331 V18.x — NR; Radio Resource Control (RRC), RACH-ConfigCommonTwoStepRA / MsgA-PUSCH-Config](https://www.3gpp.org/dynareport/38331.htm) — 2-step RACH RRC 配置信元定义
4. [ShareTechnote — 5G/NR 2-Step RACH](https://www.sharetechnote.com/html/5G/5G_RACH_2step.html) — MsgA PUSCH 时序与 RO/PO 映射图解
5. [Amarisoft Tech Academy — NR SA 2-Step RACH](https://tech-academy.amarisoft.com/NR_SA_2Step_RACH.html) — 2-step RACH 实测与配置实践
6. [Techplayon — 5G NR 2-Step RACH](https://www.techplayon.com/5gnr-2-step-rach/) — preamble 选择与 MsgB 类型解析

---
> 本文由「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)
