NR RLC ARQ procedures 中文翻译

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_Next+AM_Window_Size,则
        • 触发STATUS report
      • 否则,等待,直到满足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 中文翻译)