随机接入(Random Access, RACH)是UE进入5G网络的“第一声呐喊”,也是整个NR空口流程中最容易被低估复杂度的机制。它横跨TS 38.211(PRACH物理层波形)、TS 38.213(随机接入参数与时序)、TS 38.321(MAC层过程)三个规范,任何一个参数配错都会导致“UE发了Msg1却永远收不到Msg2”这类难以定位的现场问题。本文以TS 38.321第5.1章为主线,逐消息拆解竞争随机接入(CBRA)与非竞争随机接入(CFRA)的每个环节,并给出RA-RNTI计算、退避重传逻辑、抓包识别与排错思路。
根据TS 38.300第9.2.6节,NR中触发随机接入过程的场景包括:
| # | 触发场景 | 典型RA类型 | UE状态 |
|---|---|---|---|
| 1 | RRC_IDLE态初始接入 | CBRA(4-step) | RRC_IDLE |
| 2 | RRC连接重建(RRC Re-establishment) | CBRA | RRC_CONNECTED |
| 3 | 切换(Handover) | CFRA(专用前导码) | RRC_CONNECTED |
| 4 | gNB下行数据到达但上行失步 | CBRA(含C-RNTI MAC CE)或gNB下发PDCCH Order | RRC_CONNECTED |
| 5 | UE上行数据到达但上行失步 | CBRA | RRC_CONNECTED |
| 6 | 从RRC_INACTIVE态恢复 | CBRA | RRC_INACTIVE |
| 7 | 请求其他系统信息(on-demand SI) | Msg1-based或Msg3-based | IDLE/INACTIVE/CONNECTED |
| 8 | 波束失败恢复(Beam Failure Recovery, BFR) | CFRA(SSB/CSI-RS关联的专用前导码) | RRC_CONNECTED |
| 9 | 辅小区激活/SCell添加时的上行同步 | CFRA或CBRA | RRC_CONNECTED |
从机制维度看,NR定义了两个正交的选择轴:
初始接入只能是CBRA;切换和BFR通常走CFRA;2-step主要服务于时延敏感场景(如RRC_INACTIVE小数据传输)。
flowchart TD
A[UE需要随机接入] --> B{是否拥有专用前导码?}
B -->|是 rach-ConfigDedicated| C[CFRA 无竞争]
B -->|否| D[CBRA 基于竞争]
D --> E{网络是否配置了msgA-ConfigCommon?}
E -->|是 且RSRP满足msgA-RSRP-Threshold| F[可选 2-step RA]
E -->|否| G[4-step RA]
F -->|MsgB携带Fallback RAR| G
C --> H[Msg1专用前导码]
F --> I[MsgA = 前导码+PUSCH]
G --> J[Msg1~Msg4 完整四步]
这是整个随机接入最“物理层”也最容易出错的部分。UE在发送Msg1前,必须完成两级决策(TS 38.321 §5.1.1、§5.1.2):
UE基于SSB测量RSRP,选择RSRP高于SIB1中rsrp-ThresholdSSB的SSB波束。如果SIB1中配置了多个rach-ConfigCommon(按SSB分组),UE使用所选SSB对应的那套RACH配置。设计意图很明确:让UE在自己“听得最好”的波束方向上发前导码,gNB才能用对应的接收波束收上来——这是波束赋形时代的必然设计,也是LTE RACH没有的复杂度。
PRACH Occasion(RO)是时频域上的一片PRACH资源。SIB1中rach-ConfigCommon → rach-ConfigGeneric的关键IE如下:
| IE | 含义 | 典型取值示例 |
|---|---|---|
prach-ConfigurationIndex |
查TS 38.211 §6.3.3.1表格,确定PRACH格式、子帧位置、时域密度 | 依FR1/FR2和场景而定 |
msg1-FDM |
频域上每个时刻并行的RO数量 | 1/2/4/8 |
msg1-FrequencyStart |
频域起始RB位置 | 0~NRB-1 |
zeroCorrelationZoneConfig |
前导码循环移位约束,影响单根ZC序列可支持的候选前导码数 | 0~15 |
preambleReceivedTargetPower |
初始前导码接收目标功率 | -202~-90 dBm(步进2) |
preambleTransMax |
前导码最大发送次数 | n4~n200 |
ra-ResponseWindow |
RAR监听窗口长度(以slot为单位) | 最大可达80 slot |
ssb-perRACH-OccasionAndCB-PreamblesPerSSB |
每个RO映射的SSB数N与每SSB竞争前导码数R | 如oneEighth→每RO对应8个SSB |
映射规则(TS 38.213第8章):在关联周期(association period)内按“先频域、后时域”顺序将RO依次映射给SSB;连续多个关联周期组成关联模式周期(association pattern period),之后从头循环。若某SSB没有获得任何RO(N<1的情况),则该SSB不可用于触发随机接入——UE必须换别的SSB。
每个RO承载64个前导码候选。ssb-perRACH-OccasionAndCB-PreamblesPerSSB将这64个候选切分:若配置了Group A/B(ra-Msg3SizeGroupA、messagePowerOffsetGroupB),Msg3(CCCH SDU)尺寸超过门限的UE选Group B前导码(gNB收到后预留更大的Msg3授权),否则用Group A。前导码序列本身由TS 38.211 §6.3.3定义:长格式基于长度839的ZC序列,短格式基于长度139的ZC序列。
flowchart TD
S[测量各SSB的RSRP] --> T{存在RSRP ≥ rsrp-ThresholdSSB的SSB?}
T -->|否| U[无法发起RA<br/>等待信号改善]
T -->|是| V[选出SSB i]
V --> W[在关联周期内找到映射给SSB i的RO集合]
W --> X{Msg3尺寸 > ra-Msg3SizeGroupA?}
X -->|是| Y[选Group B前导码<br/>需满足Group B功率偏移条件]
X -->|否| Z[选Group A前导码]
Y --> A1[在RO内以PREAMBLE_INDEX发Msg1<br/>功率 = preambleReceivedTargetPower<br/>+ ΔPREAMBLE + PREAMBLE_POWER_RAMPING_STEP × 计数器-1]
Z --> A1
sequenceDiagram
autonumber
participant UE
participant gNB
Note over UE: 依据SIB1选择SSB/RO/前导码
UE->>gNB: Msg1: PRACH前导码 (RAPID隐含于时频位置)
Note over gNB: 检测前导码,计算RA-RNTI与RAPID
UE->>gNB: 监听PDCCH (RA-RNTI加扰)<br/>窗口 = ra-ResponseWindow
gNB->>UE: Msg2: MAC RAR (PDCCH DCI 1_0 with RA-RNTI)
Note over UE: 校验RAPID → 应用TA → 存TC-RNTI
UE->>gNB: Msg3: PUSCH (TC-RNTI加扰)<br/>CCCH SDU = RRCSetupRequest
Note over gNB: 解码Msg3,准备竞争裁决
gNB->>UE: Msg4: PDCCH (TC-RNTI) + PDSCH<br/>Contention Resolution MAC CE (48bit) + RRCSetup
Note over UE: MAC CE内容 == 自己的CCCH SDU?<br/>是→TC-RNTI转正为C-RNTI,RA成功
Msg1没有MAC层消息体——UE只是在选定的RO上发送选定的前导码序列。gNB通过“在哪个时频资源上检测到哪条序列”就能反推出RAPID(0~63)和RA-RNTI,这就是Msg2寻址的基础。
RAR是本流程中IE最密集的消息,其MAC PDU结构为:若干MAC子头 + 若干MAC RAR体,一个RAR PDU可同时响应多个前导码(最多携带多个RAPID):
| 字段 | 长度 | 说明 |
|---|---|---|
| E | 1 bit | 扩展位,1表示后面还有子头 |
| T | 1 bit | 0=本子头携带退避指示BI;1=携带RAPID |
| BI | 4 bit | 退避指示,索引映射到0~960ms量级的退避时长(精确映射见TS 38.321相应表格) |
| RAPID | 6 bit | 前导码ID,与UE所发前导码匹配则继续 |
每个MAC RAR体固定56 bit(7字节):
| 字段 | 长度 | 说明 |
|---|---|---|
| Timing Advance Command | 12 bit | 上行定时提前量,粒度随子载波间隔缩放(TS 38.213 §4.2) |
| UL Grant | 27 bit | Msg3资源授权:跳频标志+频域/时域资源分配+MCS(4bit)+TPC(3bit)+CSI请求(1bit) |
| Temporary C-RNTI | 16 bit | 临时C-RNTI,Msg3加扰与Msg4寻址都用它 |
RA-RNTI计算公式(TS 38.321 §5.1.3):
RA-RNTI = 1 + s_id + 14×t_id + 14×80×f_id + 14×80×8×ul_carrier_id
其中:
s_id = 该RO第一个OFDM符号索引 (0 ≤ s_id < 14)
t_id = 该RO在系统帧内的第一个slot索引 (0 ≤ t_id < 80)
f_id = 该RO的频域索引 (0 ≤ f_id < 8)
ul_carrier_id = 0(NUL载波)/ 1(SUL载波)
实例演算:设RO位于某slot的第2个符号(s_id=2)、系统帧内第10个slot(t_id=10)、频域第1个RO(f_id=1)、普通上行载波,则 RA-RNTI = 1 + 2 + 14×10 + 14×80×1 = 1263(十六进制0x04EF)。UE对自己发Msg1的时频位置计算RA-RNTI,再盲检该RNTI加扰的PDCCH——公式两端必须严格一致,这正是排错重点(见第七节)。
收到RAPID匹配的RAR后,UE在UL Grant指示的资源上发送Msg3。初始接入时Msg3内容为CCCH SDU(RRCSetupRequest),PUSCH用TC-RNTI加扰。连接态触发(如场景4/5)时,Msg3改为携带C-RNTI MAC CE——此时竞争裁决走“隐式”路径:UE后续直接守候自己C-RNTI加扰的PDCCH,收不到专用调度即视为竞争失败,无需Msg4 MAC CE。此外,Msg3每次HARQ重传都会重启竞争裁决定时器(ra-ContentionResolutionTimer,SIB1配置,以slot为单位)。
gNB用TC-RNTI调度PDSCH,携带UE Contention Resolution Identity MAC CE(48 bit)——内容就是gNB收到的CCCH SDU原文回传。UE逐位比对:一致说明“这条前导码最终是我的”,TC-RNTI升格为C-RNTI,RA成功并继续解析RRCSetup;不一致或定时器超时,则竞争失败。设计意图:48比特回显比对让两个同时撞前导码的UE几乎必然只有一个胜出(两者CCCH SDU相同的概率极低),且不需要任何额外信令往返。
stateDiagram-v2
[*] --> 发送Msg1
发送Msg1 --> 监听RAR窗口 : 前导码已发
监听RAR窗口 --> 发送Msg3 : 收到RAPID匹配的RAR
监听RAR窗口 --> 退避重选 : 窗口超时无RAR
监听RAR窗口 --> 退避重选 : RAPID不匹配
发送Msg3 --> 监听Msg4 : 每次重传重启定时器
发送Msg3 --> 失败处理 : 竞争裁决定时器超时
监听Msg4 --> RA成功 : MAC CE匹配
监听Msg4 --> 失败处理 : 不匹配或超时
退避重选 --> 发送Msg1 : 按BI退避0~960ms<br/>功率提升PREAMBLE_POWER_RAMPING_STEP<br/>可重选SSB/前导码
失败处理 --> 发送Msg1 : 计数 < preambleTransMax
失败处理 --> RLF : 连续失败达preambleTransMax<br/>触发无线链路失败/重建
RA成功 --> [*]
要点:
PREAMBLE_POWER_RAMPING_COUNTER随失败递增,发送功率按步进爬升;短前导码格式还需叠加ΔPREAMBLE偏移(TS 38.213第8章);preambleTransMax后MAC层上报“随机接入问题”,由RRC决定走重建或RLF流程——很多外场“5G掉线”本质上都是这一步。CFRA的核心是gNB通过RRC专用信令预分配前导码,最典型的是切换流程:gNB在RRCReconfiguration中携带rach-ConfigDedicated → cfra,其中按SSB(或CSI-RS)列出了目标小区可用的PRACH Occasion和前导码ID。UE在目标小区发送专用前导码后,gNB凭唯一的RAPID+RO组合就能锁定“是哪个UE来了”,RAR中的UL Grant直接用于发送RRCReconfigurationComplete(Msg3同时携带C-RNTI MAC CE),全程无竞争、无Msg4回显裁决,切换中断时延因此显著降低。
BFR场景类似:UE检测到波束失败后,在BeamFailureRecoveryConfig指定的候选波束(SSB/CSI-RS)对应的专用前导码资源上发起RA;R16的增强版BFR MAC CE还支持一次上报多个候选波束。另一种特殊CFRA是Msg1-based SI请求:SIB1为on-demand SI分配专用前导码,gNB收到后直接广播对应SI——没有Msg3/Msg4,UE只需在RAR窗口确认即可,最多尝试B次。
R16在TS 38.321 §5.1引入2-step RA Type:MsgA = PRACH前导码 + MsgA PUSCH(后者资源由msgA-ConfigCommon配置,含时频位置、DM-RS、MCS等),MsgB则承担RAR+竞争解决双重职责。MsgB中存在两种MAC子PDU:success RAR(携带TA、竞争裁决身份等,一步到位)和fallback RAR(指示UE退回4-step流程,沿用其中的TC-RNTI继续Msg3/Msg4)。UE是否选2-step取决于:网络是否配置了msgA、MsgA载荷能否放下、以及RSRP是否超过msgA-RSRP-Threshold。该机制与RRC_INACTIVE小数据传输(R17增强)配合,是降低接入时延与信令开销的关键抓手。
识别方法:随机接入纯走空口(Uu),NGAP/NG-U完全无感知,因此商用核心网侧抓包看不到它。识别手段有三:①空口嗅探仪(如 Keysight/QXDM类工具)直接解PRACH;②UE侧QXDM/高通LOG中看RA attempt、RAR received事件;③gNB运维台统计PRACH检测数、RAR成功率、Msg3误块率。Wireshark配合专用mac-lte/nr-lte解析器可看到MAC RAR子PDU中的RAPID、TA、TC-RNTI。
典型故障与排错思路:
| 现象 | 可能根因 | 排错抓手 |
|---|---|---|
| UE发Msg1,始终收不到RAR | ①UE与gNB的SIB1中rach-ConfigCommon不一致(尤其msg1-FDM/FrequencyStart),导致双方算出的RA-RNTI不同;②PRACH根序列规划错误;③PRACH受干扰,gNB虚检 | 比对SIB1实测值与网管配置;核对prach根序列索引;看PRACH干扰底噪 |
| RAR收到,Msg3反复HARQ重传失败 | UL Grant资源太小/MCS过高、TA不准(远点用户)、上行覆盖受限 | 检查ra-Msg3SizeGroupA与Group B使用情况;核对TA命令;查Msg3 BLER统计 |
| Msg4收不到/裁决失败 | TC-RNTI冲突罕见;多为Msg3解码错导致gNB回显不匹配 | 看竞争失败计数器;热点小区关注BI下发频率 |
| 突发RACH风暴 | 信令风暴/小区重建潮;gNB仅能靠BI缓解 | 观察BI分布与preambleTransMax触顶率 |
| 切换失败在目标小区 | cfra中专用前导码RO与实际PRACH配置不匹配 | 比对RRCReconfiguration中cfra与目标小区SIB1 |
Q1: RA-RNTI和Temporary C-RNTI有什么区别? A: RA-RNTI由Msg1占用的时频资源位置通过固定公式算出,用于Msg2(RAR)的PDCCH寻址,同一RO上所有发起接入的UE共享;TC-RNTI是gNB在RAR中分配给UE的临时身份,用于Msg3加扰和Msg4寻址,竞争成功后转正为C-RNTI。
Q2: CBRA和CFRA的区别是什么?
A: CBRA中UE随机选前导码,可能多个UE撞码,需要Msg3/Msg4竞争裁决;CFRA中gNB通过rach-ConfigDedicated预分配唯一的前导码+RO组合,天然无竞争,无Msg4回显,典型用于切换和波束失败恢复。
Q3: 4-step和2-step RACH该如何取舍?
A: 2-step把前导码和数据合并为MsgA,时延和信令开销更低,但需要更多上行资源预留且覆盖受限;4-step鲁棒性更好、覆盖场景更广。UE只有在网络配置了msgA-ConfigCommon且RSRP超过门限时才允许选2-step,收到fallback RAR时须退回4-step。
Q4: 为什么UE收不到Msg2最常见的原因是msg1-FDM不一致? A: RA-RNTI公式中f_id(频域RO索引)是乘性大系数项(14×80×f_id)。若UE和gNB对频域RO划分理解不同(如msg1-FDM按4配置 vs 实际按2生效),双方算出的RA-RNTI完全不同,gNB发出的RAR永远落不到UE盲检的RNTI上,表现为“gNB明明检测到了前导码,UE却一直超时”。
Q5: Msg1-based和Msg3-based SI请求的区别?
A: Msg1-based使用专用前导码请求SI,无需竞争与Msg3,开销最小;Msg3-based使用公共前导码走完整CBRA,在RRCSetupRequest中携带SI请求指示。网络在SIB1中用si-RequestConfig(专用前导码)或si-RequestConfigSUL等决定采用哪种。
注:本文技术细节依据3GPP Rel-15/Rel-16系列规范撰写;因当前会话无法联网抓取,参考来源均为3GPP官网固定规范页,建议读者下载对应版本的正式文本核对具体表格数值(如BI映射表、ra-ContentionResolutionTimer取值)。
本文由「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 等场景全覆盖。
