<!-- title: 5G随机接入RACH原理图解 -->

# 5G随机接入原理：手机开机后发出的“第一声”是如何设计的

前几轮我们讲过调制解调、波束赋形、切换与寻呼。但有一个更底层的问题一直没展开：**UE开机、失步、或收到寻呼之后，是怎么“敲开”网络大门的？** 这就是随机接入（Random Access, RACH）要解决的事。它是切换、TAU、寻呼响应、波束失败恢复等几乎所有移动性事件的共同入口——入口卡住，后面全堵。这一篇我们把它拆开看：为什么必须有随机接入、前导码的数学设计为什么如此精妙、四步握手每一步在防什么错。

## 一、为什么上行需要“敲门”：一个不对称的同步问题

先想一个问题：UE开机后明明已经通过同步信号（SSB）和基站完成了下行同步，为什么还需要随机接入？

答案是：**下行同步了，上行并没有**。

- **下行方向**：基站是唯一的发送者，UE只需要“调谐”到基站的频率和帧头，一个广播就能让所有UE对齐。
- **上行方向**：发送者是一群UE，它们分布在小区的不同位置。电磁波每公里传播约3.3微秒，小区边缘的UE和基站脚下的UE，信号到达时间差可达几十微秒。如果大家不做补偿就直接发数据，各UE的上行信号会互相踩踏，基站根本无法正交地解调。

所以UE必须先**上报“我离你有多远”**，让基站告诉它一个时间提前量（TA, Timing Advance），之后上行才对得上拍。但问题在于：此时上行链路尚未建立，UE连“说话的资格”都没有——基站不知道它存在，也没有给它分配任何资源。

这就形成了一个经典的“先有鸡还是先有蛋”困境：**要分配上行资源，基站得先知道UE；要知道UE，UE得先发上行信号。** 随机接入就是为了打破这个死锁：UE在一个**所有UE共知的固定资源位置**（PRACH时机）上，发一段**基站预先广播过特征的特殊信号**（前导码）。基站不需要提前认识你，只要识别出“有人在X时刻发了Y号前导码”，就能反向估算出传播时延，并启动后续的身份确认流程。

类比一下：新员工第一天到公司，前台没有你的门禁卡（上行资源），但公司有规定——“访客在大门口按三下铃”。铃声本身不含信息，但公司听到铃声、看到你站的位置，就知道“有人来了、他离大门多远”，然后给你临时工牌（TA + 临时标识），走完登记流程。

## 二、敲门的两种方式：竞争的与非竞争的

随机接入分两大类，区别在于“用哪个前导码由谁决定”：

- **基于竞争（CBRA）**：UE自己从广播的候选集中挑一个前导码。既然是自选，两个UE可能撞车——这就是“竞争”，需要后续流程化解。
- **基于非竞争/无竞争（CFRA）**：网络提前指定一个**专属于你**的前导码。既然专用，天然不会撞车，流程更短、成功率更高。代价是网络必须预先知道你要来——典型场景就是切换：源基站提前跟目标基站打好招呼，把专用前导码通过切换命令塞给你。

```mermaid
flowchart TD
    A["什么情况下需要随机接入?"] --> B["网络能提前安排吗?"]
    B -->|"不能, UE自主发起"| C["CBRA 基于竞争"]
    B -->|"能, 网络预先指配"| D["CFRA 无竞争"]

    C --> C1["RRC_IDLE 开机初始接入"]
    C --> C2["RRC_INACTIVE 状态恢复"]
    C --> C3["无线链路失败后重建"]
    C --> C4["上行失步后收到寻呼<br/>或上行数据到达"]
    C --> C5["切换时目标小区未给专用前导码"]

    D --> D1["切换(目标小区指配专用前导码)"]
    D --> D2["波束失败恢复(BFR)"]
    D --> D3["辅小区组SCG添加"]
    D --> D4["定位等需要确定性时延的场景"]
```

CFRA 流程只有两步（发前导码→收随机接入响应），因为“身份”已经包含在专用前导码里了，不需要再走竞争解决。理解了这个分界，现网看到“切换到某小区用CBRA失败率高”时，第一反应就应该是查目标小区的RACH资源是否拥塞或根序列规划是否冲突。

## 三、前导码的数学设计：为什么偏偏是ZC序列

