美文网首页5G NR RLC协议
NR RLC ARQ procedures 中文翻译

NR RLC ARQ procedures 中文翻译

作者: SnC_ | 来源:发表于2019-07-08 10:36 被阅读0次

    ARQ procedures仅在AM mode下实施。

    Retransmission

    AM RLC实体的发送端,可以通过其对等实体的STATUS PDU,接收到某个SDU或段的nack消息。

    当接收到这样的消息时,RLC 实体应:

    • 若SN在 [TX_Next_Ack , 发送到下层的PDU中SN最高的值] 范围内,则考虑将此SDU或段重传。

    ACK_SN指示的SDU不需要被重传。

    当一个SDU或段被考虑重传时,RLC实体的发送端应:

    • 若此SDU或段是第一次被重传,则将其RETX_COUNT设为0
    • 否则,RETX_COUNT+1
    • 若RETX_COUNT = maxRetxThreshold,通知上层重传次数已达上限

    当重传一个SDU或段时,RLC实体的发送端应:

    • 若需要,将SDU或段进行分段
    • 生成符合下层在传输机会中关于total size规定的新PDU
    • 发送PDU到下层

    当生成新PDU时,RLC实体应:

    • 只将原始SDU或段映射到新PDU中的data field
    • 根据AMD PDU的格式规定,修改新PDU的header
    • 根据轮询的规定,设置P字段

    Polling

    当RLC实体需要请求对等实体的STATUS reporting时,就需要用到轮询机制。

    Transmission of a AMD PDU

    将要传到下层的PDU包含未被传过的SDU或段,RLC实体的传输端应:

    • PDU_WITHOUT_POLL+1
    • BYTE_WITHOUT_POLL增加PDU的data field中新byte数
    • 若PDU_WITHOUT_POLL>=pollPDU;或
    • 若BYTE_WITHOUT_POLL>=pollByte,则
      • 在此PDU中加入轮询

    当收到下层的传输机会时,对于每一个已经发送的PDU,RLC实体应:

    • 若发送PDU后,transmission buffer和retransmission buffer都变为空(除了已发送,但还在等待确认的SDU或段);或
    • 若发送PDU后,由于各种原因(如窗口堵塞),没有新的SDU可被发送,则
      • 在此PDU中加入轮询。

    要在PDU中加入轮询,RLC的发送端应:

    • 将PDU中的P字段设为1
    • 将PDU_WITHOUT_POLL设为0
    • 将BYTE_WITHOUT_POLL设为0

    当发送一个带有轮询的PDU到下层时,RLC实体应:

    • 将POLL_SN设为已发送的PDU中SN最大的值。
    • 若t-PollRetransmit未运行,将其启动;否则将其重启。

    Reception of a STATUS report

    当收到对等实体的接收端传来的STATUS report时,RLC实体的发送端应:

    • 若STATUS report包含的是SN=POLL_SN的SDU的ack/nack消息,则
      • 若t-PollRetransmit正在运行,stop and reset it

    Expiry of t-PollRetransmit

    当t-PollRetransmit超时时,RLC实体的发送端应:

    • 若transmission buffer和retransmission buffer都为空(不包括已发送,但还在等待确认的SDU或段);或
    • 由于各种原因(如窗口堵塞),没有新的SDU可被发送,则
      • 考虑将已发送的SDU中SN值最大的那个重传。
      • 考虑将每一个未被ack的SDU重传

    此二者执行哪个貌似并没有硬性规定,都可以。执行1比较简单,执行2比较可靠。

    • 在PDU中加入轮询

    Status reporting

    RLC实体发送STATUS PDU给其对等实体,是为了通知SDU或段的ack/nack情况。

    触发STATUS reporting的条件包括:

    • 来自对等实体的轮询
      • 当SN=x且p字段=1的PDU从下层被接收时,RLC实体的接收端应该:
        • 若根据判断,该PDU应该被丢弃;或
        • 若x<RX_Highest_Status 或 x>=RX_Next+AM_Window_Size,则
          • 触发STATUS report
        • 否则,等待,直到满足x<RX_Highest_Status 或 x>=RX_Next+AM_Window_Size,再触发STATUS report

      该机制保证了RLC status report在HARQ reordering之后再发送

    • 发现PDU接收失败
      • RLC实体的接收端应该在t-Reassemly超时后再触发STATUS report

    t-Reassembly超时会导致RX_Highest_Status更新和STATUS report的触发,但是后者应该在前者之后发生。

    当触发了STATUS report时,RLC实体的接收端应该:

    • 若t-StatusProhibit未运行,则在下层通知的第一个传输机会中,构建STATUS report,将其传到下层。
    • 否则,即使t-StatusProhibit运行期内STATUS report已经触发了多次,也到等到t-StatusProhibit超时后的第一个传输机会时,再构造STATUS report,并传出。

    当一个STATUS PDU被传输到下层时,RLC实体应该:启动t-StatusProhibit

    在构建STATUS PDU的过程中,RLC实体应:

    • 对于那些SN值在 [RX_Next , RX_Highest_Status)范围内,且未被完整接收的SDU,它们的SN都放到STATUS PDU中,结果STATUS PDU的大小仍满足下层关于PDU的总大小的规定的:
      • 对于一个byte都没有收到的SDU,在 STATUS PDU中包含NACK_SN,其值设为此SDU的SN值
      • 对于部分被接收到,但还有一连续字节段没被接收到的SDU,在STATUS PDU中包含一个NACK_SN,SOstart,SOend的集合。
      • 对于还未被接收到的一段连续的SDU序列:
        • 在STAUS PDU中包含一个NACK_SN和NACK range的集合
        • 如果需要的话,在STATUS PDU中包含一对SOstart和SOend。
    • 将ACK_SN的值设为:未被确认收到,但未在STATUS PDU中标为丢失(也就是没有在NACK_SN中被标出过)的下一个SDU的SN值。

    比如现在有SN为1~100这一百个SDU需要状态报告的反馈,即RX_Next=1,RX_Highest_Status=100.
    如果在构建STATUS PDU过程中,将1~100之间没成功接收的SDU的SN都放到STATUS PDU的NACK_SN字段中,结果填到SN为70的时候,STATUS PDU大小已经达到了下层规定的上限,那么STATUS PDU的ACK_SN的值就填70.
    剩下的71~100中未被成功接收的SDU的SN值如果在下个STATUS PDU中能被全部放进去,那么下一个STATUS PDU的ACK_SN值就为这些未成功接收的SDU中最大的SN值。

    相关文章

      网友评论

        本文标题:NR RLC ARQ procedures 中文翻译

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