NR RLC Protocol General and Procedure

1. General

1.1 RLC Archetecture

RLC entities

RLC(Radio Link Control)层位于PDCP层(或RRC层)和MAC层之间。它通过RLC通道(RLC channel)与PDCP层(或RRC层)进行通信,并通过逻辑信道与MAC层进行通信。RLC配置是逻辑信道级的配置,一个RLC实体(RLC entity)只对应一个UE的一个逻辑信道。RLC实体从PDCP层接收到的数据,或发往PDCP层的数据被称作RLC SDU(或PDCP PDU)。RLC实体从MAC层接收到的数据,或发往MAC层的数据被称作RLC PDU(或MAC SDU)。

RLC层主要负责(见38.322):

RRC控制RLC的配置

RLC子层的功能主要由RLC实体(entities)表现。 在通信过程中,gNB和UE端各有一个RLC entity。

RLC PDU既可以是 RLC data PDU,也可以是 RLC control PDU

RLC entity有3种mode:AM  UM   TM

在UM和TM mode下,RLC entity既是发送实体也是接收实体。
在AM mode下,RLC entity有发送端和接收端。

发送部分的功能为:接收上层的SDU,通过下层将PDU传给另一设备上的对等实体。
接收部分反之。

将RLC SDU构造成RLC PDU不需要下层的通知就可以直接进行。
在AM和UM mode下,根据下层的通知,RLC SDU可能会被分段,用多个RLC PDU来传输。

先将SDU组装成PDU,与之后可能将SDU分段再用PDU传输,这两者并不冲突。
在实际的组装PDU实现中,PDU数据域并不是简单的copy SDU数据并组装(这样buffer不够用),而是通过指针引用内存中的数据。如果之后要分段,只需要改一下offset即可。

仅当收到下层的通知(transmission opportunity)时,RLC PDU才会被传送到下层。

TM RLC entity

TM mode 下的 RLC entity 可在BCCH, CCCH, PCCH逻辑信道上收/发 RLC PDU。

TM RLC entity 只会在遇到以 TMD PDU 为内容的 RLC data PDU时,才会进行收/发。

UM RLC entity

可在 DTCH上收/发消息

  • 发:
    • 为每个 RLC SDU 生成 UMD PDU,在其中加上 RLC header.
    • 当收到下层关于传输机会(transmission opportunity)的通知时,若需要,会将 RLC SDU 分段以满足下层对于PDU大小的规定。
  • 收:
    • 检查传输损失
    • 重组SDU,若重组好则尽快发往上层。
    • 当由于传输问题无法被正常重组进某个SDU时,丢弃PDU

AM RLC entity

可在 DCCH 或 DTCH 上收/发消息。
AM RLC 是唯一收/发 RLC control PDU 的,其内容为: STATUS PDU

  • 发:
    • 支持重传
      • 若对SDU的分段不符合下层在一传输机会下对于PDU传输大小的规定,则AM RLC entity可对SDU重新分段。
      • 重新分段的次数不受限制。
    • 为每个RLC SDU(或段)生成 AMD PDU,在其中加上RLC header
  • 收:
    • 检查是否重复接收,若是,丢弃重复的。
    • 检查在下层传输时是否有丢失,若是,向对等实体请求重传。
    • 重组SDU,若重组好则马上传给上层 (RLC实体的接收端不会缓存完整的SDU)。

1.2 Services

RLC向上层提供的服务: TM, UM, AM mode下的data transfer。
RLC向下层请求的服务:

  • data transfer
  • 关于传输机会的通知,以及在传输机会中RLC PDU大小的限制。

1.3 Functions

RLC子层支持的功能有:

  • 上层PDU的传输
  • AM mode下,用ARQ纠错
  • AM, UM mode下,对RLC SDU的分段和重组。
  • AM mode下,对RLC SDU段的重新分段。
  • AM mode下,发现重复数据。
  • AM, UM mode下,RLC SDU的丢弃
  • RLC 重新建立
  • AM mode下,对协议检错。

