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[pdcpSNSize]1]范围内循环取值;

🔰 状态变量取值范围:

  • 所有状态变量均为非负值,取值范围为 [ 0 , 2 32 − 1 ] [0, 2^{32}-1] [0,2321]内;

🔰 发送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安全系列AS层PDCP完整性保护与加密流程

5G安全系列AS层PDCP完整性保护与加密流程

5G NSA开机注网流程

5G系列SDAP (Service Data Adaptation Protocol)协议详解

5G系列SDAP (Service Data Adaptation Protocol)协议详解

5G NR — 基站(Base Station)