美文网首页工作生活5G NR RLC协议
NR RLC Protocol General and Proc

NR RLC Protocol General and Proc

作者: SnC_ | 来源:发表于2019-07-09 14:04 被阅读0次

    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上收/发消息

    • 发:
      • 为每个 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

    RLC entity establishment

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

    • 建立RLC entity;
    • 将RLC entity的状态变量初始化;
    • 按照2.2小节的流程进行。

    RLC entity re-establishment

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

    • 丢弃所有RLC SDU和段,RLC PDU;
    • reset timers;
      按照2.2小节的流程进行

    RLC entity release

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

    • 丢弃所有RLC SDU和段,RLC PDU;
    • 释放RLC entity

    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

    为什么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超时,则:

    • 将RX_Next_Reassembly更新为不小于RX_Timer_Trigger,且未重组的第一个SN值。
    • 丢弃所有SN < 新RX_Next_Reassembly的PDU。
    • 若此时RX_Next_Highest >= RX_Next_Reassembly+1,且SN = RX_Next_Reassembly的SDU没收齐;
      则启动t-Reassembly,并将RX_Timer_Trigger设置为 RX_Next_Highest

    相关文章

      网友评论

        本文标题:NR RLC Protocol General and Proc

        本文链接:https://www.haomeiwen.com/subject/qwmchctx.html