敲门声可以随便设计吗？不行，这段信号要在无调度、低信噪比、大时延扩展的环境下被检测出来，还必须支持几十个UE共用一组资源。5G（和4G一脉相承）选择了 **Zadoff-Chu（ZC）序列**，它的性质简直是为此量身定做的。

长度为 $N_{ZC}$ 的根ZC序列定义（$u$ 为根指数，需与 $N_{ZC}$ 互质）：

$$x_u(n) = \exp\left(-j\frac{\pi u \, n(n+1)}{N_{ZC}}\right)$$

它有三条“超能力”，每一条都对应随机接入的一个工程难题：

| ZC序列性质 | 数学表述 | 解决的工程问题 |
|---|---|---|
| **恒包络（CAZAC）** | 所有采样点模值恒为1 | 信号峰均比低，UE功放成本低、发射效率高 |
| **理想自相关** | 与自身循环移位版本的相关为零，仅在移位点出现尖峰 | 基站做相关检测时尖峰位置=传播时延，一次检测同时完成**存在性判断+TA测量** |
| **理想互相关** | 不同根序列间互相关恒定为 $1/\sqrt{N_{ZC}}$ | 多个UE同时用不同前导码互不干扰，且相邻小区可以用不同根序列组隔离干扰 |

第二条尤其妙：基站把接收信号与本地ZC序列做相关运算，相关峰出现的位置就直接给出往返时延，进而得到距离：

$$d = \frac{c \cdot \tau}{2}$$

也就是说，**前导码既是“敲门声”，也是一把“测距尺”**——Msg1一响，基站连你大概多远都知道了，这就是后续TA命令的来源。

### 从一根序列到64个前导码

每个小区要提供**64个候选前导码**。做法不是存64段序列，而是利用“循环移位仍正交”的性质：把一根长度839的根ZC序列循环移位，每移 $N_{CS}$ 个采样点生成一个新前导码（$N_{CS}$ 是零相关区/循环移位间隔，由SIB广播）。

```mermaid
flowchart TD
    R["根ZC序列 u=物理根序列号<br/>长度839(长格式)"] -->|"循环移位0"| P0["前导码0"]
    R -->|"循环移位 N_CS"| P1["前导码1"]
    R -->|"循环移位 2·N_CS"| P2["前导码2"]
    R -->|"..."| PX["......"]
    R -->|"循环移位 k·N_CS"| PK["前导码k-1"]
    P0 & P1 & P2 & PK --> T{"k个移位够64个吗?"}
    T -->|"839/N_CS ≥ 64, 单根够用"| OK["1个根序列服务本小区"]
    T -->|"839/N_CS < 64, 单根不够"| M["多个根序列拼出64个<br/>→ 需要邻区根序列规划"]
```

### $N_{CS}$ 的两难：半径与速度的博弈

$N_{CS}$ 不能随便小。它必须盖住两部分不确定性：**最大往返传播时延**（决定小区半径）和**多普勒频移对相关峰的展宽**（决定可容忍的UE速度）。简化关系为：

$$R_{max} \approx \frac{c \cdot N_{CS}}{2 \cdot N_{ZC} \cdot \Delta f_{RA}}$$

代入一个真实算例：长格式前导码 $N_{ZC}=839$、$\Delta f_{RA}=1.25\,\text{kHz}$，取 $N_{CS}=13$，则 $R_{max} \approx 3\times10^8 \times 13 / (2\times839\times1250) \approx 1.86$ km——这正是教科书上“NCS=13对应约1.9公里低速率小区”的出处。

这带来一个现网最常见的规划权衡：**$N_{CS}$ 越大，抗时延/抗频偏能力越强，但一根根序列能切出的移位前导码越少**。城区小小区用小 $N_{CS}$，一根根序列就够64个前导码；高铁沿线既要超远覆盖（Format 1长前导码，序列长达3ms、覆盖可达上百公里量级）又要抗350km/h的多普勒，$N_{CS}$ 被迫取很大，于是需要占用好几根根序列，而**相邻小区必须规划不同的根序列组**，否则跨小区前导码虚警（ghost preamble）会让基站“听见不存在的敲门声”。根序列规划冲突，是RACH类无线投诉排查中的经典病根。

## 四、四步握手：每一步都在防一个错

竞争随机接入的标准流程是四步，业内俗称 Msg1~Msg4。我们结合两个UE同时敲门的场景看时序：

