5G系列PDCP (Packet Data Convergence Protocol)协议详解
Posted 从善若水
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了5G系列PDCP (Packet Data Convergence Protocol)协议详解相关的知识,希望对你有一定的参考价值。
本人就职于国际知名终端厂商,负责modem芯片研发。在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。
博客内容主要围绕:
5G协议讲解
算力网络讲解(云计算,边缘计算,端计算)
高级C语言讲解
Rust语言讲解
文章目录
NR PDCP协议详解
PDCP:packet data convergence protocol (TS 38.323)
一、PDCP概述
1.1 PDCP层主要功能:
- 维护序列号SN;
- 用户面数据的报头压缩/解压缩;
- 加密/解密;
- 完整性保护/完整性验证,NR新增用户面数据的完整性保护/验证功能,该功能由RRC选择性配置;
- 基于timer的PDCP SDU丢弃;
- Packet duplication,NR新增功能,提高包传输可靠性;
- 重排序及按序递交;
- 不按序递交,NR新增功能,该功能由RRC选择性配置,减少传输延时;
- 重复包丢弃;
- 预处理功能,NR新增功能,减少layer 2的处理时延,对实现高速率传输提供基础;(PDCP预处理包括将PDCP SDU预处理成PDCP PDU、在没有收到下层请求之前将PDCP PDU递交下层两方面)
1.2 LTE PDCP V.S. NR PDCP
- 5G PDCP与LTE PDCP相比,增加了packet duplication 以及预处理功能;
- 针对RLC的不按序递交,可启用重排序功能(LTE中,由于RLC保证按序递交,正常情况下PDCP不需要执行重排序,PDCP重排序和重复包检测只在切换时才会使用);
- 此外,引入可配置的不按序递交功能,减少传输延时
二、PDCP structure
- RB(除SRB0外)与PDCP实体一对一关系,发送端基于上层请求建立针对某一个RB的PDCP实体,建立实体时将相关状态变量设置为初始值;
- PDCP实体与RLC实体的之间的通道为RLC channel(NR新称呼,LTE称为SAP);基于RB特征(e.g.单向/双向或分离/非分离)以及RLC mode,一个PDCP实体可以关联一个或多个RLC实体;
- 当PDCP duplication功能激活时,一个PDCP实体需要关联两个RLC实体
三、PDCP 实体
- 头压缩:只有用户面数据有头压缩功能,由RRC选择性配置;
- 完整性保护:SRB都需要进行完整性保护,DRB由RRC选择性配置后使用;(LTE中,只有控制面数据需要完整性保护,用户面数据没有完整性保护功能)
- 加密:安全功能激活后,所有RRC指示的PDCP data PDU(包括SRB,DRB)都需要进行加密;
- duplication:如果包复制功能激活,PDCP需要将相关PDCP PDU复制,并递交到不同的RLC实体
- 发送PDCP实体:将从上层接收的PDCP SDU(等价于SDAP PDU)处理成PDCP PDU后递交下层(RLC layer);
- 接收SDAP实体:将从下层接收的PDCP PDU(等价于RLC SDU)处理成PDCP SDU后递交上层(application layer)
四、PDCP PDU format
4.1 PDCP data PDU
- 完整性保护部分:PDCP data PDU的子头以及加密之前的数据域;
- 加密部分:PDCP data PDU的数据域(不包含SDAP 子头)以及MAC-I;(LTE中,由于用户面数据没有完整性保护,因此加密部分不包括MAC-I)
- MAC-I占32比特,携带有message authentication code;
- 对于DRB, PDCP SN为12bit或18bit,由RRC配置,以适应不同的传输速率;
4.2 PDCP Control PDU
FMC:占32bit,指示的是重排序窗口内第一个丢失的PDCP SDU的COUNT值
- PDCP Control PDU用于传输PDCP状态报告或离散的ROHC反馈;
- Contol PDU for PDCP status report只适用于AM DRB, Contol PDU for interspersed ROHC feedback适用于AM DRB和UM DRB;
- PDCP 控制PDU没有SN,且不使用加密/解密、完整性保护/完整性验证功能;
数据传输相关变量
🔰 SN取值范围:
- PDCP PDU采用SN编号,在 [ 0 , 2 [ p d c p − S N − S i z e ] – 1 ] [0, 2^{[pdcp-SN-Size]} – 1] [0,2[pdcp−SN−Size]–1]范围内循环取值;
🔰 状态变量取值范围:
- 所有状态变量均为非负值,取值范围为 [ 0 , 2 32 − 1 ] [0, 2^{32}-1] [0,232−1]内;
🔰 发送PDCP实体需要维护的状态变量:
- TX_NEXT
该状态变量指示的是下一个传输的PDCP SDU的COUNT(由HFN和PDCP SN组成)值。该变量的初始值为0;
🔰 接收PDCP实体需要维护的状态变量:
- RX_NEXT
该变量指示的是下一个期望接收的PDCP SDU的COUNT值。该变量的初始值为0. - RX_DELIV
该变量指示的是还没有递交上层但是等待递交的first PDCP SDU的COUNT值。该变量的初始值为0. - RX_REORD
该变量指示的是触发t-reordering timer的PDCP data PDU的COUNT+1;
六、数据传输——发送行为
6.1 发送操作
- 从上层接收到PDCP SDU时,开启针对该包的discardTimer (if configured);
- 对每一个从上层接收到的PDCP SDU,发送PDCP实体需要:
- 将TX_NEXT对应的COUNT值与PDCP SDU相关联;
- 头压缩(需要忽略SDAP包头);
- 基于TX_NEXT进行完整性保护、加密操作;
- 设置PDCP data PDU 的SN为TX_NEXT modulo 2[pdcp-SN-Size];
- 按步长1增加TX_NEXT;
- 将生成的PDCP PDU递交下层;
6.2 一个发送PDCP实体关联了两个RLC实体
- 如果配置了duplication function并且处于激活状态,复制PDCP data PDU分别递交两个RLC实体;(PDCP Control PDU不适用packet duplication,只能递交给主RLC实体,因为RoHC反馈的PDCP Control PDU 会导致RoHC状态失步);
- 如果关联的两个RLC实体属于不同的cell group且PDCP data volume 和RLC data volume之和大于一个预设阈值ul-DataSplitThreshold,将PDCP PDU递交给主RLC实体或辅RLC实体(取决于具体实现),否则递交给主RLC实体;
七、数据传输——接收行为
7.1 接收操作
- NR PDCP采用PUSH window(下边沿驱动)+t-reordering timer的形式接收下层递交的PDCP PDU;
关于PUSH window:接收窗口只能依赖于接收窗口下边界状态变量(RX_DELIV)更新才能移动
- 所有状态变量基于COUNT值,并且在接收机制中不考虑COUNT值的wrap around问题。网络侧保证防止wrap around(如采用DRB addition/release);
- PDCP接收到PDCP PDU后,首先需要基于PDCP PDU子头中的SN以及当前接收窗状态确定正确地HFN以及COUNT值。基于得到的COUNT进行解密和完整性验证;
- 没通过完整性验证的PDCP PDU将被丢弃,协议中对没有通过解密的PDCP PDU如何处理没有规定。
- 通过完整性验证的PDCP PDU需要进一步进行重复性检测,只有通过重复性检测的PDCP PDU,其对应的PDCP SDU才会被放在PDCP 接收buffer中;
- 排序完成的PDCP PDU,在去除PDCP PDU头之后,需要按照PDCP COUNT编号顺序进行解压缩,防止RoHC Context按序更新导致的解压缩失败。解头压缩后的包,再递交个SDAP层。
- 如果RRC配置了不按序递交功能,PDCP SDU需先放入接收buffer中以记录PDCP SDU的接收状态,然后直接递交上层,且不能配置头压缩功能;
- 如果没有配置不按序递交功能,PDCP需要进行重排序和丢失检测。如果检测到某个PDCP PDU没有收到(简单理解为没有按序收到PDCP PDU),开启重排序定时器(i.e t-reordering timer),定时器超时认为该gap的数据包接收失败;
🔰以下以pdcp-SN-Size=3bit,Window_Size=4(协议规定接收窗口的长度为其SN空间的一半)为例介绍
接收示例: 以下为接收窗的初始状态
确定 HFN和COUNT值的方法:
-
如果 接收包的SN < SN(RX_DELIV) – Window_Size,那么该包对应的HFN = HFN(RX_DELIV) + 1;
-
如果接收包的SN >= SN(RX_DELIV) + Window_Size,那么该包对应的HFN= HFN(RX_DELIV) – 1;
-
否则,接收到的包对应的HFN= HFN(RX_DELIV)
接收包的HFN确定后,可确定该包对应的COUNT值为 [RCVD_HFN, RCVD_SN]。
接收行为:
- 按照COUNT升序向上层递交PDCP SDU;
- 更新RX_DELIV使其指向还没有递交到上层的first PDCP SDU;
- 判断是否要停止或启动t-reordering 定时器(如果定时器正在运行且更新后的RX_DELIV>=RX_REORD,停止定时器;如果定时没有运行(包括因前述行为停止的)且更新后的RX_DELIV < RX_NEXT,启动定时器,并设置RX_REORD=RX_NEXT)
case 1:接收到SN=RX_DELIV的PDCP PDU(接收到下边界对应的包)
如图,当SN=0收到时,更新RX_DELIVE=3,此时RX_DELIV>=RX_REORD=2,需停止定时器。由于RX_DELIV=RX_NEXT=3,不需要重新启动重排序定时器
case 2:t-reordering 定时器超时
如图,当定时器超时,更新RX_DELIVE=3,此时由于RX_DELIV=RX_NEXT=3(说明没有丢包),不需要重新启动重排序定时器
case 3:重配t-reordering定时器时长(在t-reordering定时运行期间可能收到重配定时器时长的指示)
①更新RX_REORD=RX_NEXT(忽略gap);
②停止并重新启动t-reordering 定时器
八、SDU discard&duplicated PDU discard
8.1 SDU discard
应用层提供的数据率与无线接口提供的数据率不匹配,可能产生大量缓存数据,为防止过度延时和排队现象引入SDU discard 机制。
DRB
对于DRB,当以下任意条件满足时,发送PDCP实体将删除PDCP SDU以及对应的PDCP data PDU:
- PDCP SDU对应的discardTimer 超时(只有DRB才会配置这个timer);
- PDCP 状态报告确定某一PDCP SDU已成功传输(只适用于DL DRB);
如果对应的PDCP PDU已经传输到下层,则指示下层丢弃相关包;
【注】:由于NR PDCP中引入预处理功能,PDCP可能会丢弃一个已经关联了SN的PDCP SDU从而导致SN gap,进而增加接收端重排序时延。可以取决于UE实现来减少gap(如将该丢弃的SN号重新分配给其他PDCP SDU)。
SRB
对于SRB,如果上层请求PDCP SDU discard,PDCP实体应该丢弃所有存储的PDCP SDU和PDCP PDU;(对于SRB来说,SDU discard是一种RRC请求功能,类似于请求PDCP re-establishment,因此当PDCP接收到这种请求时,应该丢弃所有存储的包)
8.2 Duplicated PDU discard
- NR针对packet duplication新引入的功能;
- 如果PDCP PDU经一个RLC实体成功传输了,发送PDCP实体指示另一个RLC实体丢掉相应的duplicated PDCP PDU(目前主要适用于AM DRB);
- 如果PDCP收到duplication function去激活指示,发送PDCP实体指示辅RLC实体丢弃所有duplicated PDCP data PDU;
九、PDCP状态报告
某些情况下PDCP SDU已经成功接收但是还没有收到相应的RLC 确认,为避免不必要的重传,UE可通过PDCP状态报告告知网络侧包的接收状态(PDCP状态报告只适用于DL DRB)
-
在以下任一情况下,如果RRC配置了状态报告,接收PDCP需要触发PDCP状态报告:
- 上层请求PDCP entity re-establishment (如切换);
- 上层请求PDCP data recovery承载类型变化(如MCG split bearer变换成MCG bearer)
-
发送PDCP control PDU for PDCP statute report操作:
- 设置FMC等于RX_DELIV;
- 分配bitmap域,字节上其长度等于从第一个丢失的PDCP SDU但不包括该PDCP SDU开始到最后一个失序的PDCP SDU为止的COUNT个数,或者从第一个丢失的PDCP SDU但不包括该PDCP SDU开始到PDCP control PDU size等于9000bytes为止的COUNT个数;
- 对于没有成功收到的PDCP SDU以及没有成功解压的PDCP SDU(optional)对应的 bitmap域设置为“0”;
- 对于成功收到的PDCP SDU对应的bitmap域设置为“1”
-
接收PDCP control PDU for PDCP statute report操作
- 认为COUNT值小于FMC或bitmap设置为“1”的PDCP SDU都成功接收了;
- 执行SDU discard操作
十、数据传输-可传数据(for BSR)
为便于MAC层执行缓存状态报告(buffer size report,BSR)以申请上行授权,UE认为以下为PDCP层可传数据:
- 还没有被处理成PDCP PDU 的PDCP SDU;
- 还没有递交下层的PDCP PDU;
- PDCP 控制 PDU;
- for AM DRB, PDCP re-establishment时确定需要重传的PDCP SDU;
- for AM DRB, PDCP data recovery时确定需要重传的PDCP PDU
当一个PDCP 关联两个RLC实体时:
- DC split bear:如果PDCP 可传数据与RLC等待初传的可传数据总和小于一个阈值,PDCP向主RLC实体关联的MAC指示PDCP容量,向辅RLC实体关联的MAC指示PDCP容量为0;否则,PDCP分别向主/辅RLC关联的MAC实体指示PDCP数据量;
- DC duplication:PDCP向分别向主RLC、辅RLC实体关联的MAC实体指示PDCP数据量;
- CA duplication:PDCP数据量需分别计算在主/辅RLC实体关联的逻辑信道组LCG中
【5G系列】高层协议栈——协议栈架构
【5G系列】SDAP (Service Data Adaptation Protocol)协议详解
【5G系列】RLC (Radio Link Control )协议详解
【5G系列】MAC (Medium Access Control)协议详解(Writing)
以上是关于5G系列PDCP (Packet Data Convergence Protocol)协议详解的主要内容,如果未能解决你的问题,请参考以下文章
5G系列SDAP (Service Data Adaptation Protocol)协议详解