你有没有想过:你在微信发出的一句话,是怎么穿过钢筋混凝土、穿过几百米到几公里的空气,准确落到基站天线上的?它并不是“一句话”过去的,而是一个被反复打包、贴标签、上锁、拆分、调制的数据包。而完成这一整套流程的“流水线”,就是协议栈。
这篇我们把5G的协议栈从顶到底走一遍。目标不是背下每一层的缩写,而是理解两件事:每一层为什么存在,以及数据每经过一层发生了什么。
先不讲5G,先讲寄快递。你要把一台相机寄给朋友,实际发生的事是:
注意两个关键点:每层只负责自己的包装,且拆包顺序和打包顺序严格相反;你和你的朋友只关心相机本身,但快递系统的每一环都在为它服务——这就是分层。
通信协议栈把这个思想形式化为三个概念:
$$L_{PDU} = L_{SDU} + L_{header}$$
一个朴素的公式,但它解释了后面所有的“旅行”:数据每下一层就“变重”一点,接收端每上一层就“变轻”一点。
为什么要费这个劲?因为无线通信极其复杂——信道在变、用户在移动、业务五花八门。如果写成一块巨石般的单一协议,任何改动都会牵一发动全身。分层之后,调制方式换代了不影响加密算法升级,调度策略优化了不碰重传逻辑。分层本质上是一种“关注点分离”的工程哲学,和软件工程里的模块化是同一个思想。
5G用户面(也就是你的业务数据)的空口协议栈,从上到下是:SDAP → PDCP → RLC → MAC → PHY。下图是手机与基站两端镜像的栈,以及数据在它们之间的流动:
flowchart TB
subgraph UE["手机协议栈"]
direction TB
U1["IP数据包"] --> U2["SDAP"]
U2 --> U3["PDCP"]
U3 --> U4["RLC"]
U4 --> U5["MAC"]
U5 --> U6["PHY"]
end
subgraph GN["基站 gNB"]
direction TB
G6["PHY"] --> G5["MAC"]
G5 --> G4["RLC"]
G4 --> G3["PDCP"]
G3 --> G2["SDAP"]
G2 --> G1["GTP-U隧道"]
end
U6 -->|空口电波| G6
U3 -.->|加密的对等搭档| G3
G1 --> N["核心网UPF"]
先给一张总表,建立整体感,再逐层拆解:
| 层 | 核心职责 | 一句话类比 | 5G的显著变化 |
|---|---|---|---|
| SDAP | QoS流到无线承载的映射 | 分拣台:贴上「加急/普通」标签 | 5G全新增加,4G没有 |
| PDCP | 加密、完整性保护、头压缩、按序递交 | 上锁+贴封条+抽真空 | 用户面完整性保护、按序递交从RLC挪来 |
| RLC | 分段、重传 | 拆大件+催签收 | 砍掉重排序和级联,只留分段与ARQ |
| MAC | 调度、复用、混合重传 | 装车调度员:谁先上车 | 与4G类似,按槽调度更密 |
| PHY | 编码、调制、多天线处理 | 把货物变成电波 | 灵活参数集、更宽频谱 |
SDAP是5G新增的一层,4G协议栈里根本没有它。为什么5G要专门加一层?
4G时代,服务质量(QoS)和无线承载是绑死的——一条EPS承载从核心网一直铺到手机,QoS属性和承载一体。这种设计简单,但不够灵活:业务稍微变一下QoS需求,就要动整条承载链路。
5G把这件事解耦了:QoS流(用QFI标识)负责描述“这股数据需要什么服务等级”,数据无线承载(DRB)负责描述“数据实际在空口哪条通道上跑”。两者之间需要一个“分拣台”来完成映射——这就是SDAP的全部工作。
一个细节很能体现设计者的克制:SDAP头不是永远存在的。只有配置了动态QoS映射时,数据包才会带上SDAP头;如果映射关系是静态配好的,这层头干脆省掉——毕竟空口的每一个字节都是宝贵的频谱资源。
PDCP是协议栈里“管辖权”最广的一层,四件事都归它管:
第一,加密与完整性保护。 手机和基站之间的PDCP层是一对“加密对等搭档”(图1中的虚线)。值得注意的一个演进:4G时代用户面数据只有加密、没有完整性保护——篡改了数据接收方也不知道;5G给用户面也加上了完整性保护,防篡改能力明显增强。加密的具体算法细节不在本文展开,这里只需要记住它在协议栈中的位置:PDCP。
第二,防重放。 加密需要序号,5G用一个叫COUNT的计数器来保证“同一个密文包不会被当成新包用第二次”:
$$COUNT = HFN \times 2^{L_{SN}} + SN$$
其中SN是包序号,HFN是超帧号。SN本身只有十几比特,很快数满一轮,HFN负责记住“已经数过几轮”——相当于手表的秒针和分针的关系。
第三,按序递交与重排序。 这里有个重要的架构变化:4G时代重排序是RLC的活,5G把它挪到了PDCP。为什么?因为重传可能发生在RLC层,但乱序的修复只需要做一次、而且应该在最靠近上层的地方做。功能收拢到一处,避免了两层各排各的队、结果越排越乱的尴尬。
第四,头压缩(RoHC)。 这个功能对语音业务是救命的。一帧编码后的语音可能只有三四十字节,而IP/UDP/RTP的头就能占四十多字节——不压缩的话,一半以上的空口资源在传“信封”而不是“信”。RoHC能把头压到几个字节,压缩比惊人。
RLC干两件事:分段与重传(ARQ)。
分段很好理解:PHY的传输块有大小限制(由调度决定),上层来的包如果太大,RLC负责切成小块,接收端再拼回去。就像超过货车限重的货物要拆成两票发运。
重传则有三种工作模式:
“语音为什么用UM”是理解无线设计的绝佳案例:语音包的有效期只有几十毫秒,重传一个迟到的包到达时,通话时序早就过去了,对一个过期的包做完美修复,不如让它体面地丢掉。丢一个包听感上只是轻微的“沙”声,延迟堆积却是所有人都能感知的卡顿。
5G对RLC做了一次“瘦身”:砍掉了重排序和级联(把多包拼成一个大包再切),只保留分段。原因前面提过——重排序移交PDCP;级联取消则让每个重传单元更小、更独立,出错重传的代价更低,还顺带降低了芯片处理复杂度。
如果说上层关心的是“数据对不对”,MAC层关心的就是“资源给谁、什么时候给”。它是整个空口最忙碌的一层:
物理层是唯一真正“接触”电波的一层:拿到MAC给的传输块(TB),先附上CRC校验,然后信道编码(加冗余抗噪声)、交织、调制(把比特映射到星座点)、多天线处理,最后映射到具体的时频资源上发射出去。空口调度、HARQ软合并、波束赋形这些话题都发生在这一层或与之紧耦合,这里不再展开——本文的视角是它在栈中的位置:一切上层的抽象,到这里都必须还原成具体的时频资源和波形。
把前面所有层串起来,看一个1400字节的IP包(比如网页的一小块内容)从核心网到手机的全过程:
flowchart TD
P0["IP数据包到达基站"] --> P1["SDAP:打上QFI服务等级标签"]
P1 --> P2["PDCP:头压缩并加密,加序号头"]
P2 --> P3["RLC:超出调度块就分段"]
P3 --> P4["MAC:与其他用户数据复用进传输块"]
P4 --> P5["PHY:加CRC、编码、调制"]
P5 --> P6["变成符号从天线发出"]
手机收到后,从PHY往上逐层剥头、校验、解密、重组、重排,还原出原始IP包交给应用——发送端每一层的包装,正好是接收端同一层的解包说明书。
算一笔开销账就能看出各层设计的苦心:1400字节的大包,五层头部合计只有十来个字节,开销不到2%,可以忽略;但一帧30多字节的语音小包,不压缩时头部开销可能超过100%。这就是为什么PDCP的头压缩对语音是刚需,也解释了为什么实时小包业务的空口效率永远是工程难点。
以上讲的都是“运货”的用户面。管理这条流水线本身的信令走的是控制面,核心是两个协议:
RRC(无线资源控制)——手机和基站之间的“总管家”:广播系统消息、寻呼、建立/释放连接、配置测量、下发各层参数。你手机里SDAP怎么映射、PDCP用什么加密配置、RLC用UM还是AM,全是RRC信令配置出来的。
NAS(非接入层)——注意名字里的“非接入”:它的对等实体不是基站,而是核心网的AMF。注册、鉴权、寻呼响应、会话管理这些涉及“你这个人”的管理,都由NAS负责。基站对NAS消息只是搬运工——把它装在RRC信令的“信封”里转发,自己不读内容:
flowchart LR
UE["手机 UE"] -->|RRC信令| G["基站 gNB"]
G -->|RRC信令| UE
G -->|NAS装在RRC里转发| A["核心网AMF"]
UE -.->|NAS的逻辑对等端| A
这张图请多看一眼,它是无数工程师踩坑的地方:在基站侧抓RRC信令能看到NAS内容,但NAS的决策逻辑在AMF——注册被拒时,基站信令里只能看到“AMF让拒的”,原因要到核心网侧找。
5G引入了一个新的RRC状态,这是控制面最值得讲的演进:
flowchart LR
S1["RRC IDLE 深睡"] -->|有业务发起 建立连接| S3["RRC CONNECTED 满速运转"]
S3 -->|释放连接| S1
S3 -->|数据间歇 挂起上下文| S2["RRC INACTIVE 小憩"]
S2 -->|数据再来 快速恢复| S3
S2 -->|移动出通知区| S1
| 状态 | 上下文在哪 | 手机能收什么 | 恢复代价 |
|---|---|---|---|
| IDLE | 网络只有粗略位置(跟踪区) | 寻呼 | 完整建连,信令多、时延长 |
| INACTIVE | 锚点基站完整保留 | RAN侧寻呼 | 快速恢复,几条信令搞定 |
| CONNECTED | 服务基站完整保留 | 一切 | 无需恢复,即刻收发 |
4G只有“在线/离线”两态,间隙性小数据业务(比如心跳、推送)很尴尬:保持连接费电费资源,断开再连信令又太重。5G的INACTIVE态是折中方案——连接挂起但上下文不销毁,数据再来时凭一个恢复标识快速唤醒,基站侧“记忆”都还在。这是5G支撑海量物联和突发小包业务的关键设计之一。
5G还做了一件4G没做的事:把基站从一台“一体机”切成了分布式架构。功能上分成CU(集中单元)、DU(分布单元)、RU(射频单元)三级,而切分线正是画在协议栈上:
为什么要切?三个理由:
理解协议栈,你就理解了5G网络架构演变的底层逻辑:所谓架构演进,很大程度上就是在回答“每一层应该放在哪里”。
场景1:丢包定位。 在核心网N3接口抓包,看到的是GTP-U隧道里封装的原始IP包——也就是还没进空口协议栈“加工”前的样子。如果N3口有包、终端收不到,问题在空口协议栈(逐层排查:是RLC重传耗尽,还是HARQ残留误块?);如果N3口就没有,问题根本不在无线侧。一抓一比,故障域立刻二分。
场景2:QoS不生效。 用户投诉“签约的加速通道没效果”,排查链路是:核心网下发的5QI有没有映射成QFI → SDAP把这个QFI映射到了哪个DRB → 该DRB的RLC模式(AM还是UM)和调度优先级对不对。任何一环断了,QoS就是纸面文章。
场景3:掉话分析。 大量掉话的根因是RLC达到最大重传次数触发无线链路失败。看到RLC重传到达上限的计数器飙升,方向就该转向覆盖、干扰或切换参数,而不是傻查传输。
场景4:空口信令看不懂。 排查问题时发现空口抓包里PDCP往上是密文——对,加密就在PDCP,这是分层知识直接告诉你的事实。想看明文得用诊断密钥解密,而不是怀疑抓包工具坏了。
常见误解清单:
Q: HARQ和RLC都是重传,为什么不能合并成一层? A: 两者的设计目标差了一个数量级。HARQ在MAC层,重传在毫秒内完成,配合软合并,目标是用最小代价把误块率压到可接受;RLC ARQ在确认模式下兜底,处理HARQ几轮都没救回来的“顽固错误”。合并到一层意味着要么所有错误都用慢速重传(时延爆炸),要么都用快速重传(可靠性不够)。梯度分工是时延与可靠性的最优折中。
Q: 5G为什么要把重排序从RLC挪到PDCP? A: 因为按序递交只需要做一次,而且应该在最靠近上层的地方做。4G时代RLC和PDCP都可能牵涉重排,两层各维护状态机既浪费又容易出bug。5G收拢到PDCP后,RLC变成纯粹的“分段+重传”简单模块,处理时延更低,也让CU/DU切分后的功能归属更清晰。
Q: SDAP、QFI、5QI、DRB是什么关系? A: 5QI是“服务等级的说明书”(时延、误码率要求是多少);QFI是某股数据的标签(“你属于哪个等级”);SDAP拿着QFI决定数据装进哪条DRB;DRB是空口上实际跑车的通道。一个类比:5QI是快递公司的服务标准,QFI是包裹上贴的加急标签,SDAP是决定加急件走哪条专线车道的分拣台,DRB就是那条专线。
Q: INACTIVE状态和4G的连接挂起有什么本质区别? A: 4G厂商私有的挂起方案各自为政,跨厂商切换后状态就丢了。5G的INACTIVE是标准化的:锚点基站保留完整上下文、有统一的恢复标识和RAN寻呼区机制,网络内移动时状态可迁移。对用户是更快的恢复时延,对运营商是更少的信令风暴风险。
Q: 为什么说“理解了协议栈就理解了5G架构演进”? A: 因为CU/DU切分、核心网重构、边缘计算,本质上都在回答同一个问题:每一层协议应该物理上放在哪里、逻辑上归谁管。协议栈是5G所有架构决策的坐标系。
本文由「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 等场景全覆盖。