```mermaid
sequenceDiagram
    participant UE1 as UE-A
    participant UE2 as UE-B
    participant gNB as gNB

    Note over UE1,UE2: 两者恰好选中同一前导码, 同一PRACH时机发送
    UE1->>gNB: Msg1: 前导码#12 (RA-RNTI对应资源位置)
    UE2->>gNB: Msg1: 前导码#12 (同一时机, 发生碰撞)
    gNB->>gNB: 相关检测: 发现前导码#12有能量, 测得TA
    gNB-->>UE1: Msg2: RAR (TA指令+上行授权+临时C-RNTI)
    gNB-->>UE2: Msg2: RAR (同一个响应, 双方都收到)
    Note over UE1,UE2: 灾难点: 两者以为都接入成功
    UE1->>gNB: Msg3: RRCSetupRequest (携带UE身份)
    UE2->>gNB: Msg3: RRCSetupRequest (不同身份, 空口互踩)
    gNB-->>UE1: Msg4: 竞争解决(回显UE-A的身份)
    Note over UE1: UE-A: 收到自己的身份→接入成功
    Note over UE2: UE-B: 身份不符→接入失败, 退避重试
```

**Msg1：发前导码。** UE从64个候选中随机选一个，在PRACH时机上以初始功率发送。发射功率由广播参数给出目标值（preambleReceivedTargetPower），失败后逐步爬坡。

**Msg2：随机接入响应（RAR）。** 基站在一个**由资源位置算出的固定窗口**内（典型10ms量级）发送响应，UE用 **RA-RNTI** 去PDCCH上盲检属于自己的响应。RA-RNTI完全由UE所用的资源位置决定：

$$\text{RA-RNTI} = 1 + s_{id} + 14\,t_{id} + 14\times80\, f_{id} + 14\times80\times8\, u_{carrier}$$

其中 $s_{id}$ 是PRACH时机的起始OFDM符号号、$t_{id}$ 是帧内时隙号、$f_{id}$ 是频域编号、$u_{carrier}$ 区分正常/辅助上行载波。**UE没有报任何身份，基站凭什么“回信”给你？靠的就是约定的资源位置编码**——你几点几分在几号窗口敲的门，就是你临时的身份号。RAR里携带三样东西：TA指令（约12bit）、上行授权（调度Msg3）、临时C-RNTI。UE从此有了上行“发言权”。

**Msg3：亮明身份。** 第一次接入时，UE通过RRC信令（RRCSetupRequest）携带自己的正式身份（如核心网分配的标识或随机值）。这一步开始才走普通的HARQ重传。

**Msg4：竞争解决。** 这是四步设计中最具巧思的一环。如时序图所示，两个UE撞了前导码后会收到**同一份**RAR，双方都以为自己成功了，并在相同的授权资源上发Msg3——空口互相踩踏。网络必须做个了断，两种机制：

- ** contention resolution via identity**：基站把胜出者的Msg3身份**原样回显**（Msg4）。只有看到“自己名字”的UE才宣告成功，落选者立刻静默退避。
- **C-RNTI机制**：已有C-RNTI的UE（如失步重连场景）收到以自己C-RNTI加扰的调度指令，即视为竞争解决。

同时，Msg4成功后临时C-RNTI“转正”为该UE的C-RNTI。整套设计用**最少的信令轮次**把碰撞、误判、身份冒用全部兜住——这就是“为什么是四步而不是三步或五步”的答案：前两步建立同步与资源，后两步完成身份确认与冲突仲裁，缺一不可。

## 五、失败了怎么办：功率爬坡、退避与重试的天花板

随机接入本质上运行在无调度、无反馈的信道上，失败是常态，协议用三个参数把“韧性”和“稳定性”平衡起来：

```mermaid
flowchart TD
    S["发送前导码(第N次尝试)"] --> W{"窗口内收到Msg2 RAR?"}
    W -->|"是"| C{"Msg4竞争解决成功?"}
    C -->|"是"| DONE["接入成功<br/>临时C-RNTI转正"]
    C -->|"否"| FB["回落: 视为本次失败"]
    W -->|"否"| HB["失败处理"]
    FB --> HB
    HB --> P{"尝试次数达到上限?"}
    P -->|"否"| BK["按广播的退避参数<br/>随机等待0~Backoff时间"]
    BK --> RP["功率提高一个步长(典型2~4dB)<br/>重选前导码, 回到发送"]
    P -->|"是"| FAIL["宣告随机接入失败<br/>触发链路失败/重建/重选小区"]
```