2. Procedures

2.1 RLC entity handling

2.2 Data transfer procedures

TM data transfer

  • 发送:当发送一个新的TMD PDU到下层时,负责发送的TM RLC entity应该:
    • 发送RLC SDU到下层,不做任何修改。
  • 接收:当从下层接收一个新的TMD PDU时,负责接收的TM RLC entity应该:
    • 传递TMD PDU到上层,不做任何修改

UM data transfer

Transmit

当发送一个UMD PDU到下层时,负责发送的RLC entity应该:

  • 若UMD PDU包含RLC SDU的一个段,设SN(sequence number)为TX_Next;
  • 若UMD PDU包含的段映射到RLC SDU的最后一byte,则TX_Next+1。

Receive

UM RLC实体应该根据状态变量 RX_Next_Highest维护一个重组窗口,范围为 [RX_Next_Highest - UM_Window_Size , RX_Next_Highest)

当从下层接收到一个UMD PDU时,UM RLC实体应:

  • 要么将UMD PDU去掉RLC header后传到上层,并丢弃UMD PDU,要么将其放入reception buffer
  • 若接收的UMD PDU被放入reception buffer,则
    更新状态变量,重组并传递RLC SDU给上层,并根据需要 start/stop t-Reassembly
  • 若t-Reassembly超时,则UM RLC 实体应:
    更新状态变量,丢弃RLC SDU段并根据需要启动t-Reassembly
  • RX_Next_Reassembly:当前等待重组的最早一个PDU的SN值。接收端默认SN小于该值的包都已被成功接收了。
  • RX_Time_Trigger:保存了触发t-Reassembly的PDU的SN值的下一个SN。当启动t-Reassembly时,说明有小于该SN的PDU还未收到,此时需要等待这些PDU以便进行重排序。
  • RX_Next_Highest:保存所有已接收的PDU中,最高的SN+1。该值对应reassembly window的上边界。

当一个UMD PDU从下层被接收,则UM RLC实体应:

  • 若该UMD PDU不包含SN,则去掉RLC header,将RLC SDU发给上层
  • 若SN值落在 [ RX_Next_Highest - UM_Window_Size , RX_Next_Reassembly) 范围内,将PDU丢弃
  • 否则,将PDU放入reception buffer

当一个SN = x 的 UMD PDU 放入 Reception buffer时,接收端会按照下列步骤操作:

  1. 若至此SN = x 的SDU的所有byte都已收到,则将SDU重组,去掉RLC header并传给上层。

  2. 若x = RX_Next_Reassembly,则更新RX_Next_Reassembly为目前下一个最早的SN值。

  3. 若x大于RX_Next_Highest,则RX_Next_Highest设为x+1,相应地 reassembly window也向前移。 因为前移而落到reassembly window之外的PDU,将被丢弃。
    若前移后RX_Next_Reassembly也落到重组窗口外,则将其值更新为 大于等于RX_Next_Highest - UM_Window_Size,但还未被重组并传往上层的最早一个SN值。

  4. 若t-Reassembly正在运行

    • 如果RX_Timer_Trigger <= RX_Next_Reassembly,或者;
    • RX_Timer_Trigger落在reassembly window之外并且不等于RX_Next_Highest;
    • RX_Next_Highest = RX_Next_Reassembly + 1,且SN = RX_Next_Reassembly的SDU的末位byte之前没有遗失;
      则停止并重置t-Reassembly
  5. 若t-Reassembly没有运行(包括因为前面步骤导致的停止运行),且

    • RX_Next_Highest > RX_Next_Reassembly+1(这意味着至少还有一个 SN < RX_Next_Highest没有收到,则应该启动定时器等待未接收的PDU)
    • RX_Next_Highest = RX_Next_Reassembly + 1,且SN = RX_Next_Reassembly的SDU的末位byte之前至少有1 byte缺少;
      则启动t-Reassembly,并将RX_Timer_Trigger设置为RX_Next_Highest。

