【5G系列】PDCP (Packet Data Convergence Protocol)协议详解

本文深入探讨5G的PDCP协议,涵盖协议结构、实体功能、数据传输流程及异常处理。同时,介绍了6G中的算力网络概念,包括云计算、边缘计算和端计算。此外,还涉及高级C语言和Rust语言的学习要点。通过详细的协议分析和新技术展望,为读者提供了全面的技术理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本人就职于国际知名终端厂商,负责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)协议详解


在这里插入图片描述

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

从善若水

原创不易,感谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值