5G NR PDCP协议(一)

5G NR协议栈其他博文参考:
https://blog.csdn.net/qq_41245381/article/details/105805643
5G NR PDCP协议(二)参考:
https://blog.csdn.net/qq_41245381/article/details/105854414

一、PDCP PDU类型与格式

1.1 PDU类型

PDCP的PDU分为两种类型,Data PDU和Control PDU。其中Data PDU用来传送用户面和控制面的数据以及完保产生的数字签名MAC-I,Control PDU用来传送PDCP的状态报告和压缩/解压模块产生的解压反馈报文(interspersed ROHC feedback)。

1.2 Data PDU格式

1、SRB承载对应的PDU(信令面承载):SRB承载的PDCP SN固定为12bits,MAC-I为必选项

在这里插入图片描述

2、用户面承载PDU(SN 12bits和SN 18bits):用户面有两种格式的PDU,除了SN长度不同,其他都一样

在这里插入图片描述
在这里插入图片描述

1.3 Control PDU格式

1、PDCP状态上报:用于AM模式的DRB,保证没有丢包和重复包,且保持按序递交。

在这里插入图片描述

2、ROHC反馈(interspersed ROHC feedback):用于间断性的反馈解压缩情况,告知压缩方是否正确解压,压缩方可以据此调整数据流的压缩状态。

在这里插入图片描述

二、PDCP发送流程

2.1 部分字段释义

1、COUNT值

PDCP的发送侧和接收侧的对等实体各维护一个COUNT变量,COUNT值时一个32bits的无符号数值。如下图所示由两部分组成,其中HFN的bits长度 = 32 - PDCP SN长度。COUNT参与完保和加密运算,但COUNT不在信道上传输,PDCP SN包含在PDU中。

在这里插入图片描述

2、D/C

PDU类型标志

在这里插入图片描述

3、PDU Type

Control PDU类型

在这里插入图片描述

4、发送侧变量

PDCP实体对所有的Data PDU都分配了SN,其编号保证在一段时间内都不会重复,PDCP PDU的SN的取值范围:0 ~ [(2^(pdcp-SN-Size)) – 1],Control PDU都没有分配SN号码。

  • TX_NEXT:发送侧的状态变量,待分配的下一个COUNT值,初始化值为0。
  • discardTimer:DRB丢弃定时器,只有DRB才有。发送侧对每一个SDU都会启动一个定时器,超时后丢弃该SDU。用于防止发送缓冲拥塞。

2.2 发送流程图

在这里插入图片描述

三、PDCP接收流程

3.1 PDU类型及定义

PDCP接收侧的处理流程可以和RLC UM模式的接收侧处理流程做类比,二者的概念定义和处理方法都类似。最大的区别是RLC的接收窗口处理重组,PDCP的接收窗口处理重排序。

3.2 接收侧相关变量及定义

接收侧PDCP实体的SN定义和发送侧相同,其取值范围:0 ~ [(2^(pdcp-SN-Size)) – 1]。

  • HFN(State Variable):the HFN part (i.e. the number of most significant bits equal to HFN length) of the State Variable;
  • SN(State Variable):the SN part (i.e. the number of least significant bits equal to PDCP SN length) of the State Variable;
  • RCVD_SN:the PDCP SN of the received PDCP Data PDU, included in the PDU header;
  • RCVD_HFN:the HFN of the received PDCP Data PDU, calculated by the receiving PDCP entity;
  • RCVD_COUNT:the COUNT of the received PDCP Data PDU = [RCVD_HFN, RCVD_SN].

3.3 接收窗口相关变量

  • RX_NEXT:接收侧状态变量,期望接收的下一个COUNT值,初始化值为0。它的作用和RLC UM模式接收侧的RX_Next_Highest状态变量类似
  • RX_DELIV:接收窗口中还没有递交上层的第一个SDU关联的COUNT值。其初始值为0。它的作用和RLC UM模式接收侧的RX_Next_Reassembly状态变量类似
  • RX_REORD:接收窗口中启动t-Reordering定时器的PDCP DATA PDU对应的COUNT值。它的作用和RLC UM模式接收侧的RX_Next_Status_Trigger状态变量类似
  • Window_Size:常量,接收窗口大小 = 2^(pdcp-SN-Size) – 1
  • t-Reordering:重排序定时器,一个接收侧实体同时只能启动一个。用于检测丢包(序号不连续),超时后和RLC的UM模式的重组定时器超时类似,接收侧只是简单的向上层递交,不要求对端重传。具体实现应该还通知上层丢包

3.4 接收处理流程

10)从下层收到一帧DATA PDU,PDCP实体首先计算COUNT值,也就是RCVD_COUNT,方法是:RCVD_SN可以从PDU中取出,所以需要计算出对应的RCVD_HFN,然后拼接计算出RCVD_COUNT

if RCVD_SN < SN(RX_DELIV) – Window_Size : 
	RCVD_HFN = HFN(RX_DELIV) + 1;
else if RCVD_SN >= SN(RX_DELIV) + Window_Size : 
	RCVD_HFN = HFN(RX_DELIV) – 1;
else : 
	RCVD_HFN = HFN(RX_DELIV);
RCVD_COUNT = [RCVD_HFN, RCVD_SN]

20)计算出COUNT值,用该值计算数字签名和解密,如果失败,则丢弃本PDU,转100
30)如果该PDU以前收到过,或者RCVD_COUNT < RX_DELIV,则丢弃本PDU,转100
40)进入接收缓存(接收窗口),如果RCVD_COUNT是接收窗口中的最高值,则更新RX_NEXT=RCVD_COUNT+1
50)如果配置了非按序递交,则直接把SDU递交到上层,转100
60)如果RCVD_COUNT==RX_DELIV,则递交本SDU到上层,然后从COUNT = RX_DELIV开始,按升序递交接收窗口中缓存的全部序号连续的SDU到上层,完成后更新RX_DELIV为第一个还未递交的且大于 RX_DELIV的PDCP SDU的COUNT值
70)向上递交过程结束后,如果t-Reordering正在运行,并且最后递交的COUNT值(RX_DELIV)大于等于排序定时器绑定的COUNT值(RX_REORD),则停止定时器
80)如果t-Reordering没有运行,并且RX_DELIV和RX_NEXT之间有COUNT空洞,则对RX_NEXT启动排序定时器,设置RX_REORD = RX_NEXT
100)流程结束。

3.5 定时器超时处理流程

10)t-Reordering超时,排序窗口内全部小于RX_REORD的SDU和从RX_REORD开始的连续SDU全部递交到上层,这说明定时器其实只是等了一会,并没有要求对方重传,把要求重传的功能放到了应用层
20)更新RX_DELIV为大于等于RX_REORD的第一个没有向上递交的COUNT值
30)如果RX_DELIV和RX_NEXT之间有COUNT空洞,则RX_REORD=RX_NEXT,启动排序定时器t-Reordering。
100)流程结束。

3.6 接收窗口

假定pdcp-SN-Size = 4,则Window_Size=0x8,SN空间是0 ~ 0xf,RCVD_SN的取值范围=[0 ~ 0xf],以RX_DELIV为中心表示排序接收窗口如图:

在这里插入图片描述

在这里插入图片描述

  • 19
    点赞
  • 123
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值