当t-Reassembly超时,则:

  • 将RX_Next_Reassembly更新为大于RX_Timer_Trigger,但还未重组的第一个SN值。
  • 丢弃所有SN < 新RX_Next_Reassembly的PDU。
  • 若此时RX_Next_Highest >= RX_Next_Reassembly+1,且SN = RX_Next_Reassembly的SDU的末位byte之前至少有1 byte缺少;
    则启动t-Reassembly,并将RX_Timer_Trigger设置为 RX_Next_Highest


NR RLC Protocol data units, formats and parameters

1. Protocol data units

RLC PDU可被分为RLC data PDU 和 RLC control PDU。

  • RLC data PDU可被用在TM, UM, AM等模式下的RLC 实体,用于传输上层的PDU(即RLC SDU)。
  • RLC control PDU被用在AM RLC实体,用于实施ARQ(自动重传机制)。

RLC data PDU分为 TMD PDU, UMD PDU, AMD PDU,分别用于各自mode下对上层PDU的传递。
RLC control PDU,即STATUS PDU,被AM RLC实体的接收端用于通知对等实体哪些AMD PDU成功接收,又有哪些丢失。

2. Formats and parameters

Formats

RLC PDU是一段比特串。在接下来表示比特串的表中,
first and most significant bit是第一行的最左边的bit;
last and least significant bit是最后一行最右边的bit。
阅读的顺序是从左到右,从上到下。

RLC SDU是按字节对齐的比特串。RLC SDU从第一bit开始陆续被包含进RLC PDU。

TMD PDU

TMD PDU仅有数据段,没有RLC header。

UMD PDU

UMD PDU由数据段和 UMD PDU header构成。 其中UMD PDU header是字节对齐的。
当一UMD PDU包含一完整的RLC SDU,则UMD PDU header仅包含SI和R字段。
一UMD PDU header仅当对应的SDU被分段时才会包含SN字段。UMD RLC实体的SN字段长度可由RRC设置为 6 bit或 12 bit。 若UMD PDU中的SDU段是第一段,则header中没有SO字段。 SO字段的长度为 16 bits。

UMD PDU containing a complete RLC SDU

UMD PDU with 6 bit SN (No SO)

UMD PDU with 12 bit SN (No SO)

UMD PDU with 6 bits SN and with SO

UMD PDU with 12 bits SN and with SO

AMD PDU

AMD PDU由数据段和AMD PDU header构成。 AMD PDU header是字节对齐的。
AMD实体的SN字段长度可由RRC设置为12 bit或 18 bit,分别的,AMD PDU header的长度为2 和 3个字节。
AMD PDU header包含 D/C , P , SI , SN。若AMD PDU中的SDU段是第一段,则header中没有SO字段。 SO字段的长度为 16 bits。

AMD PDU with 12 bit SN (No SO)

AMD PDU with 18 bit SN (No SO)

AMD PDU with 12 bit SN with SO

AMD PDU with 18 bit SN with SO

STATUS PDU

STATUS PDU由 RLC control PDU header 和 STATUS PDU payload构成。
RLC control PDU header由 D/C和CPT字段构成。

STATUS PDU payload 从 RLC control PDU header后的第一个bit开始,它的构成有:
一个ACK_SN,一个E1,0或数个NACK_SN的集合,一个E1,一个E2,一个E3,并且可能有一对SOstart和SOend或者针对每个NACK_SN的NACK range。

STATUS PDU with 12 bit SN

STATUS PDU with 18 bit SN

Parameters

Data field

数据域单元按照其到达RLC实体发送端的顺序映射到数据域。

对于 TMD PDU,UMD PDU,和AMD PDU:

  • 数据域大小的粒度(granularity)为1 byte。
  • 数据域的最大大小为PDCP PDU的最大大小。

对于TMD PDU,仅一个RLC SDU可被映射到TMD PDU的数据域。
对于UMD PDU、AMD PDU,一个RLC SDU或一个RLC SDU段,可被映射到其数据域。

