想象你走进一个坐满陌生人的礼堂,想上台发言。台上的主持人一直在讲话(基站的下行广播信号,谁都能听),所以你听得懂会场规则;但主持人不知道你是谁、坐在哪一排、离台有多远——而话筒只有一支,时机也只有一份。
手机开机的那一刻就是这种处境。它能通过下行同步信号“听懂”基站广播的一切:频率、帧结构、小区配置。可反过来,基站对它一无所知:不知道它存在,不知道它距离几百米还是几十公里,更没有给它分配过任何上行资源。上行链路上所有常规信道——业务数据、控制反馈、探测信号——全都默认“你已经校准好了时钟、已经拿到了资源许可”。唯独随机接入(RACH)什么都不假设。它是整张网的前门,也是上行链路唯一的“无票入场通道”。
很多人第一次接触 RACH 都会问:为什么搞得这么麻烦?答案是一个经典的鸡生蛋困境——手机想申请资源就得先说话,可说话本身就需要资源。随机接入就是为了打破这个死循环而专门设计的“免调度开口机制”。
随机接入一次要同时解决四件事,理解了这四件事,后面所有看似繁琐的设计都能对上号:
任何一次切换、一次失步恢复、一次波束失败自救,本质上都绕回这四件事——因为触发随机接入的场景虽然五花八门,但病根都是同一个:上行时钟不可信了。
flowchart TD
A["什么情况下需要随机接入"] --> B["开机第一次入网"]
A --> C["切换到新小区"]
A --> D["闲置太久<br/>上行时钟已失步"]
A --> E["申请资源一直没人理<br/>调度请求失败"]
A --> F["波束突然失效<br/>需要换天线救场"]
B --> G["手机自己发起<br/>只能走竞争模式"]
D --> G
E --> G
C --> H["网络早有安排<br/>发专属前导码免竞争"]
F --> H
注意这张图的分岔:手机主动发现的场景只能走“竞争模式”(谁都有份抢);而网络主动安排的场景(切换、波束恢复)可以提前塞给手机一个专属前导码,走“免竞争通道”。这个区别是理解整个机制的钥匙,后面细讲。
竞争模式下,每个小区预备了 64 个前导码,手机随机挑一个发出去。算一下信息量:$\log_2 64 = 6$,整个 Msg1 只携带 6 个比特。这是全网最“话少”的一条消息,但它必须在一无所知的条件下被基站可靠检测到——甚至基站连它什么时候到、从哪个方向来都不清楚。所以前导码的全部智慧都压在了波形设计上,这就是 ZC(Zadoff-Chu)序列。
$$x_u(n)=\mathrm{e}^{-\mathrm{j}\pi u n(n+1)/L_{\mathrm{RA}}},\quad n=0,1,\dots,L_{\mathrm{RA}}-1$$
为什么偏偏选它?两大性质堪称为此量身定做:
$$R(k)=\sum_{n=0}^{L_{\mathrm{RA}}-1}x(n)\,x^{*}\big((n+k)\bmod L_{\mathrm{RA}}\big)=\begin{cases}L_{\mathrm{RA}}, & k=0\ 0, & k\neq 0\end{cases}$$
直觉上可以这样理解:把序列想象成一条环形跑道上的脚印图案。拿着复印的图案沿跑道错位对比——只要错开哪怕一格,图案就完全不重合(相关值为零);只有转到完全对齐的那一点,才出现一根又高又尖的“针峰”。这根针峰出现的位置,恰好就是前导码晚到的时间——一举两得:峰在哪个“移位档位”说明手机选的是哪个前导码(谁在举手),峰偏移了多少说明传播时延多大(他离多远)。
一个小区要 64 个前导码,如果用 64 条互不相干的序列,彼此互相关就不会理想,容易误检。工程师的解法极其省料:只用一条根序列,做不同的循环移位。类比:同一段旋律,有人从第 1 小节开口,有人从第 5 小节开口——旋律“指纹”相同,但起点错开,接收机靠相关峰的位置就能区分,且只要移位间隔足够大,二者完全正交。
$$\text{单根序列可派生前导码数}=\left\lfloor \frac{L_{\mathrm{RA}}}{N_{\mathrm{cs}}} \right\rfloor$$
这里的 $N_{\mathrm{cs}}$(移位间隔)是现网最“物理”的一个参数——它直接编码了小区半径。间隔必须大于最远用户的往返时延加多径扩展,否则远端用户的峰就会“串档”到近端用户的移位格子里。于是出现一条工程铁律:小区越大 → 移位间隔越大 → 单根序列派生出的哨子越少 → 需要动用更多条根序列才能凑满 64 个。举个量级估算:5 公里半径的小区,往返时延约 33 微秒,单根序列大约只能派生十几个前导码,凑齐 64 个得占用 4 条根序列。邻区之间的根序列必须错开规划——这就是无线优化里经典的“PRACH 根序列规划”,思路和 PCI 规划如出一辙。规划不当的典型症状是“前导码污染”:邻区的用户被本小区误检成幽灵举手,白白消耗应答资源。
另外还有个高铁专属细节:350 公里时速带来的多普勒频移会把相关峰“晃”出虚假的鬼峰,造成误检。解决办法是把高速场景下容易混淆的那些移位档位拉黑禁用(受限集模式),代价是单根序列可用的哨子更少。普通小区用不上,铁路沿线小区必开。
序列之外还有“格式”之分,本质是在覆盖距离、抗噪能力、时间开销之间做取舍:
| 维度 | 长前导码 | 短前导码 |
|---|---|---|
| 序列长度 | 839 | 139 |
| 子载波间隔 | 1.25 / 5 kHz | 15/30/60/120 kHz |
| 可用频段 | 仅低频大塔(FR1) | 低频毫米波(FR1/FR2)都行 |
| 家族成员 | 0、1、2、3 四种 | A1-A3、B1-B4、C0、C2 九种 |
| 设计取向 | 单发长音够得远 | 短促可重复,帧结构对齐数据,便于波束逐个扫射接收 |
长格式家族的分工一目了然:
| 格式 | 子载波间隔 | 序列重复 | 大致撑得起的小区 | 典型用途 |
|---|---|---|---|---|
| 0 | 1.25 kHz | 1 次 | 约 14.5 公里 | 默认宏站 |
| 1 | 1.25 kHz | 2 次+超长前缀 | 约 100 公里 | 草原、海面超大区 |
| 2 | 1.25 kHz | 4 次 | 约 22 公里 | 靠重复次数换覆盖 |
| 3 | 5 kHz | 4 次 | 约 14.5 公里 | 高铁(间隔加宽抗多普勒) |
规律很朴素:够不着就重复几遍,重复次数就是覆盖增益;距离特别远就拉长循环前缀,容忍更晚的到达。选格式的原则是“够用就好”——给 500 米的小站配百公里格式,等于让哨声占满整条跑道,随机接入机会变稀,高峰期冲突概率反而飙升,把覆盖问题换成了接入拥塞问题。
竞争模式的标准流程是四步,一套完整的“举手—递话筒—自报家门—发工牌”礼仪:
sequenceDiagram
participant U as 手机
participant G as 基站
Note over U,G: 竞争模式的四步握手
U->>G: Msg1 哨声前导码(64选1)
G->>U: Msg2 应答(提前量+许可+临时号牌)
U->>G: Msg3 连接请求(自报家门)
G->>U: Msg4 竞争解决(复述身份确认)
| 步骤 | 学名 | 里面装了什么 | 类比 |
|---|---|---|---|
| Msg1 | 前导码 | 64 选 1 的签名,发在专用时频格上 | 举手吹哨 |
| Msg2 | 随机接入响应 | 定时提前 + 首张上行许可 + 临时号牌 | 老师点名递话筒 |
| Msg3 | 第一句正式话 | 带身份的连接请求 | 自报家门 |
| Msg4 | 竞争解决 | 回显身份,颁发正式身份 | 复述确认,发工作证 |
四步里藏着两个精彩的设计巧思,值得单独拎出来讲。
巧思一:没有名字,就用“时间+地点”当名字。 手机发 Msg1 时还没有任何身份,基站怎么把应答精准递给它?答案是基站按“你在哪个符号、哪个时隙、哪个频率格喊的哨”计算出一个临时编号(RA-RNTI),并用它加扰应答的控制信道:
$$\text{RA-RNTI}=1+s_{\text{id}}+14 \times t_{\text{id}}+14 \times 80 \times f_{\text{id}}+14 \times 80 \times 8 \times \text{载波号}$$
手机自己也会算同一个数——“我是下午三点在 3 号窗口喊的话”,于是它只盯着这个编号等应答。好比酒店前台喊:“3 号窗口刚才喊话的那位客人,请来取您的房卡。”不需要知道姓名,也不会递错人。这就是无身份通信里“用时空坐标替代身份”的经典思路。
巧思二:Msg2 一次塞齐三件套。 应答里同时装着:定时提前命令(校表)、上行许可(第一批资源,指明 Msg3 用什么时频资源、什么调制编码发送)、临时号牌(供 Msg3 和后续信令使用)。手机拿到提前量后立刻校准上行时钟——从此刻起,它发的信号才第一次“落进”基站的接收窗内。也就是说,Msg3 是手机人生中第一次按时到达的上行传输,此后常规的调度通信才成为可能。
为什么递完话筒还不能散场?因为 64 个哨子里,甲乙两人可能恰好选了同一个。两人同时举手,基站只听到“一声”,于是只发一份应答——两人都以为话筒是自己的,挤在同一块资源上同时开口。接下来分三种结局:
flowchart TD
A["甲乙同选一号哨声"] --> B["基站只听到一声举手"]
B --> C["回同一张上行许可"]
C --> D["两人挤同一资源发言"]
D --> E["基站只成功听清甲"]
E --> F["Msg4回显甲的身份"]
F --> G["甲对上暗号<br/>临时号牌转正"]
F --> H["乙发现不是自己<br/>按随机时长退避"]
H --> I["加大音量换哨声<br/>从头再来"]
输家的退避也是设计过的:基站可在应答里捎带一个“退避指示”,告诉大家“接下来随机等这么久再来”,负载越高退避越久,把重试洪峰摊平。这套“随机签名+共享资源+事后裁定”的组合拳,本质上是把一场不可协调的混战,规范成了一场有仲裁的拍卖。
首轮叫价也有讲究:64 个哨子可以分成 A、B 两组,B 组留给“我要说的话比较长”的用户。选 B 组等于提前告诉基站“给我多批点资源”,基站据此调整 Msg3 的授权大小,省一次讨价还价。
手机第一次举手该用多大嗓门?它没有闭环功控可用(还没建立连接),只能开环估算:拿刚测到的广播信号强度推算路径损耗,瞄准基站在广播里公布的“期望接收功率”发哨。估算总有失手,于是配了一套爬升机制:
$$P_{\text{PRACH}}=\min\big(P_{\text{max}},\;P_{\text{目标}}+\Delta P_{\text{格式}}+(\text{失败次数}-1)\times \text{爬升步长}\big)$$
第一次没回音,就按步长(典型 2~6 dB)加一档再来,直到成功或撞上最大尝试次数上限——撞上限就意味着“本小区接入失败”,手机只能换个小区重头再来。像极了课堂举手:先安静举手,没人理就站起来挥手臂,再没人理就只能喊了。还有一个容易被忽略的细节:如果手机中途换了波束重试,爬升计数不累加——因为新波束的开环估算基准变了,带着旧波本的“嗓门惯性”反而会喊过头、干扰别人。
顺带一提,这台“加法器”是接入类投诉的第一现场:用户感知到的“没信号、打不出电话”,很多时候不是业务信道坏了,而是哨声压根没被听到。
切换是时延敏感操作——源站已经决定把你送过去,目标站知道你马上到,这种时候还让用户去 64 选 1 地撞运气,既慢又险。所以网络会在切换命令里直接指定:用第几号哨子、在哪个时频格发。专属资源无人共享,自然无冲突、无需第四步——应答一到,接入即宣告完成,前后只需一个来回。波束失败恢复、网络主动唤醒失步用户等场景同样走这条贵宾通道。
代价是要预留专属哨子(从 64 个里切走一部分),所以它只用于“网络能提前预知”的场景。凡是手机自己突然想说话的场合,永远只能走竞争通道——没人能预知你什么时候要开口。这就呼应了第二节的分岔:发起方是谁,决定了通道形态。
四步流程要两个完整往返,对低时延场景(以及频谱要“先听后说”的非授权频段)来说太奢侈。于是两步 RACH 把四步合并:举手和自报家门一口气说完。
sequenceDiagram
participant U as 手机
participant G as 基站
Note over U: 举手和自报家门一口气说完
U->>G: MsgA 哨声+数据连发
alt 基站全都听清了
G->>U: MsgB 确认+提前量+正式身份
else 只听到哨声没听清数据
G->>U: MsgB 回退指示
U->>G: 按老四步补发自报家门
end
赌点很清楚:此时手机还没有定时提前,数据部分是在“不知道自己该提前多少”的情况下发出去的,距离一远就可能整体糊掉。所以两步 RACH 天生配了回退机制——基站听到哨声但没解出数据时,回一份“回退应答”,手机退回熟悉的四步轨道,前面那一脚不算白踢。实战中网络通常四步、两步并存,用一条信号质量门槛分流:信号好的近点用户走两步抢时延,边缘用户老老实实四步——反正他们走两步大概率也要回退,白白多烧一次上行资源。
| 维度 | 四步 | 两步 |
|---|---|---|
| 消息数 | 4 条(2 个往返) | 2 条(1 个往返,最理想) |
| 时延 | 高 | 低,接近省一半 |
| 上行资源开销 | 拿到许可才发数据 | 押注式先发数据,浪费风险高 |
| 抗大时延不确定性 | 强(先校时再说话) | 弱(距离远自动回退) |
| 适用场景 | 宏站、边缘、拥塞小区 | 小站、毫米波、小包低时延 |
对无线工程师来说,随机接入的实战价值浓缩成一句话:接入类 KPI 掉了,先分段定位,再对症下药。整条链路恰好有四个断点,各自对应完全不同的病因和修法:
| 断点 | 现象 | 常见病因 | 药方方向 |
|---|---|---|---|
| 哨声没被听见 | 发了 Msg1 收不到 Msg2 | 覆盖空洞、目标功率偏低、邻区根序列串扰、响应窗口过短 | 提目标功率、换更长格式、重做根序列规划 |
| 自报家门丢失 | 应答收到但 Msg3 解不出 | 边缘上行链路预算不足、校时误差、重传耗尽 | 改 Msg3 传输格式、查上行覆盖——不是 PRACH 的锅 |
| 冲突率过高 | 竞争失败占比大 | 哨子数/机会数撑不住话务量 | 加频域复用、加密机会密度、调退避参数 |
| 爬到顶也失败 | 连续多次尝试后放弃 | 上述问题的总爆发,或爬升步长太小喊不响 | 先修前三类,再查功率参数 |
把端到端成功率按段拆成“哨声应答率 × 自报家门成功率 × 冲突解决率”,三段连乘,最矮的那块板就是瓶颈。现网最常见的误判是把一切都归咎于“Msg1 覆盖不行”——拉出分段计数器一看,真相往往是哨声顺利过关、应答也发了,最后死在 Msg3 的边缘上行质量上。这时再去加功率、改前导码格式,方向就全错了。另一个排查小技巧:手算一遍某次接入的 RA-RNTI(代入它用的时隙和频率格),核对基站是否真的在响应用这个编号喊话——不少集成联调阶段的“手机卡死在第一步”,最后发现是两边算出的编号对不上。
回头看,随机接入的全部设计都在回答一个问题:一群互相不认识的设备,如何在没有协调的前提下,礼貌而高效地瓜分一次开口机会。ZC 序列用一根本旋律解决“听清谁在举手”;时空坐标当临时身份解决“应答递给谁”;四步握手中的回显机制解决“撞哨之后谁算数”;功率爬升和随机退避解决“失手之后如何体面地再来”。这套机制从第三代移动通信一路沿用至今,五代只是给它加了波束、加了短格式、加了“两步快车道”——骨架未变。理解了它,你不仅看懂了开机的第一秒,也看懂了切换、失步恢复、波束自救背后共同的底层逻辑:网络里最难的事情,从来不是传数据,而是让陌生人开始对话。
Q1:随机接入的“随机”,到底随机在哪? A:不是随机挑时间。发送的时频位置由小区广播统一规定,人人相同。随机的是签名——在 64 个前导码里随机挑一个,相当于大家在同一个时刻、同一个窗口举手,靠不同的哨声区分彼此。所以“随机”准确说是“随机选码”,冲突也因此而来。
Q2:Msg1 只带 6 个比特,是不是太浪费一次传输了? A:恰恰相反,这是刻意为之。手机此刻上行完全不同步、没有资源、身份未知,任何“话多”的波形都发不动也解不出。6 比特的哨声换来的是基站侧的距离测量和一张上行门票——先用最便宜的信号建立对话通道,话留给后面说。
Q3:两部手机选了同一个前导码,就一定接入失败吗? A:不一定。若两部手机相距较远、到达信号强弱悬殊,基站可能把两条 Msg3 都解出来,冲突等于没发生;只有互相干扰到至少一条解不出时,才会通过身份回显裁定唯一赢家,输家退避重试。冲突是概率事件,不是死刑。
Q4:切换时还要随机接入,会不会把切换拖慢? A:正常不会。切换走的是免竞争通道:目标小区在切换命令里直接指定专属哨子,无冲突、无需第四步,一个往返即完成。只有专属哨子的应答迟迟不到(比如波束异常),手机才会退回竞争模式自行再试,这属于异常兜底路径。
Q5:既然两步 RACH 更快,为什么不全面替代四步? A:两步的本质是“没校时就先发数据”,赌的是距离近、时延小。小区边缘用户走两步,数据部分大概率糊掉、被迫回退四步,反而多烧一次上行资源还增加干扰。所以现网普遍两套并存,按信号质量门槛分流:近点抢时延,边缘求稳妥。
本文由「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 等场景全覆盖。
