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
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章