你有没有想过,当你在手机上点开一个网页,你的请求是如何穿越无数网络节点,最终到达服务器,再把网页内容传回来的?这背后有一条看不见的"数据流水线"——协议栈。
今天我们不背规范条文,而是用"快递物流"的类比,把5G协议栈从底层物理层到顶层应用层拆解一遍。你看完之后,脑子里会有一张清晰的数据封装全景图,知道每一层为什么存在、做了什么事、在调试时该看哪里。
想象你从北京寄一台手机给上海的朋友。整个过程分成好几步:
每一层只关心自己的事——快递员不需要知道包裹里是手机还是书本,分拣中心不需要知道走哪条公路。这就是分层的核心思想:各司其职,互不干扰。
通信协议栈也是同样的道理。OSI模型定义了7层,TCP/IP简化为4层,而5G NR在实际实现中把无线侧聚焦为L1(PHY)、L2(MAC/RLC/PDCP/SDAP)、L3(RRC/NAS)三层架构,再加上核心网侧的传输层到应用层协议。
graph TB
subgraph OSI七层模型
A7["应用层<br/>HTTP/RTP/MQTT"]
A6["表示层<br/>TLS/编码"]
A5["会话层<br/>SIP"]
A4["传输层<br/>TCP/UDP"]
A3["网络层<br/>IP"]
A2["数据链路层<br/>L2: PDCP/RLC/MAC"]
A1["物理层<br/>PHY: 调制/编码/OFDM"]
end
A7 --> A6 --> A5 --> A4 --> A3 --> A2 --> A1
style A1 fill:#e74c3c,color:#fff
style A2 fill:#e67e22,color:#fff
style A3 fill:#f1c40f,color:#333
style A4 fill:#2ecc71,color:#fff
style A7 fill:#9b59b6,color:#fff
关键理解:5G协议栈不是凭空发明的,而是OSI七层模型在无线接入场景下的具体实现。PHY对应第1层,MAC/RLC/PDCP/SDAP对应第2层,RRC/NAS对应第3层。
5G NR协议栈最大的架构特点是用户面和控制面分离。这是理解整个协议栈的起点。
类比:想象一栋大楼。控制面是"物业管理系统"——负责开门、关门、分配房间、管理住户信息;用户面是"住户日常活动"——进出房间、搬东西、打电话。两者功能不同,通道也不同。
graph LR
subgraph 用户面User Plane
direction TB
UP1["SDAP<br/>QoS流映射"]
UP2["PDCP<br/>压缩/加密"]
UP3["RLC<br/>分段/重传"]
UP4["MAC<br/>调度/复用"]
UP5["PHY<br/>调制/编码"]
UP1 --> UP2 --> UP3 --> UP4 --> UP5
end
subgraph 控制面Control Plane
direction TB
CP1["NAS<br/>注册/鉴权"]
CP2["RRC<br/>无线资源管理"]
CP3["PDCP<br/>加密/完整性"]
CP4["RLC<br/>分段/重传"]
CP5["MAC<br/>调度/复用"]
CP6["PHY<br/>调制/编码"]
CP1 --> CP2 --> CP3 --> CP4 --> CP5 --> CP6
end
style UP1 fill:#3498db,color:#fff
style CP1 fill:#e74c3c,color:#fff
style CP2 fill:#e74c3c,color:#fff
两者对比:
| 维度 | 用户面 | 控制面 |
|---|---|---|
| 传输内容 | 用户业务数据(视频、网页、语音) | 信令消息(注册、切换、测量报告) |
| 最高层 | SDAP(QoS流映射) | NAS(与核心网AMF交互) |
| 数据量 | 非常大(持续传输) | 较小(间歇性传输) |
| 时延要求 | 因业务而异(URLLC要求<1ms) | 通常几十ms即可 |
| 压缩 | 有(ROHC头压缩) | 无 |
| 5G新增 | SDAP层 | 无明显新增 |
为什么这样设计? 因为信令和业务数据的QoS需求完全不同。控制信令要可靠但不能占用太多带宽;用户数据要高速但可以容忍少量丢包。分开处理,才能各自优化。
SDAP(Service Data Adaptation Protocol)是5G NR 全新引入的协议子层,LTE里没有。
类比:SDAP就像快递站里的"优先级标签机"。一个包裹进来,SDAP根据它的紧急程度贴上不同颜色的标签——红的加急、绿的普通、蓝的可以延迟。后续所有环节看到标签就知道该怎么处理。
核心功能: - 将上层的QoS Flow映射到不同的数据无线承载(DRB) - 在数据包头上标记QFI(QoS Flow Identifier) - 一个DRB可以承载多个QoS Flow(5G的灵活性所在)
$$\text{QoS Flow} \xrightarrow{\text{SDAP映射}} \text{DRB} \xrightarrow{\text{PDCP/RLC/MAC处理}} \text{Transport Block}$$
为什么LTE不需要SDAP? 因为LTE用的是"承载级"QoS,一个EPS承载绑定一套QoS参数。5G改用"流级"QoS,粒度更细,需要专门的层来做映射。这就像从"按车型收费"进化到"按实际载重收费",管理更精细。
PDCP(Packet Data Convergence Protocol)是协议栈里的"多面手"。
类比:PDCP就像一个出国旅行的海关。它做两件事:一是帮你把大行李箱压缩成小背包(头压缩),二是给你的护照加防伪标记(加密和完整性保护)。
核心功能一览:
| 功能 | 说明 | 实际意义 |
|---|---|---|
| ROHC头压缩 | 把IP/RTP/UDP等包头从40-60字节压缩到1-3字节 | 语音包有效载荷才几十字节,头压缩可节省50%以上无线资源 |
| 加密/解密 | 对用户面和控制面数据进行加密 | 防止空中接口被窃听 |
| 完整性保护 | 仅对控制面和部分用户面 | 防止数据被篡改 |
| 重排序 | 5G新增,从RLC移到PDCP | 简化RLC设计,支持双连接场景 |
| 重复检测 | 检测并丢弃重复包 | 切换和双连接时避免数据重复 |
| PDCP复制 | 5G新增,同一数据走两条路径 | 提高URLLC业务的可靠性 |
一个关键的设计变更:在LTE中,RLC负责重排序(按序交付);在5G中,这个功能移到了PDCP。为什么?
因为5G支持双连接(Dual Connectivity)——UE同时连接两个基站(如一个4G eNB + 一个5G gNB,或两个5G gNB)。数据可能从两条不同的路径到达,排序只能在更上层的PDCP做,RLC只能看到单条路径的数据。
RLC(Radio Link Control)像一个精密的物流分段系统。
类比:你有一根5米长的管子要放进3米长的箱子。RLC的工作就是把管子切成两段,分别装箱,到了目的地再拼接回来。如果某一段在运输中损坏,RLC负责重传那一段。
RLC的三种模式:
| 模式 | 特点 | 适用场景 |
|---|---|---|
| TM(透明模式) | 不加任何头,原样传输 | BCCH广播消息、PCCH寻呼消息 |
| UM(无确认模式) | 加序号,可分段重组,但不重传 | VoLTE语音包(延迟敏感,丢几个包无所谓) |
| AM(确认模式) | 加序号+ARQ重传,保证可靠交付 | TCP数据、网页浏览、文件下载 |
ARQ vs HARQ的区别(这是很多工程师容易混淆的点):
HARQ(MAC层)→ 一次传输失败,快速重传(~8ms内)
↓ 失败多次
ARQ(RLC层)→ HARQ多次失败后,RLC层面重新发送整个PDU
HARQ是"第一道防线",速度快但简单粗暴;ARQ是"第二道防线",速度慢但更可靠。两者配合,构成了无线通信的两级重传机制。
$$P_{\text{总失败}} = P_{\text{HARQ失败}}^N \times P_{\text{ARQ失败}}^M$$
其中N是HARQ最大重传次数,M是ARQ最大重传次数。典型配置下,经过两级重传,数据包丢失率可以降到 $10^{-6}$ 以下。
MAC(Medium Access Control)是整个L2最复杂的子层,也是调度器的所在地。
类比:MAC就像一个十字路口的交通警察。路上有很多车(数据流),但车道有限(无线资源有限),警察要决定谁先走、走哪条道、走多久。
MAC层的核心职责:
| 功能 | 说明 |
|---|---|
| 调度 | 决定哪些UE在什么时间、用什么资源发送/接收数据 |
| 复用/解复用 | 把多个逻辑信道的数据复用到同一个传输信道 |
| HARQ | 快速重传机制(DL异步、UL异步) |
| 随机接入 | UE首次与基站通信的"敲门"过程 |
| BSR上报 | UE告诉基站"我还有多少数据要发" |
| PHR上报 | UE告诉基站"我还有多少电量余量" |
逻辑信道到传输信道的映射:
graph LR
subgraph 逻辑信道
BCCH["BCCH<br/>系统广播"]
PCCH["PCCH<br/>寻呼"]
CCCH["CCCH<br/>公共控制"]
DCCH["DCCH<br/>专用控制"]
DTCH["DTCH<br/>专用业务"]
end
subgraph 传输信道
BCH["BCH"]
PCH["PCH"]
DL_SCH["DL-SCH"]
UL_SCH["UL-SCH"]
RACH["RACH"]
end
BCCH -->|"映射"| BCH
BCCH -->|"映射"| DL_SCH
PCCH -->|"映射"| PCH
CCCH -->|"映射"| DL_SCH
DCCH -->|"映射"| DL_SCH
DTCH -->|"映射"| DL_SCH
DCCH -->|"映射"| UL_SCH
DTCH -->|"映射"| UL_SCH
CCCH -->|"映射"| RACH
style BCCH fill:#3498db,color:#fff
style DTCH fill:#2ecc71,color:#fff
style DL_SCH fill:#e67e22,color:#fff
style UL_SCH fill:#e67e22,color:#fff
为什么DL-SCH是"万能收件箱"? 看图就明白——BCCH(部分)、CCCH、DCCH、DTCH都可以映射到DL-SCH。因为下行数据是基站主动发送的,可以灵活复用。但上行就不一样了,UE需要先通过RACH"敲门"获得发送机会。
PHY(Physical Layer)是协议栈的最底层,负责把数字比特变成能在空气中传播的电磁波。
一个数据包从MAC到达PHY后的"变形链":
$$\text{Transport Block} \rightarrow \text{CRC附加} \rightarrow \text{码块分段} \rightarrow \text{LDPC编码} \rightarrow \text{速率匹配} \rightarrow \text{调制映射} \rightarrow \text{层映射} \rightarrow \text{预编码} \rightarrow \text{RE映射} \rightarrow \text{OFDM生成}$$
这每一步都有存在的道理:
| 步骤 | 作用 | 类比 |
|---|---|---|
| CRC附加 | 给数据加"校验码",检测有没有出错 | 快递单上写"易碎品"标签 |
| LDPC编码 | 给数据加冗余,出错时可以纠正 | 重要文件多抄几份备份 |
| 调制映射 | 把比特变成复数符号(QPSK/16QAM/256QAM) | 把文字翻译成摩尔斯电码 |
| 层映射 | 把数据分到多个MIMO层 | 一条大路分成多条车道 |
| OFDM生成 | 把数据调制到多个子载波上 | 用多根不同频率的弦同时演奏 |
让我们用一个具体例子来串起全部过程。假设你在手机上发一条微信消息:
sequenceDiagram
participant App as 微信APP
participant TCP as TCP层
participant IP as IP层
participant SDAP as SDAP层
participant PDCP as PDCP层
participant RLC as RLC层
participant MAC as MAC层
participant PHY as PHY层
Note over App: 用户输入"你好"
App->>TCP: 应用数据 + TCP头(端口/序号)
TCP->>IP: TCP段 + IP头(源/目的地址)
IP->>SDAP: IP包 + QFI标记(QoS Flow→DRB)
SDAP->>PDCP: + SDAP头 + ROHC压缩 + 加密
PDCP->>RLC: + PDCP头 + 分段(如需要) + 序号
RLC->>MAC: + RLC头 + 复用到MAC PDU + MAC头
MAC->>PHY: Transport Block + CRC + LDPC编码 + 调制
Note over PHY: 变成电磁波发射出去
PHY->>MAC: 接收→解码→HARQ确认
MAC->>RLC: 解复用→剥离MAC头
RLC->>PDCP: 重组→剥离RLC头
PDCP->>SDAP: 解密→解压→剥离PDCP头
SDAP->>IP: 剥离SDAP头→IP包
IP->>TCP: 剥离IP头→TCP段
TCP->>App: 剥离TCP头→"你好"显示在屏幕
每层加的头(Overhead)到底有多少? 这是工程师最关心的问题之一:
| 协议层 | 头部大小 | 备注 |
|---|---|---|
| TCP头 | 20-60字节 | 压缩后可到2-5字节 |
| IP头 | 20字节(IPv4)/ 40字节(IPv6) | ROHC可压缩至1-3字节 |
| SDAP头 | 1字节 | 非常轻量 |
| PDCP头 | 1-3字节 | 不含加密开销 |
| RLC头 | 1-6字节 | 取决于模式(AM最大) |
| MAC头+尾 | 2-8字节 | 加上CRC为4字节 |
一个实际计算:一个VoLTE语音包,RTP有效载荷约32字节。如果不做头压缩,各层头加起来约60字节——头占比高达65%! 经过ROHC压缩后,头可以降到3-5字节,效率提升巨大。这就是PDCP层头压缩的价值所在。
数据经过空口协议栈(UE↔gNB)后,还需要经过核心网才能到达互联网。gNB到核心网的协议栈是这样的:
| 接口 | 用户面协议栈 | 控制面协议栈 |
|---|---|---|
| gNB ↔ UPF(N3) | GTP-U / UDP / IP / L2 / L1 | — |
| gNB ↔ AMF(N2) | — | NGAP / SCTP / IP / L2 / L1 |
| gNB ↔ gNB(Xn) | GTP-U / UDP / IP / L2 / L1 | XnAP / SCTP / IP / L2 / L1 |
为什么用户面用UDP而非TCP? 因为GTP-U自己有重传机制(端到端的TCP重传),如果在传输网再加一层TCP重传,就是"双重保险+双重延迟"——得不偿失。控制面用SCTP是因为信令必须可靠送达,而SCTP相比TCP多了多宿主和多流特性,更适合电信级信令传输。
graph TB
subgraph UE手机
UE_APP["应用层: HTTP/RTP"]
UE_TRANS["传输层: TCP/UDP"]
UE_IP["网络层: IP"]
UE_SDAP["SDAP"]
UE_PDCP["PDCP"]
UE_RLC["RLC"]
UE_MAC["MAC"]
UE_PHY["PHY"]
end
subgraph gNB基站
gNB_PHY["PHY"]
gNB_MAC["MAC"]
gNB_RLC["RLC"]
gNB_PDCP["PDCP"]
gNB_SDAP["SDAP"]
gNB_GTP["GTP-U"]
gNB_UDP["UDP"]
gNB_IP1["IP"]
end
subgraph UPF
UPF_GTP["GTP-U"]
UPF_UDP["UDP"]
UPF_IP1["IP"]
UPF_IP2["IP"]
end
subgraph DN服务器
DN_IP["IP"]
DN_TCP["TCP"]
DN_APP["HTTP Server"]
end
UE_APP --> UE_TRANS --> UE_IP --> UE_SDAP --> UE_PDCP --> UE_RLC --> UE_MAC --> UE_PHY
UE_PHY <-->|"Uu空口"| gNB_PHY
gNB_PHY --> gNB_MAC --> gNB_RLC --> gNB_PDCP --> gNB_SDAP --> gNB_GTP --> gNB_UDP --> gNB_IP1
gNB_IP1 <-->|"N3接口"| UPF_IP1
UPF_IP1 --> UPF_UDP --> UPF_GTP --> UPF_IP2
UPF_IP2 <-->|"N6接口"| DN_IP --> DN_TCP --> DN_APP
style UE_PHY fill:#e74c3c,color:#fff
style gNB_PHY fill:#e74c3c,color:#fff
style UE_SDAP fill:#3498db,color:#fff
style gNB_GTP fill:#2ecc71,color:#fff
style UPF_GTP fill:#2ecc71,color:#fff
注意一个关键点:空口协议栈(SDAP/PDCP/RLC/MAC/PHY)只存在于UE和gNB之间。数据到了gNB之后,PDCP解密、RLC解分段都完成了,然后封装进GTP-U隧道通过N3接口发给UPF。UPF去掉GTP-U隧道后,数据就是一个普通的IP包,走互联网到服务器。
这就是为什么基站越忙(空口协议栈处理量大),延迟越高——空口是整个链路中最"重"的一段。
| 特性 | LTE | 5G NR | 设计意图 |
|---|---|---|---|
| SDAP层 | 无 | 新增 | 支持基于QoS Flow的精细化管理 |
| RLC排序 | RLC做 | PDCP做 | 支持双连接/多连接场景 |
| RLC模式 | TM/UM/AM | TM/UM/AM | 保持一致 |
| MAC HARQ | DL异步/UL同步 | DL和UL均异步 | 更灵活的上行重传调度 |
| 子载波间隔 | 固定15kHz | 15/30/60/120/240kHz可配置 | 灵活的numerology支持多场景 |
| PDCP复制 | 无 | 新增(URLLC可靠性) | 双路径传输提高可靠性 |
| 波形 | DL OFDMA / UL SC-FDMA | CP-OFDM + DFT-s-OFDM | 上行也支持CP-OFDM,更好的MIMO支持 |
| QoS框架 | EPS承载级 | QoS Flow级(通过SDAP) | 更细粒度、更动态的QoS控制 |
5G相比LTE最重要的架构升级是两点: 1. SDAP层引入——从"粗粒度承载管理"升级到"细粒度流管理" 2. PDCP承担排序职责——从"单路径思维"升级到"多路径思维"
这两点都是为了支持5G的核心卖点:灵活性和多样性。不同业务(eMBB/URLLC/mMTC)可以在同一张网络中共存,各走各的QoS路径。
排查思路(从上往下逐层看):
排查思路: - 检查RLC是否用了UM模式(AM模式重传会增加延迟,不适合语音) - 检查PDCP ROHC是否正常(头压缩失败→语音包变大→可能超出调度限额) - 检查SDAP映射:语音QoS Flow是否映射到了专用DRB(5QI=1)
排查思路: - PDCP层:检查是否正确执行了PDCP状态报告(Status Report) - RLC层:检查AM模式下是否有未确认的PDU被丢弃 - 关键看PDCP SN(序列号)是否连续——不连续说明有包丢了
调试陷阱:很多人看到HARQ失败率高就认为空口有问题,但实际上HARQ失败后如果ARQ重传成功,上层(PDCP及以上)是感知不到的。要看BLER(Block Error Rate)还是RLC重传率还是PDCP丢包率——这三者含义完全不同。
这是很多初学者容易混淆的概念,搞清楚后看规范会顺畅很多。
$$\text{Layer N 的 SDU} = \text{Layer N+1 的 PDU}$$
也就是说,上层交下来的数据叫SDU(Service Data Unit),本层处理完后交给下层的数据叫PDU(Protocol Data Unit)。
| 层 | 收到的SDU | 加工后的PDU |
|---|---|---|
| SDAP | IP包(上层来的) | SDAP PDU(加SDAP头) |
| PDCP | SDAP PDU | PDCP PDU(加密+压缩+头) |
| RLC | PDCP PDU | RLC PDU(可能分段+RLC头) |
| MAC | RLC PDU | MAC PDU / Transport Block(复用+MAC头+CRC) |
| PHY | Transport Block | OFDM符号(编码+调制后的信号) |
类比:你在淘宝买了一件衣服。卖家给你一个包裹(这是卖家的PDU),快递员收到后叫它"一个待派送的件"(这是快递员的SDU),然后快递员把它放进快递柜,变成"一个快递柜包裹"(快递员的PDU)。同一样东西,在不同环节有不同的名字。
Q1: 用户面和控制面为什么不用同一套协议栈?
A: 因为两者需求不同。用户面需要高速传输(ROHC头压缩节省空口资源),控制面需要高可靠性(完整性保护防止信令被篡改)。分开处理可以各自优化,互不干扰。此外,某些场景下控制面和用户面甚至走不同的网络路径(如CU/DU分离架构中)。
Q2: HARQ和ARQ到底什么关系?一个包失败了先触发哪个?
A: 先HARQ再ARQ。HARQ在MAC层,速度快(几个ms),通过合并前后两次传输的信息(Chase Combining或Incremental Redundancy)来纠错。如果HARQ重传达到最大次数(通常3-4次)仍然失败,才触发RLC层的ARQ重传。ARQ是"重新发一份完整的",更彻底但也更慢。
Q3: 为什么5G新增SDAP层而不是继续用LTE的承载机制?
A: LTE的EPS承载是"粗管子"——一个承载里所有数据享受相同QoS。5G的应用场景(VR、工业控制、海量IoT)需要更精细的QoS控制。SDAP通过QoS Flow实现了"细管子"——多个不同QoS要求的流可以复用同一个DRB,也可以各自独占DRB,灵活度大大提高。
Q4: 基站(gNB)内部各协议层之间的接口叫什么?
A: gNB内部的协议层之间通过SAP(Service Access Point)交互。比如RLC和MAC之间有RLC信道SAP,MAC和PHY之间有传输信道SAP。这些是逻辑接口,不是物理接口——在实现上就是函数调用或者进程间通信。
Q5: 实际抓包时,我能看到每一层的头部吗?
A: 空口抓包(用诊断log设备)可以看到PHY/MAC/RLC/PDCP各层的完整PDU。传输网抓包(在gNB和UPF之间)只能看到GTP-U/UDP/IP层。到了互联网就只能看到IP/TCP/应用层。每一层都像剥洋葱——到了下一跳,外层皮就没了。
本文由「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 等场景全覆盖。
