4-step RACH(Msg1→Msg2→Msg3→Msg4)自LTE时代沿用至今,但在5G三大场景下暴露出明显短板:
3GPP在Release 16(TS 38.321 V16.0.0 Section 5.1.3A)引入2-step RACH,将四步压缩为两步:MsgA(前导码+PUSCH负载)→ MsgB(RAR+竞争解决)。理想情况下接入时延减半,PDCCH开销降低50%。
但2-step RACH并非简单的"四步合并两步"——MsgA的PUSCH负载在无调度授权(Grant-free)条件下发射,gNB可能只检测到前导码而无法解码PUSCH。回退机制(Fallback) 因此成为2-step RACH最精巧也最易被误解的设计。
MsgA由两个物理层部件组成,在时间上连续发射:
┌──────────────────────────────────────────────────┐
│ MsgA │
│ ┌─────────────┐ ┌───────────────────────┐ │
│ │ PRACH │ Gap │ PUSCH Payload │ │
│ │ Preamble │ │ (RRC Request / Data) │ │
│ │ (Msg1等效) │ │ (Msg3等效) │ │
│ └─────────────┘ └───────────────────────┘ │
└──────────────────────────────────────────────────┘
关键设计决策:前导码与PUSCH之间的Gap必须满足gNB处理时间要求(TS 38.213 Section 8.1A),典型值为0-2个OFDM符号。
这是2-step RACH最独特的物理层设计。每个前导码索引(preamble index)通过配置参数映射到一个特定的PUSCH Occasion(PO)。
映射规则遵循TS 38.321 Section 5.1.3A:
PUSCH Occasion Index = (preamble_index) mod (N_preamble_per_PO)
其中N_preamble_per_PO由RRC参数msgA-PUSCH-PreambleGroup-Config配置,典型值为:
| 参数 | 取值范围 | 说明 |
|---|---|---|
numberOfMsgA-PO-perSSB |
1-64 | 每个SSB对应的PUSCH Occasion数 |
numberOfPreambles-perMsgA-PO |
1-64 | 每个PO关联的前导码数 |
msgA-PUSCH-TimeDomainOffset |
0-32 slots | PRACH到PUSCH的时域偏移 |
msgA-PUSCH-FrequencyStart |
0-MAX_RB | PUSCH频域起始位置 |
msgA-PUSCH-NrofRBs |
1-MAX_RB | 每个PO占用的RB数 |
msgA-DMRS-AdditionalPosition |
0-3 | DMRS附加位置 |
graph TD
A[SSB #0] --> B[PRACH Occasion #0]
A --> C[PRACH Occasion #1]
B --> D[Preamble 0-27 → PO #0]
B --> E[Preamble 28-63 → PO #1]
C --> F[Preamble 0-27 → PO #2]
C --> G[Preamble 28-63 → PO #3]
D --> H[MsgA PUSCH: RB 0-11]
E --> I[MsgA PUSCH: RB 12-23]
F --> J[MsgA PUSCH: RB 24-35]
G --> K[MsgA PUSCH: RB 36-47]
style A fill:#4a90d9,color:#fff
style D fill:#50b86c,color:#fff
style E fill:#50b86c,color:#fff
style H fill:#e8963e,color:#fff
style I fill:#e8963e,color:#fff
MsgA PUSCH承载的负载取决于接入场景:
| 场景 | PUSCH负载 | 竞争解决ID |
|---|---|---|
| CBRA from RRC_IDLE | RRCSetupRequest(含40-bit S-TMSI/随机数) | 40-bit UE Identity |
| CBRA from RRC_INACTIVE | RRCResumeRequest/RRCSystemInfoRequest | 40-bit UE Identity |
| CFRA(HO/BFR) | C-RNTI MAC CE | C-RNTI |
| SDT(Rel-17) | RRCResumeRequest + 小数据 | 40-bit UE Identity |
MsgB在PDCCH上以MSGB-RNTI(或RA-RNTI)加扰调度,其MAC PDU由多种subPDU组合而成。这是2-step RACH最复杂的协议设计点。
TS 38.321 Section 6.1.5定义的MsgB MAC PDU结构:
┌─────────┬──────────────┬──────────────┬─────┬──────────────┐
│ BI │ fallbackRAR │ fallbackRAR │ ... │ successRAR │
│ Subhdr │ SubPDU #1 │ SubPDU #2 │ │ SubPDU #N │
│(optional)│ │ │ │ │
└─────────┴──────────────┴──────────────┴─────┴──────────────┘
排列规则(严格的协议约束): - BI subPDU(若存在)必须排在最前 - fallbackRAR subPDU排在successRAR之前 - successRAR subPDU排在最后
UE通过MAC subheader中的LCID字段区分MsgB subPDU类型(TS 38.321 Table 6.2.1-1b):
| LCID值 | subPDU类型 | 含义 |
|---|---|---|
| 000000(0) | fallbackRAR | 回退到4-step RACH |
| 000001(1) | successRAR | 2-step RACH竞争解决成功 |
| 111100(60) | Backoff Indicator | 回退指示 |
| 其他值 | RAPID subheader | 前导码ID匹配指示 |
当gNB检测到前导码但无法解码MsgA PUSCH时,下发fallbackRAR:
| 字段 | 比特数 | 说明 |
|---|---|---|
| E(Extension) | 1 | 是否有后续subPDU |
| T(Type) | 1 | 类型标识 |
| R(Reserved) | 1 | 预留 |
| TA(Timing Advance) | 12 | 时间提前量 |
| UL Grant(Msg3授权) | 27 | 调度Msg3 PUSCH |
| Temporary C-RNTI | 16 | 临时C-RNTI |
| 合计 | 56 bits(7 bytes) |
关键设计意图:fallbackRAR的UL Grant字段直接调度Msg3传输,UE收到后无缝衔接4-step RACH的第三步,避免重新发起随机接入。
当gNB成功解码MsgA前导码+PUSCH时,下发successRAR:
| 字段 | 比特数 | 说明 |
|---|---|---|
| UE Contention Resolution Identity | 48 | 回传UE竞争解决标识 |
| TA(Timing Advance) | 12 | 时间提前量 |
| C-RNTI | 16 | 分配的C-RNTI |
| TPC | 3 | MsgA PUSCH功率控制 |
| MCS | 5 | 调制编码方案 |
| ChannelAccess-CPext | 可变 | 共享频谱信道接入 |
竞争解决ID匹配:successRAR中的UE Contention Resolution Identity必须与MsgA PUSCH中承载的CCCH SDU前48 bits完全匹配。这是2-step RACH竞争解决的核心验证逻辑。
sequenceDiagram
participant UE
participant gNB
Note over UE: 1. 选择SSB(基于RSRP测量)
Note over UE: 2. 选择PRACH Occasion + Preamble
Note over UE: 3. 确定映射的PUSCH Occasion
UE->>gNB: MsgA PRACH Preamble(功率PreamblePower)
Note right of UE: Gap(N_gap个符号)
UE->>gNB: MsgA PUSCH Payload(含RRC请求 + 40bit UE ID)
rect rgb(240, 248, 255)
Note over UE,gNB: MsgB Response Window(msgB-ResponseWindow)
gNB-->>UE: 情况A:MsgB = successRAR
Note right of UE: UE竞争解决ID匹配?
Note right of UE: YES → 接入成功
Note right of UE: NO → 竞争解决失败
end
rect rgb(255, 245, 238)
gNB-->>UE: 情况B:MsgB = fallbackRAR(含Msg3 UL Grant)
UE->>gNB: Msg3 PUSCH(RRC请求重传)
gNB->>UE: Msg4(竞争解决)
end
rect rgb(255, 255, 230)
gNB-->>UE: 情况C:MsgB = BI only(或无响应)
Note right of UE: 等待backoff时间后重发MsgA
Note right of UE: preamblePowerRampingStep递增功率
end
2-step RACH的MAC层行为由TS 38.321 Section 5.1.3A定义的有限状态机驱动:
stateDiagram-v2
[*] --> MsgA_Selection: RACH触发
MsgA_Selection --> MsgA_Transmit: 选择preamble+PO
MsgA_Transmit --> MsgB_Wait: 发射MsgA
MsgB_Wait --> MsgB_Success: 收到successRAR\nn且ID匹配
MsgB_Wait --> MsgB_Fallback: 收到fallbackRAR
MsgB_Wait --> MsgB_Backoff: 收到BI或超时
MsgB_Success --> [*]: 接入完成
MsgB_Fallback --> Msg3_Transmit: 使用fallbackRAR\n中的UL Grant
Msg3_Transmit --> Msg4_Wait: 等待Msg4
Msg4_Wait --> [*]: Msg4竞争解决成功
MsgB_Backoff --> MsgA_Selection: 功率爬升\n(powerRampingStep)
MsgB_Backoff --> [*]: 达到preambleTransMax\n宣告RACH失败
| 定时器/参数 | 配置来源 | 作用 | 典型值 |
|---|---|---|---|
msgB-ResponseWindow |
SIB1/RRC专用 | MsgB响应窗口,超时则重发MsgA | 1-10 slots |
msgA-TransMax |
RACH-ConfigCommon | MsgA最大发射次数 | 3-10 |
powerRampingStep |
RACH-ConfigCommon | 功率爬升步长(dB) | 0/2/3/4/6 |
preambleReceivedTargetPower |
RACH-ConfigCommon | 前导码目标接收功率 | -120 ~ -90 dBm |
msgA-Pusch-DeltaPreamble |
MsgA-PUSCH-Config | PUSCH相对于前导码的功率偏移 | -6 ~ 8 dB |
MsgA的两个部件采用独立的功率计算,但通过deltaPreamble参数建立耦合关系。
$$P_{\text{MsgA,preamble}} = \min\left{P_{\text{CMAX}},\ P_{\text{target}} + \text{PL}\right}$$
其中:
- $P_{\text{target}}$ = preambleReceivedTargetPower + DELTA_PREAMBLE + (PREAMBLE_POWER_RAMPING_COUNTER − 1) × powerRampingStep
- PL = 参考信号功率 − RSRP(UE估计的下行路损)
$$P_{\text{MsgA,PUSCH}} = \min\left{P_{\text{CMAX}},\ P_{O} + 10\log_{10}(M_{RB}) + \alpha \cdot \text{PL} + \Delta_{TF}\right}$$
其中 $P_O$ = $P_{\text{MsgA,preamble}}$ + msgA-Pusch-DeltaPreamble
设计博弈:deltaPreamble为正时,PUSCH功率高于前导码,提高负载解码率但增加UE功耗;为负时节省功耗但可能增加fallback概率。运营商需要根据IoT设备电池能力和小区负载进行权衡。
| 维度 | 4-step RACH | 2-step RACH |
|---|---|---|
| 消息数 | 4(Msg1→Msg2→Msg3→Msg4) | 2(MsgA→MsgB) |
| 理想空口时延 | ~8-16ms(4次TTI) | ~4-8ms(2次TTI) |
| PDCCH开销 | 2次(Msg2调度+Msg4调度) | 1次(MsgB调度) |
| 前导码容量 | 64个/RO | 64个/RO(但需额外PUSCH资源) |
| 适用场景 | 通用接入、大负载传输 | URLLC接入、IoT小数据、SDT |
| 回退机制 | 无需回退 | fallbackRAR回退到4-step |
| 标准化版本 | Rel-15 | Rel-16(增强至Rel-19) |
| 物理层复杂度 | 低 | 高(需管理PUSCH资源映射) |
| gNB实现复杂度 | 标准 | 高(需同时检测preamble+解码PUSCH) |
| 覆盖增强 | 支持(Msg3重复) | Rel-17增强(MsgA PUSCH重复) |
| 层级 | 过滤条件 | 说明 |
|---|---|---|
| PHY | RNTI = MSGB-RNTI | MsgB PDCCH调度指示 |
| MAC | LCID = 0 / LCID = 1 | fallbackRAR / successRAR |
| RRC | msgA-ConfigPresent = TRUE | SIB1中2-step RACH配置 |
| PHY | PRACH Format = A0/A1/B1 | 2-step专用前导码格式 |
场景1:反复收到fallbackRAR
- 现象:UE发MsgA后持续收到fallbackRAR,无法完成2-step接入
- 根因:MsgA PUSCH功率不足或DMRS配置错误,导致gNB无法解码PUSCH
- 排错:检查msgA-Pusch-DeltaPreamble是否合理,确认MsgA PUSCH DMRS参数(scrambling ID、端口映射)
场景2:MsgB超时无响应
- 现象:MsgA发射后msgB-ResponseWindow内无MsgB
- 根因:gNB未检测到前导码(功率过低、SSB选择错误、PRACH资源配置不匹配)
- 排错:检查前导码功率计算,确认msgA-SSB-PerRACHOccasion与SSB测量结果一致
场景3:successRAR中竞争解决ID不匹配
- 现象:收到successRAR但UE竞争解决ID不匹配,宣告竞争解决失败
- 根因:多UE在同一PRACH Occasion选择了相同前导码+PO(概率碰撞)
- 排错:分析numberOfPreambles-perMsgA-PO是否配置过小(导致映射碰撞概率增大)
TS 38.321 V17.x引入以下增强:
numRepetitionsMsgA-PUSCH配置PUSCH重复次数(1/2/4/8),提升覆盖边缘接入成功率2-step RACH的部署决策涉及多层资源与性能权衡:
graph LR
A[2-step RACH\n部署决策] --> B[PUSCH资源预留]
A --> C[前导码分组]
A --> D[功率参数调优]
B --> B1[预留资源多→\n接入成功率↑但\nPUSCH容量↓]
B --> B2[预留资源少→\nPUSCH容量↑但\nfallback概率↑]
C --> C1[每组前导码少→\n映射粒度细\n但碰撞概率↑]
C --> C2[每组前导码多→\n碰撞概率↓\n但PO数量↓]
D --> D1[deltaPreamble高→\nPUSCH解码率↑\n但UE功耗↑]
D --> D2[deltaPreamble低→\nUE功耗↓\n但fallback↑]
style A fill:#d94040,color:#fff
style B1 fill:#50b86c,color:#fff
style B2 fill:#e8963e,color:#fff
style C1 fill:#50b86c,color:#fff
style C2 fill:#e8963e,color:#fff
style D1 fill:#50b86c,color:#fff
style D2 fill:#e8963e,color:#fff
典型配置建议:
| 场景 | numberOfPreambles-perMsgA-PO | deltaPreamble | msgA-TransMax | 建议 |
|---|---|---|---|---|
| 密集城区eMBB | 8 | 0 dB | 5 | 以4-step为主,2-step辅助 |
| 工业URLLC | 4 | 3 dB | 3 | 优先2-step,确保低时延 |
| IoT/mMTC | 16 | 0 dB | 10 | 2-step为主,SDT开启 |
| 覆盖边缘 | 8 | 6 dB | 8 | MsgA PUSCH重复4次 |
Q1: 2-step RACH的fallback和4-step RACH的Msg3重传有什么区别?
A: fallbackRAR是gNB主动触发的回退——gNB检测到前导码但无法解码PUSCH时,通过fallbackRAR提供Msg3 UL Grant,UE利用该授权继续完成4-step流程的Msg3→Msg4。而4-step RACH的Msg3重传是Msg2(RAR)后UE发送Msg3但HARQ失败时的重传。两者触发条件不同,但都使用Msg3 PUSCH传输。
Q2: 运营商如何选择在某个小区启用2-step RACH还是4-step RACH?
A: 3GPP设计允许两种RACH类型共存。通过SIB1中的rach-ConfigCommon和msgA-Config分别配置4-step和2-step资源。UE根据rsrp-ThresholdMsgA决定:RSRP高于阈值时优先使用2-step(信道条件好,PUSCH解码率高),低于阈值时使用4-step。运营商需评估小区IoT设备比例、URLLC需求、PUSCH资源余量等因素。
Q3: MsgA PUSCH的负载大小有限制吗?
A: 有严格限制。MsgA PUSCH的TBS(Transport Block Size)由msgA-PUSCH-MCS和msgA-PUSCH-NrofRBs共同决定。典型配置下TBS为56-200 bits,刚好容纳一个RRCSetupRequest(含40-bit UE Identity)或C-RNTI MAC CE。若需传输更大负载(如SDT场景),Rel-17扩展了MsgA PUSCH的TBS范围,但仍有上限。
Q4: CFRA(无竞争随机接入)能用2-step RACH吗?
A: 可以。TS 38.321 Section 5.1.3A明确支持2-step CFRA,主要应用于切换(HO)和波束失败恢复(BFR)场景。gNB通过RRC专用信令为UE分配专用前导码和PUSCH资源,此时MsgB仅需返回successRAR(无需竞争解决ID匹配,因为前导码是专用的)。
Q5: 2-step RACH在NTN(卫星通信)场景有什么特殊处理?
A: NTN场景中RTT可达数十到数百毫秒,Rel-17/18对2-step RACH做了专项适配。msgB-ResponseWindow需要大幅扩展(远超过地面网络的10 slots上限),同时MsgA重传的功率爬升策略需要考虑超长RTT带来的反馈延迟。此外,NTN的TA(Timing Advance)预补偿机制也影响MsgA的发射定时。
本文由「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 等场景全覆盖。