- **功率爬坡（Power Ramping）**：每失败一次，发射功率提高一个步长（stepRamp，典型2或4dB）。这暗合CDMA时代“让基站听见弱者”的哲学——边缘UE靠一次次加码挤进检测门限。接收端KPI里如果看到大量前导码达到最大功率仍失败，基本指向覆盖空洞或上行干扰。
- **随机退避（Backoff）**：收到.Msg2失败指示（或压根没收到响应）后，UE在[0, Backoff]区间内随机等待再重试。**随机化是关键**——如果固定等待，碰撞的UE们会整齐划一地再次同时撞车；随机化让“竞争”在时间维度上被拆散。这正是1970年代ALOHA协议“随机重发”思想在蜂窝网里的直系后代。
- **尝试上限与计时器**：UE侧维护前导码发送计数器与上限（preambleTransMax），并在发Msg3时启动RRC连接建立计时器（T300）；超限或超时即宣告失败，UE回到空闲态重新评估小区。**接入失败被协议明确设计为“可接受、可恢复”的路径**，而不是异常。

## 六、5G的两点增强：让敲门声“带波束信息”和“只敲一次”

5G在继承四步框架的同时，做了两项针对自身痛点的改造。

**第一，SSB与前导码资源的关联映射。** 上一轮讲波束赋形时提到，毫米波基站用几十个窄波束扫描覆盖。如果UE发的Msg1不带波束信息，基站就不知道该往哪个波束方向回RAR。5G把SSB波束与PRACH时机/前导码分组做了**周期性关联**：UE选中哪个SSB，就只在与该SSB关联的时机上发对应分组的前导码。基站收到Msg1，立刻知道“这个UE在我的几号波束方向上”，后续RAR、Msg3、Msg4全部用这个波束对准它。**前导码从纯粹的同步信号，升级成了携带波束方向信息的粗定位信令**——这是5G RACH相比4G最本质的增强，也是现网波束类参数（如每SSB的PRACH配比）优化的原理基础。

**第二，两步随机接入（2-step RACH），四步压缩成两步。** 四步流程在低时延和高密度场景下偏重：海量物联网终端每次唤醒都走四步，信令开销占比过高；URLLC业务对1~2ms的额外时延敏感。于是标准演进后期（Rel-16起商用化）引入两步方案：

$$\text{MsgA} = \text{Msg1(前导码)} + \text{Msg3(PUSCH数据)}， \quad \text{MsgB} = \text{Msg2(RAR)} + \text{Msg4(竞争解决)}$$

| 维度 | 四步接入 | 两步接入 |
|---|---|---|
| 空口轮次 | 4次（2次上行+2次下行） | 2次（MsgA上行、MsgB下行） |
| 时延 | 约2个RTT以上 | 约减半 |
| 信令开销 | 每次接入4条消息 | 高密度小包场景显著降低 |
| 碰撞影响 | 仅Msg1碰撞，Msg3可用HARQ挽救 | MsgA中PUSCH部分也会碰撞，冲突代价更高 |
| 覆盖 | 前导码+Msg3独立优化 | PUSCH与前导码同传，边缘UE可回退四步 |
| 典型场景 | 通用、覆盖受限小区 | 小包高频唤醒（IoT）、低时延业务 |

注意最后一列的“回退”：若MsgB迟迟未到，UE按网络配置自动**降级回四步流程**继续（把已发的MsgA当作Msg1，走Msg2~Msg4）。这种“两步为主、四步兜底”的双轨设计，让运营商可以按小区负荷和业务画像灵活开关——现网参数上体现为msgA相关配置与回退开关。

## 七、现网视角：工程师会在哪里遇到这些原理

理解原理的最终目的是排障。随机接入相关知识在日常工作中有四个高频落点：

