4、MAC层核心:随机接入过程(RACH)、调度与资源分配、HARQ重传机制、逻辑信道与传输信道映射
MAC层,说白了就是L2的大脑。它管着你怎么接入网络、怎么抢资源、传错了怎么补救、以及上层数据怎么塞进物理层管道。我做了这么多年协议栈,踩坑最多的就是这一层。今天咱们把这四个核心模块掰开揉碎讲清楚。
核心要点:MAC层是L2的调度中枢,它决定了“谁在什么时候用什么资源传什么数据”。
4.1 随机接入过程(RACH)—— 终端的第一声招呼
终端开机后第一件事是什么?不是发数据,而是先跟基站打个招呼:“我来了,给我个身份。”这个打招呼的过程就是随机接入。
我当年调试一个NB-IoT项目,终端死活入不了网。查了三天,最后发现是前导码的发射功率配置太低,基站根本听不见。嗯,这种坑踩过一次就记住了。
4.1.1 基于竞争的随机接入(CBRA)
这是最常用的方式。多个终端同时发起接入,可能撞车。流程分四步:
- Msg1:前导码发送——终端从64个前导码中随机选一个发出去。
- Msg2:随机接入响应(RAR)——基站回复,带上临时身份和上行授权。
- Msg3:调度传输——终端用拿到的资源发RRC连接请求。
- Msg4:竞争解决——基站确认谁赢了,其他人下次再试。
实战技巧:前导码的选择不是真随机。我建议在小区边缘用低索引的前导码,因为基站检测成功率更高。这是我在外场测试中总结出来的。
4.1.2 基于非竞争的随机接入(CFRA)
基站指定前导码给你,不用抢。常用于切换和上行同步恢复。优点是快,缺点是基站得提前预留资源。
| 特性 | CBRA | CFRA |
|---|---|---|
| 前导码来源 | 终端随机选择 | 基站指定 |
| 冲突概率 | 高(尤其负载大时) | 无 |
| 适用场景 | 初始接入、RRC重建 | 切换、上行同步恢复 |
| 时延 | 较高(可能重试) | 低 |
4.2 调度与资源分配 —— 谁在什么时候用什么传
调度器是MAC层的核心。它决定每个TTI里,哪个终端能用哪些RB、用什么MCS。你想想看,一个小区几百个终端,调度器得在1ms内做出决策,压力不小。
4.2.1 动态调度
每个TTI基站都发DCI(下行控制信息),告诉终端“你,用这些资源,这个编码方式”。这是最灵活的方式,但控制信令开销大。
// 伪代码:调度器决策逻辑
for each TTI:
for each UE with pending data:
calculate PF metric = (instant_rate / average_rate) * alpha
select UE with highest metric
assign RB and MCS based on CQI
update average_rate
4.2.2 半静态调度(SPS)
VoIP这种周期性小包,每次发DCI太浪费。SPS一次分配,周期使用。我记得有个项目用SPS传VoIP,控制信道开销直接降了70%。
注意:SPS激活后,终端在指定周期内自动使用预分配资源。但如果HARQ重传发生,重传包走动态调度,不走SPS。这个细节容易搞错。
4.2.3 资源分配类型
NR里资源分配分两种:Type 0(位图方式)和Type 1(起始RB+长度)。Type 0灵活但开销大,Type 1紧凑但受限。我个人习惯在小区边缘用Type 1,因为RB少,位图浪费。
4.3 HARQ重传机制 —— 错了别怕,有保险
无线信道太不可靠了。传10个包可能错3个。HARQ就是那个保险机制——错了就重传,但重传不是简单重发。
4.3.1 同步HARQ vs 异步HARQ
- 同步HARQ:重传发生在固定时刻。终端不用等信令,但调度不灵活。LTE上行用这个。
- 异步HARQ:重传时刻由基站动态决定。终端需要等DCI。NR上下行都用这个。
4.3.2 自适应HARQ vs 非自适应HARQ
自适应HARQ每次重传可以改MCS和RB位置。非自适应则跟初传一样。NR里基本都是自适应,因为信道变化快,不改参数等于白传。
4.3.3 软合并
HARQ的精髓在于软合并。重传不是扔掉旧数据重来,而是把新旧数据合并起来解码。这叫Chase合并(CC)或增量冗余(IR)。
IR的效果更好。为什么?因为每次重传带不同的冗余版本,解码增益更大。我在实验室测过,IR比CC在BLER=10%时能多0.5dB增益。
关键参数:NR最大HARQ进程数16,每个进程独立工作。下行异步自适应HARQ,上行同步非自适应HARQ(R15早期版本),R16后上行也支持异步。
4.4 逻辑信道与传输信道映射 —— 数据怎么走
上层来的数据五花八门:信令、语音、视频、网页。MAC层得把它们分门别类,塞进合适的传输信道。这个映射关系是协议栈的骨架。
4.4.1 逻辑信道类型
逻辑信道分两类:控制信道(传信令)和业务信道(传数据)。
| 逻辑信道 | 方向 | 传什么 |
|---|---|---|
| BCCH | 下行 | 系统消息 |
| PCCH | 下行 | 寻呼消息 |
| CCCH | 上下行 | RRC连接建立前信令 |
| DCCH | 上下行 | RRC连接建立后信令 |
| DTCH | 上下行 | 用户数据 |
4.4.2 传输信道类型
传输信道是MAC层和物理层的接口。NR里主要就几个:
- BCH:广播信道,传MIB。固定编码方式,覆盖最广。
- DL-SCH:下行共享信道,传大部分下行数据。支持HARQ、调度、链路自适应。
- UL-SCH:上行共享信道,传大部分上行数据。同样支持HARQ。
- RACH:随机接入信道,只传前导码。
4.4.3 映射关系
逻辑信道到传输信道的映射,说白了就是:信令走控制信道,数据走业务信道,然后都汇聚到共享信道上。
逻辑信道 → 传输信道
BCCH → BCH(MIB)或 DL-SCH(SIB)
PCCH → PCH(实际映射到DL-SCH资源)
CCCH → UL-SCH / DL-SCH
DCCH → UL-SCH / DL-SCH
DTCH → UL-SCH / DL-SCH
避坑指南:我曾经遇到一个问题:CCCH的数据优先级设得太低,导致RRC连接请求一直被DTCH的数据挤掉,终端反复接入失败。后来把CCCH的优先级提到最高,问题解决。逻辑信道的优先级配置直接影响接入成功率。
4.5 本章知识体系总览
下面这张图把MAC层四个核心模块的关系画清楚了。你仔细看,RACH是入口,调度器是大脑,HARQ是保险,映射是管道。四者缺一不可。
MAC层这四个模块,每个单独拎出来都能讲一整天。但实际工作中,它们是一体的。你设计RACH参数时得考虑调度器的负载,配置HARQ时得看信道映射的优先级。我建议你从整体上理解它们的关系,再逐个深入细节。