Sequence Number (SN) field

长度:(可配置项)对于 AMD PDU,12 bits或 16 bits; 对于UMD PDU,6 bits或 12 bits

SN表示了对应RLC SDU的序列号。
对于RLC AM来说,每来一个RLC SDU,SN加一;
对于RLC UM来说,每来一个分段后的RLC SDU,SN加一。

在UM mode中,不分段的SDU被组装成PDU时是不分配SN值的。SN值在UM mode中起到重组SDU的作用。

Segmentation Info (SI) field

长度: 2 bits
SI字段表示RLC PDU包含的是一个完整的RLC SDU,还是一个RLC SDU的前、中、后段。

SI field interpretation

Segment Offset (SO) field

长度:16 bits

SO字段表示RLC SDU段在原始的RLC SDU中的哪个byte位置开始。

Data/Control (D/C) field

长度:1 bit
D/C字段表示了一个RLC PDU是一个 RLC data PDU 还是 RLC control PDU

D/C field interpretation

Polling bit (P) field

长度:1 bit
P字段表示AM RLC实体的发送端是否通知其对等实体返回一个STATUS report

P field interpretation

Reserved (R) field

长度:1 bit
R字段是这版本协议的保留字段。发送端应将这字段置零,接收端应忽略此字段。

Control PDU Type (CPT) field

长度:3 bits
CPT字段表示RLC control PDU的类型。

CPT field interpretation

Acknowledgement SN (ACK_SN) field

长度:12bits 或 18 bits (可配置项)

ACK_SN字段表示下一个当前未被成功接收,但未被STATUS PDU中的NACK_SN字段标出过的SDU的SN值。

当RLC实体的发送端收到来自对等实体的STATUS report时,它知道了SN值一直到(但不包括)ACK_SN的范围中有哪些RLC SDU被对等实体成功接收。 没有被成功接收的有以下几种情况:

  • 在STATUS PDU中包含其NACK_SN的RLC SDU
  • 在STATUS PDU中包含其NACK_SN,SOstart,SOend的部分RLC SDU
  • 在STATUS PDU中包含其NACK_SN,NACK_range的RLC SDU
  • 在STATUS PDU中包含其NACK_SN,NACK range,SOstart,SOend的部分RLC SDU

Extension bit 1 (E1) field

长度:1 bit
E1字段表示后面是否有一组NACK_SN,E1,E2,E3字段

E1 field interpretation

Negative Acknowledgement SN (NACK_SN) field

长度:12 bits或 18 bits(可配置项)
NACK_SN字段表示SN为该值的SDU(或段)是否丢失。

Extension bit 2 (E2) field

长度:1 bit
E2字段表示后面是否有 SOstart,SOend。

E2 field interpretation

SO start (SOstart) field

长度:16 bits
SOstart(以及SOend)字段表示被RLC接收端发现丢失的SN=NACK_SN的SDU的某个部分。
SOstart的值表示该丢失的SDU部分在原始SDU中的哪一个byte处开始。

SO end (SOend) field

长度:16 bits

  • 当E3=0时,如上所述的类似,SOend字段表示丢失的SDU部分在原始SDU中的哪一个byte处结束。
  • 当E3=1时,SOend字段表示被RLC接收端发现丢失的SN=NACK_SN+NACK range-1的SDU部分。其中SOend的值表示丢失的SDU部分在原始SDU中的哪一个byte处结束。

Extension bit 3 (E3) field

长度:1 bits
E3字段表示后面是否跟着关于一连串RLC SDU未被接收的消息(是否有range字段)。

E3 field interpretation.png

NACK range field

长度:8 bits
NACK range字段表示从NACK_SN开始(包括NACK_SN),有几个连续的RLC SDU丢失。



作者:SnC_
链接:https://www.jianshu.com/p/857102be18c1
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

发布了94 篇原创文章 · 获赞 43 · 访问量 13万+

猜你喜欢

转载自blog.csdn.net/a932432866/article/details/102851808
今日推荐