1. **RACH成功率KPI分层看**。运营商网管通常拆成三级：Msg1检测率（前导码被收到）、Msg2成功率（响应送达）、Msg4竞争解决成功率。**Msg1差→覆盖/上行干扰/PRACH配置问题；Msg2差→下行覆盖或响应窗口配置问题；Msg4差→前导码拥塞或冲突率高**。分层定位比笼统的“接入失败率”高效得多。
2. **根序列规划**。跨小区根序列/前导码组若规划冲突，会产生虚警前导码（把邻区用户认成自己的），表现为“无故的Msg1→无Msg2”，在高铁、高架、水面等超远覆盖场景尤其高发。排查口诀：先查NCS是否匹配小区半径与车速，再查邻区根序列组是否正交分配。
3. **PRACH时机密度与容量**。PRACH时机的时频密度决定了每秒能承载的接入尝试数。大型场馆、地铁站等高密度场景，接入风暴（如球赛散场）会体现为前导码拥塞——调整时机密度、增配专用前导码分组，是无线优化常规手段。
4. **切换失败先看RACH**。切换的最后一步常常是向目标小区发前导码。若目标小区RACH配置（格式、NCS、根序列）与实际覆盖半径不符，切换必然高失败。跨厂商边界交接时，RACH参数表不一致是经典坑位。

常见调试陷阱还有一个：**把RACH失败笼统归因为“信号弱”**。实际上RA-RNTI算错导致的PDCCH盲检落空、Msg3上行授权过小、竞争解决计时器过短等信令层问题，症状与覆盖差一模一样。遇到疑难，抓一份空口信令看Msg1~Msg4到底断在哪一步，永远比看路测RSRP猜更可靠。

## 常见问题

**Q: 前导码（Msg1）和Msg3都从UE发出，为什么Msg1不走HARQ重传而Msg3走？**
A: 因为两者可靠性的实现机制不同。Msg1是ZC序列，本身没有信息承载，靠**功率爬坡+多次重发**换取检测概率，协议层面就是“发一次赌一次、输了加码再来”；而Msg3是真正的数据（携带RRC信令），已有上行同步和调度授权，可以走标准的HARQ+自适应重传机制，效率更高。这是“无反馈信道用扩频/爬坡，有反馈信道用重传”的典型分工。

**Q: 64个前导码是每个小区独享的吗？相邻小区会互相干扰吗？**
A: 不是独享。64个前导码是每小区的**逻辑编号空间**，相邻小区若使用相同的根序列组，同一编号在两小区可能对应相同序列，边缘UE的发送会被邻区误检（虚警）。规划上通过给相邻小区分配**不同的物理根序列号区间**来隔离；$N_{CS}$ 越大每根序列切出的前导码越少，占用根序列越多，邻区规划越紧张——这就是高速/超远覆盖场景根序列资源“不够分”的根源。

**Q: 随机接入和CDMA有什么关系？都用了扩频码？**
A: 思想同源但用途不同。CDMA用扩频码区分**长期并行的多个用户**（每个用户始终占用一个码道）；随机接入的ZC前导码只用于**瞬时的“存在性宣告”**，一次接入结束后码资源即释放。两者都利用了“良好相关特性的码字正交/准正交”这一数学武器，但随机接入还要额外解决“无调度下的碰撞仲裁”，所以有了四步握手；CDMA用户间有网络统一调度功率，不需要仲裁环节。

**Q: 切换时用CFRA，为什么有时还是看到切换过程走了CBRA？**
A: CFRA需要目标小区预先指配专用前导码并通过切换命令下发。当目标小区RACH资源紧张、或跨厂商接口未协商专用前导码、或专用前导码发送后超时无响应时，UE会回退到竞争流程。所以现网“切换RACH方式”是**协商结果而非固定属性**，排查切换时延偏大时，先确认实际走的是哪条路径。

**Q: 两步接入会全面取代四步接入吗？**
A: 不会。两步在低时延和信令开销上占优，但MsgA把前导码和数据捆绑发送，碰撞时损失更大，且对覆盖边缘的PUSCH功率要求更高。四步凭借“先轻后重”的分步设计（先确认同步再传数据）在覆盖受限和低负荷场景更稳健。两者是互补关系：网络按小区的业务画像配置，UE按网络指示选用，失败自动回退——这也是移动通信标准设计的一贯哲学：**不给单一场景开特效药，给所有场景留退路**。

## 参考来源

5. 《通信原理》（樊昌信等）及3GPP NR无线协议类教材 — 本文ZC序列公式、$N_{CS}$ 与小区半径关系、RA-RNTI构成、功率爬坡机制等教科书内容的体系化参照

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