工作生活5G NR RLC协议

NR RLC Protocol General and Proc

2019-07-09  本文已影响0人  SnC_

1. General

1.1 RLC Archetecture

RLC entities

RRC控制RLC的配置

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

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

RLC entity有3种mode:

  1. AM
  2. UM
  3. 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上收/发消息

AM RLC entity

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

1.2 Services

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

1.3 Functions

RLC子层支持的功能有:

2. Procedures

2.1 RLC entity handling

RLC entity establishment

当上层请求RLC entity建立,则UE需要:

RLC entity re-establishment

当上层请求RLC entity的重建立,则UE需要:

RLC entity release

当上层请求RLC entity释放,则UE需要:

2.2 Data transfer procedures

TM data transfer

UM data transfer

Transmit

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

Receive

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

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

  • 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实体应:

为什么UM敢把落在特定范围内叫做“出窗”?因为UM没有重传,sn永远是向前走的,不可能落在窗口的左侧。
落在窗口左侧的pdu会被视为正常包接收,并移动窗口。

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

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

  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已收齐;
      则停止并重置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没收齐;
      则启动t-Reassembly,并将RX_Timer_Trigger设置为RX_Next_Highest。

当t-Reassembly超时,则:

上一篇下一篇

猜你喜欢

热点阅读