这篇主要是PDCP PDU,PDCP Formats及其参数的含义, 收发过程中用到的变量,常量和定时器的总结,都是概念性描述。
PDU
和RLC 类似,PDCP PDU 也分为data pdu 和control PDU。PDCP data PDU 的data field对应的是user plane data ,control plane data和MAC-I 。
PDCP control PDU 的data field 对应的是PDCP status report ,interspersed ROHC feedback 和EHC feedback等信息。
Formats
PDCP PDU 的长度对应的是8 bits倍数 bit string。其中最高有效位是表格第一行最左边的bit,最低有效位是最后一行最右边的bit,一般bit string是从左到右读取,然后从上到下按行的顺序读取。PDCP PDU 中每个参数 field 对应的bit 根据图中的位置确定即可。上面的描述是field的填写和读取原则,例如在填写和读取PDCP status report的FMC时,每一bit与COUNT对应关系。
PDCP SDU长度对应是8 bits倍数的bit string。压缩或未压缩的 SDU 从第一位开始就被包含在PDCP data PDU 中,如下图示。
下面是各个PDCP data PDU的结构图示,没有类似RLC的segement field ,也就是PDCP 不支持分段操作,因而PDCP PDU只有收到和未收到的说法。
Parameters
接下来看下每个PDCP data PDU的结构中field的含义。通常每个字段的最左边bit是第一个bit 对应最高bit,最右边bit对应最低bit,以无符号整数的标准二进制编码进行编码。在所有情况下,在读取PDU时,这些bit都是从MSB到LSB进行的。
PDCP SN 长度对应 12或18 bits,通过RRC层参数配置,如上图DRB 的PDCP SN的bit数由RRC层配置的参数pdcp-SN-sizeUL/DL得到,UM和AM DRB可以配置为12 或18 bits,而SRBs只能是12 bits,所以配置SRB时不会带pdcp-SN-size。
Data field的长度根据实际发送的data长度确定,Data field可能对应未压缩的PDCP SDU,例如user plane data或control plane data;也可能对应压缩的 PDCP SDU,这时候只能是user plane data。除 PDCP PDU header和 MAC-I 之外的所有字段都属于data field的范畴。
MAC-I 长度对应32 bits,该字段携带是按规定计算的消息验证码。
对于 Uu 口的 SRB,MAC-I 字段始终存在。如果未配置完整性保护,则 MAC-I 字段仍然存在,但应使用设置为 0 的填充位进行填充。
对于sidelink SRB1、SRB2 和 SRB3,仅当sidelink SRB1、SRB2 和 SRB3 配置了完整性保护时,MAC-I 字段才会出现。
对于 DRB(包括用于单播的sidelink DRB),只有当 DRB 配置了完整性保护时,MAC-I 字段才会出现。
COUNT长度对应32 bits,COUNT值由HFN和PDCP SN组成。HFN 部分的比特大小等于 32 bits减去 PDCP SN 的长度。
R field长度对应1bit,Reserved bit应设置为 0。接收端要忽略Reserved bits。
D/C长度对应1 bit,该bit用于确定PDCP PDU是Contro PDU(value 0)还是Data PDU(value 1)。
PDU type长度对应 3bits,该field用于指示PDCP control PDU的type,'000'对应PDCP status report,‘001’对应interspersed ROHC feedback,‘010’对应EHC feedback,‘011-111’是reserved 值。
FMC长度32 bits,FMC 代表First Missing COUNT,用于指示在reordering window中第一个 missing 的PDCP SDU的COUNT 值,也就是RX_DELIV的值。
Bitmap长度可变。bitmap字段的长度可以为 0。该字段指示在PDCP 接收端哪些 SDU 丢失以及哪些 SDU被正确接收。Bitmap中第Nbit位置就是N,例如Bitmap中第1bit的位置为1。bit value =0代表COUNT=(FMC+bit position)mod 2^32 的PDCP SDU 丢失,bit value =1代表COUNT=(FMC+bit position)mod 2^32 的PDCP SDU 被正确接收。
Interspersed ROHC feedback 长度可变,该字段包含一个仅有feedback的 ROHC packet,即与PDCP SDU无关的ROHC packet。
SDU type长度为3bits,即PDCP SDU类型,PDCP entity可以根据 SDU type的不同处理 SDU,例如 ROHC 适用于 IP SDU,但不适用于 其他SDU type。这个SDU type用于sidelink 场景。
KNRP-sess ID长度为16 bits,用于sidelink场景,对于不需要完整性和加密保护的SLRB,UE应在PDCP PDU header中将KNRP-sess ID设置为“0”。
UDC feedback PDCP control PDU中的field,适用于 AM DRB。FE用于指示是否检测到checksum error。value“1”表示检测到checksum error,这时候UE 应reset compression buffer。
State variables, constants, and timers
PDCP entity 中使用的状态变量都是非负整数,取值范围为 0 到 [2^32 – 1]。
PDCP data PDU的SN要对2^[SN-size] 进行mod运算得到,对于UM和AM DRB,SN size可以配置为12 或18 bits,而SRBs只能是12 bits,SN的循环范围对应:0 到 [2^[pdcp-SN-SizeUL] – 1] 或 0 到 [2^[pdcp-SN-SizeDL] – 1] 或 0 到 [2^[sl-PDCP-SN-size] – 1]。
PDCP entity 发送端只要维护一个状态变量TX_NEXT,该状态变量指示下一个要传输的PDCP SDU 的 COUNT值。初始值为 0,除了配置有state variables continuation的 SRB。对于配置有state variables continuation的target SRB,初始值是存储在对应source SRB的PDCP entity中的值。对于配置了state variables continuation的 source SRB,初始值为对应 target SRB存储在PDCP entity中的值。
接收PDCP实体为了进行正确的数据接收和窗口维护操作,需要维护下列状态变量和常量。
(1)RX_NEXT:该状态变量表示预期接收的下一个 PDCP SDU 的 COUNT 值。初始值为 0,除了sidelink广播和组播,以及配置有state variables continuation的 SRB。对于广播和组播的NR sidelink通信,RX_NEXT的SN部分的初始值为(x +1) modulo (2[sl-PDCP-SN-Size]),其中x是第一个收到的PDCP Data PDU的SN . 对于配置有state variables continuation的目标SRB,初始值是存储在对应源SRB的PDCP entity中的值。对于配置了state variables continuation的source SRB,初始值为对应目标SRB存储在PDCP entity中的值。对于用于广播和组播的 NR sidelink通信,由 UE 实现来选择 RX_NEXT 的 HFN 部分,以便使得RX_DELIV 的初始值是正值。
(2)RX_DELIV:该状态变量指示第一个PDCP SDU 未传送到上层但仍在等待的 COUNT 值,即重排序窗口的下边界。初始值为 0,除了sidelink广播和组播,以及配置有state variables continuation的 SRB。对于广播和组播的 NR sidelink通信,RX_DELIV 的 SN 部分的初始值为 (x – 0.5 × 2[sl-PDCP-SN-Size–1]) modulo (2[sl-PDCP-SN-Size]) ,其中 x 是第一个接收到的 PDCP data PDU 的 SN。对于配置有state variables continuation的目标SRB,初始值是存储在对应源SRB的PDCP entity中的值。对于配置了state variables continuation的source SRB,初始值为对应目标SRB存储在PDCP entity中的值。
(3)RX_REORD:此状态变量指示与触发 t-Reordering的 PDCP data PDU 关联的 COUNT 值下一个COUNT 值。 对于配置有state variables continuation的目标SRB,初始值是存储在对应源SRB的PDCP entity中的值。对于配置了state variables continuation的 source SRB,初始值为对应目标SRB存储在PDCP entity中的值。
(4)Window_Size:此常量指示reordering window的大小,等于SN取值空间的一半,当SN长度配置为12bit时,窗口大小为2048,当SN长度配置为18bit时,窗口大小为131072。具体地, 对于SRB/DRB,该值等于 2^([pdcp-SN-SizeDL] – 1);对于SLRB,对应2^([sl-PDCP-SN-Size] – 1)。
具体SRB需要配置state variables continuation的DAPS场景如上38.331所述。
PDCP entity 发送端只有一个Timer discardTimer,该timer值能用于DRBs,当从upper layer收到SDU时 ,就要对该SDU启动一个新的discardTimer。
当 PDCP SDU 的 discardTimer 超时,或者 PDCP SDU 的成功传递被 PDCP 状态报告确认时,发送 PDCP entity将丢弃 PDCP SDU 以及相应的 PDCP data PDU。如果相应的PDCP Data PDU已经提交给RLC,则也要向RLC指示丢弃的命令。discardTimer只有start和超时,不存在stop的场景。
PDCP entity接收端对应t-Reordering,由RRC层参数配置,但 NR sidelink场景除外。对于 NR sidelink,t-Reordering由UE 实现确定。该计时器主要用于检测PDCP data PDU的丢失。如果 t-Reordering 正在运行,则不应额外启动 t-Reordering,即每个接收 PDCP entity只会有一个 t-Reordering 在给定时间运行。