5G NR RLC:Data Transfer ARQ
其他相關(guān)內(nèi)容
RLC PDU and Parameters
RLC架構(gòu)和RLC entity
一 RLC entity handling
RLC entity有建立、重建和釋放的過(guò)程(establishment,re-establishment和release),這些都來(lái)自于高層請(qǐng)求,其實(shí)就是RRC。
- 如果高層請(qǐng)求establishment,UE將會(huì)建立RLC entity,設(shè)置狀態(tài)變量為初始值;
- 如果高層請(qǐng)求re-establishment,UE則刪掉所有的SDU,SDU segment和PDU,重置timer,將狀態(tài)變量重置為初始值。
- 如果高層請(qǐng)求release,UE同樣會(huì)刪掉所有RLC SDU,SDU segment和PDU,并release RLC entity。
二 Data transfer procedures
我們知道RLC有三種傳輸模式:TM、UM和AM,且這三種傳輸模式由業(yè)務(wù)類型決定:TM和UM適合時(shí)延敏感、錯(cuò)誤不敏感的實(shí)時(shí)業(yè)務(wù),而AM適合時(shí)延不敏感、錯(cuò)誤敏感的非實(shí)時(shí)業(yè)務(wù)。根據(jù)各自傳輸特點(diǎn),三種傳輸模式有各自不同的數(shù)據(jù)傳輸過(guò)程。
1 TM data transfer
TM模式下,即所謂的透?jìng)?#xff0c;是三種傳輸模式中最簡(jiǎn)單的一種,RLC層對(duì)上層PDCP來(lái)的SDU不做任何處理,直接送到MAC層進(jìn)行傳輸,對(duì)收到的來(lái)自MAC的PDU同樣不做任何處理,直接送到PDCP。
此時(shí),傳輸側(cè)的RLC entity被叫做transmitting TM RLC entity,其傳輸?shù)腜DU叫做TMD PDU。當(dāng)一個(gè)RLC SDU (PDCP PDU)到達(dá)RLC時(shí),transmitting TM RLC entity不做任何加工,直接將這個(gè)RLC SDU送到MAC層,換句話說(shuō),就是在透?jìng)鲿r(shí),一個(gè)RLC SDU就是一個(gè)TMD PDU,transmitting TM RLC entity不對(duì)TMD PDU做加頭、分段等處理。對(duì)應(yīng)的,在接收側(cè),receiving TM RLC entity也直接將收到的TMD PDU送到PDCP,因?yàn)榘l(fā)送端沒(méi)有加頭、分段,所以接收端也不需要去頭、重組等操作。
2 UM data transfer
與TM模式同理的地方是,UM模式下,傳輸側(cè)叫做transmitting UM RLC entity,接收側(cè)叫做receiving UM RLC entity,傳輸?shù)腜DU叫做UMD PDU。
與TM模式不同的地方是,UM雖然是Unacknowledge mode,即非確認(rèn)模式,也就是UM模式也不保證正確傳輸,但比TM模式要復(fù)雜一些,發(fā)送側(cè)需要對(duì)RLC SDU進(jìn)行分段(如必要時(shí))和加頭,來(lái)構(gòu)建UMD PDU,接收側(cè)相應(yīng)的需要對(duì)UMD PDU進(jìn)行去頭和重組(如必要)。分段和重組是因?yàn)镸AC會(huì)告知UM RLC entity它所能接收的UMD PDU的大小限制,因?yàn)榇笮∈芟?#xff0c;所以對(duì)于過(guò)大的RLC SDU,在將其構(gòu)建為UMD PDU時(shí),一個(gè)PDU里有時(shí)無(wú)法包含一個(gè)完整的SDU,所以此時(shí)需要將RLC SDU進(jìn)行分割,分割為多個(gè)片段RLC SDU segment,然后每個(gè)PDU的數(shù)據(jù)域里只包含一個(gè)RLC SDU segment,再加頭構(gòu)建為UMD PDU,送往MAC層進(jìn)行傳輸。所以分段/重組和加頭/去頭就是UM模式和TM模式的主要不同。
為了正常實(shí)現(xiàn)UM RLC entity的這些功能,UM RLC entity需要維護(hù)一些狀態(tài)變量和計(jì)時(shí)器,這里先將這些狀態(tài)變量和計(jì)時(shí)器列舉如下,并對(duì)其概念進(jìn)行初步解釋,以方便后面對(duì)UM模式下的數(shù)據(jù)傳輸過(guò)程的理解。
發(fā)送端狀態(tài)變量:
a) TX_Next,該變量指示下一個(gè)要構(gòu)建的包含RLC SDU segment的UMD PDU的順序號(hào)SN,每到最后一個(gè)segment時(shí)更新。簡(jiǎn)單的說(shuō)就是發(fā)送側(cè)發(fā)送的UMD PDU的順序號(hào),初始值為0。
接收端狀態(tài)變量:
a) RX_Next_Reassembly,這個(gè)變量指向所有要重組的包中,最早的那個(gè)SN;
b) RX_Timer_Trigger,這個(gè)變量指向觸發(fā)計(jì)時(shí)器t-Reassembly的那個(gè)包的SN+1;
c) RX_Next_Highest,這個(gè)變量指向所有已收到的UMD PDU中最大的SN+1。
計(jì)時(shí)器:
t-Reassembly,這個(gè)timer用于接收端檢測(cè)是否有丟包存在,從邏輯上講,如果一個(gè)包沒(méi)收到的,那接收端不可能無(wú)限制等下去,這就是這個(gè)timer的意義所在。一個(gè)RLC entity在一個(gè)時(shí)刻,只能維護(hù)一個(gè)t-Reassembly。
了解了UM模式的基本邏輯和一些狀態(tài)變量及計(jì)時(shí)器后,下面對(duì)具體的數(shù)據(jù)傳輸過(guò)程進(jìn)行描述。
發(fā)送端
發(fā)送端根據(jù)MAC層的指示,在必要時(shí),將大小超過(guò)限制的RLC SDU進(jìn)行分段,然后構(gòu)建UMD PDU。如上所述,發(fā)送端需要維護(hù)狀態(tài)變量TX_Next,如果構(gòu)建的UMD PDU包含的是一個(gè)RLC SDU segment,則將該UMD PDU的SN設(shè)為T(mén)X_Next。如果這個(gè)segment是一個(gè)RLC SDU的最后一個(gè)分段,那么與此同時(shí)TX_Next+1。一個(gè)UMD PDU如果包含的是一個(gè)完整的RLC SDU,那么這個(gè)UMD PDU沒(méi)有SN。然后將構(gòu)建好的UMD PDU送到MAC層進(jìn)行傳輸。
接收端
接收端在接收UMD PDU時(shí),通過(guò)上述接收端的三個(gè)狀態(tài)變量,維護(hù)一個(gè)reassembly window,用于接收和重組:
- RX_Next_Highest,該變量即為reassembly window的上邊界;
- UM_Window_Size,該常數(shù)為reassembly window的大小,6 bit SN時(shí)為32,12 bit SN時(shí)為2048;
- (RX_Next_Highest – UM_Window_Size),上邊界減去窗口大小自然為reassembly window的下邊界;
即如果一個(gè)SN落在(RX_Next_Highest – UM_Window_Size) <= SN <RX_Next_Highest為reassembly window范圍內(nèi),就是落在了reassembly window內(nèi)。通過(guò)接收端不斷的接收新的UMD PDU,變量RX_Next_Highest不斷更新,所以窗口上邊界被不斷拉著向前,通過(guò)不斷“PULL”這個(gè)窗口,來(lái)維持UMD PDU的接收。
具體的接收過(guò)程為,當(dāng)收到UMD PDU之后,按照這個(gè)UMD PDU是一個(gè)完整的RLC SDU還是一個(gè)RLC SDU segment,以及這個(gè)segment的SN的大小,分為以下幾種情況:
對(duì)于放到reception buffer中的PDU,如果一個(gè)SDU的segment都收全了,則經(jīng)過(guò)重組和去頭后,立馬送到PDCP,RLC無(wú)需照顧送到上層的包的順序,與此同時(shí),進(jìn)行狀態(tài)變量的更新。
對(duì)于變量RX_Next_Highest,永遠(yuǎn)指向最大的SN+1,所以如果收到的是一個(gè)新的、更大的SN,則更新RX_Next_Highest,比如之前收到的最大的SN=5,則RX_Next_Highest=6,此時(shí)如果收到了SN=8,則更新RX_Next_Highest=9。對(duì)于SN=5和SN=8中間的包,可能是丟掉了,因?yàn)閁M模式不保證正確傳輸,所以接收端不會(huì)管。
如果新包到達(dá)的速度太快,導(dǎo)致reassembly window被不斷往后PULL,但重組的速度又跟不上,就可能導(dǎo)致會(huì)有SN,甚至RX_Next_Reassembly跑到reassembly window外面,此時(shí)需要更新RX_Next_Reassembly為reassembly window內(nèi)的最早的一個(gè)待重組的SN。
在數(shù)據(jù)傳輸過(guò)程中,接收端會(huì)按照具體情況啟動(dòng)/重啟或停止計(jì)時(shí)器t-Reassembly,簡(jiǎn)單來(lái)說(shuō)就是,如果有了待重組的包,就啟動(dòng)timer,待重組的包都組完了,就停止timer。
下面對(duì)timer啟/停條件進(jìn)行具體描述。如果t-Reassembly沒(méi)在運(yùn)行,滿足以下兩種情況任一種時(shí)啟動(dòng)timer:
比如上面的例子,由于收到SN=8的包,更新RX_Next_Highest=9,由于上一個(gè)包為SN=5,此時(shí)RX_Next_Reassembly=6,條件滿足,啟動(dòng)timer,并更新RX_Timer_Trigger=9。
比如上面例子中收到的包不是SN=8,而是SN=6,且還有SN=6的segment沒(méi)有接收完全,更新RX_Next_Highest=7,上一個(gè)包為SN=5,RX_Next_Reassembly=6,條件滿足,啟動(dòng)timer,更新 RX_Timer_Trigger=7。
如果t-Reassembly timer正在運(yùn)行,滿足以下任何條件時(shí)停止并重置timer:
比如上例RX_Timer_Trigger=7,如果SN=6的segment收全了,重組去頭后送到了PDCP,則更新RX_Next_Reassembly=7,停止并重置timer。
一旦t-Reassembly timer超時(shí),接收端也會(huì)更新?tīng)顟B(tài)變量RX_Next_Reassembly,把來(lái)不及重組的包都丟掉。之后如果滿足了timer的啟動(dòng)條件就再次啟動(dòng)timer。
3 AM data transfer
對(duì)于AM模式,與UM模式相同的地方是,AM RLC entity必要時(shí)也會(huì)進(jìn)行分段和重組,以及加頭和去頭。
與TM和UM不同的第一點(diǎn)是,AM模式是雙向的,所以AM RLC entity并不分為transmitting AM RLC entity和receiving AM RLC entity,而是稱為AM RLC entity的transmitting side和receiving side。但這只是協(xié)議上叫法的不同,在一般的討論過(guò)程中,仍然可以簡(jiǎn)單理解為發(fā)送端和接收端。
和TM/UM模式的另一點(diǎn)不同,也是最大的不同是,AM模式是確認(rèn)模式(Acknowledge Mode),要保證數(shù)據(jù)傳輸?shù)恼_性,所以發(fā)送端要根據(jù)接收端的接收情況,進(jìn)行必要時(shí)的重傳。傳輸?shù)膁ata PDU叫AMD PDU,傳輸?shù)腸ontrol PDU叫STATUS PDU。接收端通過(guò)反饋STATUS PDU給發(fā)送端,從而告知發(fā)送端RLC SDU的接收情況。STATUS PDU的優(yōu)先級(jí)高于AMD PDU,重傳的RLC SDU或RLC SDU segment的優(yōu)先級(jí)高于新傳。其余的一些不同在于Data的傳輸過(guò)程。
發(fā)送端
AM RLC entity也需要維護(hù)一些狀態(tài)變量和計(jì)時(shí)器以及計(jì)數(shù)器,下面先列舉所有發(fā)送端的State variable,Timer和Counter:
a) TX_Next_Ack,該變量指向最小的期望收到ACK的SN。
比如SN=1,2,3的AMD PDU都收到了接收端的反饋,已經(jīng)正確接收,則此時(shí)TX_Next_Ack=4,表示發(fā)送端期望收到的下一個(gè)ACK SN=4,即使發(fā)送端收到了ACK SN=5,但只要沒(méi)收到ACK SN=4,TX_Next_Ack就仍然等于4,只有確保SN=4已被正確接收,變量才會(huì)更新。
b) TX_Next,該變量指向下一個(gè)要構(gòu)建的AMD PDU的SN。
比如SN=1,2,3的RLC SDU已經(jīng)構(gòu)建好并已發(fā)送,則TX_Next=4,為下一個(gè)構(gòu)建的AMD PDU的SN。一旦SN=4的RLC SDU被發(fā)送,則更新TX_Next=5,該行為不會(huì)因?yàn)槭欠袷盏紸CK SN=4而改變。每個(gè)AMD PDU都有SN=TX_Next,不論這個(gè)AMD PDU包含的是一個(gè)完整的RLC SDU還是一個(gè)RLC SDU segment。當(dāng)AMD PDU包含完整RLC SDU或包含RLC SDU的最后一個(gè)segment時(shí)更新TX_Next=TX_Next+1。
c) POLL_SN,該變量為送到MAC層的所有AMD PDU中的最大SN。
說(shuō)白了TX_Next就是PDU的序號(hào),而TX_Next_Ack指示正確無(wú)誤的傳到哪兒了。發(fā)送端根據(jù)狀態(tài)變量TX_Next_Ack維護(hù)一個(gè)范圍如下的transmitting window:
TX_Next_Ack <= SN < TX_Next_Ack + AM_Window_Size
SN落在transmitting window外的AMD PDU不會(huì)被傳輸。可以看到TX_Next_Ack為發(fā)送窗口的下邊界,其依賴AMD PDU的正確無(wú)誤的傳輸而被推動(dòng),其中AM_Window_Size是窗口大小,為一個(gè)常數(shù),在12 bit SN的情況下為2048,18 bit SN時(shí)為131072。
當(dāng)發(fā)送端收到某個(gè)RLC SDU的反饋時(shí),會(huì)向PDCP指示該RLC SDU已被正確接收,并設(shè)TX_Next_Ack為下一個(gè)希望收到Ack的SN,即這個(gè)范圍TX_Next_Ack <= SN <= TX_Next內(nèi)的還沒(méi)有收到Ack的最小SN。
接收端
接收端維護(hù)下列State variable,Timer和Counter:
a) RX_Next,該變量指向已經(jīng)正確收到的SN+1,即接收端期望收到的下一個(gè)最小的SN,比如已經(jīng)收到了SN=1,2,3,則RX_Next=4,即使已經(jīng)收到了SN=5,但只要沒(méi)收到SN=4,RX_Next就仍然等于4。
b) RX_Next_Status_Trigger,該變量指向觸發(fā)t-Reassembly的SN+1。
c) RX_Highest_Status,該變量指示的是在構(gòu)建STATUS PDU時(shí)可以通過(guò)ACK_SN指示的最高可能的SN。
d) RX_Next_Highest,該變量指向所有已經(jīng)收到的RLC SDU中的最大SN+1。
接收端會(huì)根據(jù)狀態(tài)變量RX_Next維護(hù)一個(gè)receiving window,下式即為receiving window范圍:
RX_Next <= SN < RX_Next + AM_Window_Size
我們可以看到和發(fā)送窗口類似,RX_Next為接收窗口的下邊界,即通過(guò)SN的正確接收來(lái)“PUSH”接收窗口的下邊界。這里和UM模式當(dāng)中的reassembly window有所不同,reassembly window是依靠接收到的SN來(lái)拉動(dòng)窗口的上邊界。
當(dāng)收到一個(gè)AMD PDU時(shí),AM RLC entity會(huì)視情況將其丟掉(discard)或放入reception buffer:如果SN不在接收窗口內(nèi)或是一個(gè)之前收到過(guò)的重復(fù)的SN,則discard;其余情況下的包含RLC SDU segment的AMD PDU,則放入reception buffer中。
比如上面例子,已正確接收SN=0,1,2和4,RX_Next=3,window size假設(shè)為4,則receiving window范圍為[3, 7),所以如果收到SN<3的或者SN≥7的,discard;如果再次收到SN=4,discard;如果收到SN=3,5或6的包含RLC SDU segment的AMD PDU,則將其放入reception buffer中。
對(duì)于放入reception buffer的AMD PDU, AM RLC entity執(zhí)行下列操作:
比如上例中,如果收到的是SN=3且收全了,則更新RX_Next=5;
如果收到的是SN=5且收全了,則更新RX_Highest_Status=6。
AM模式中也涉及到了計(jì)時(shí)器t-Reassembly。只是啟/停條件和UM模式比起來(lái)稍有不同。
啟動(dòng)條件:
a) RX_Next_Highest > RX_Next +1
b) RX_Next_Highest = RX_Next + 1且SN = RX_Next的RLC SDU還沒(méi)有收全
也就是timer的啟動(dòng)只可能是因?yàn)樾碌搅薃MD PDU,導(dǎo)致了RX_Next_Highest的更新,從而滿足了啟動(dòng)條件。
停止條件:
a) RX_Next_Status_Trigger = RX_Next
b) RX_Next_Status_Trigger = RX_Next + 1且SN = RX_Next的RLC SDU收全了
c) RX_Next_Status_Trigger掉出receiving window外且RX_Next_Status_Trigger ≠ RX_Next + AM_Window_Size
前兩個(gè)條件很好理解,就是數(shù)據(jù)包的正確接收導(dǎo)致了RX_Next的更新,從而滿足了停止條件,但第三個(gè)條件我很費(fèi)解,為什么會(huì)出現(xiàn)條件中所述的情況?歡迎大家舉例子來(lái)討論。
當(dāng)t-Reassembly超時(shí):
即認(rèn)為沒(méi)必要繼續(xù)等下去,更新RX_Highest_Status為滿足>= RX_Next_Status_Trigger的還沒(méi)收全的最小SN。因?yàn)樵趖imer運(yùn)行期間,RX_Next沒(méi)有被更新到可以滿足timer停止的條件,且此時(shí)認(rèn)為接收失敗,所以RX_Next會(huì)被卡住,此時(shí),更新后的RX_Highest_Status就會(huì)替代RX_Next,來(lái)判斷timer是否需要再次啟動(dòng),否則用RX_Next來(lái)判斷的話,必然會(huì)滿足timer的啟動(dòng)條件。所以timer超時(shí)后的啟動(dòng)條件為:
a) RX_Next_Highest> RX_Highest_Status +1
b) RX_Next_Highest = RX_Highest_Status + 1且SN = RX_Highest_Status的RLC SDU還沒(méi)有收全
三 ARQ procedures
ARQ(Automatic Repeat request)只針對(duì)AM模式,因?yàn)樯厦嬉蔡岬搅?#xff0c;只有AM模式下要保證數(shù)據(jù)的正確傳輸。
這里還是先列舉ARQ過(guò)程中涉及到的Counter和Timer:
Counter:
a) PDU_WITHOUT_POLL,最近一次輪詢前的新傳AMD PDU的數(shù)量,其初始值為0;
b) BYTE_WITHOUT_POLL,最近一次輪詢前的新傳AMD PDU的byte數(shù),其初始值為0;
c) RETX_COUNT,重傳計(jì)數(shù)器,記錄著每個(gè)RLC SDU或RLC SDU segment的重傳次數(shù),每個(gè)RLC SDU都對(duì)應(yīng)著一個(gè)RETX_COUNT;
Timer:
a) t-PollRetransmit,發(fā)送側(cè)發(fā)送Polling后啟動(dòng),收到STATUS PDU后停止。
b) t-StatusProhibit,接收側(cè)發(fā)送STATUS PDU后啟動(dòng)。
1 重傳(Retransmission)
根據(jù)前面的描述,我們知道當(dāng)接收側(cè)沒(méi)有成功接收的時(shí)候,會(huì)發(fā)送一個(gè)negative acknowledgement給發(fā)送側(cè)。發(fā)送側(cè)通過(guò)STATUS PDU收到negative acknowledgement后,就會(huì)對(duì)接收失敗的包(RLC SDU or RLC SDU segment)進(jìn)行重傳。這里重傳有個(gè)前提,就是NACK的SN要在下面范圍內(nèi):
TX_Next_Ack <= SN < = the highest SN
因?yàn)門(mén)X_Next_Ack指向下一個(gè)期望收到ACK的SN,換句話說(shuō)就是,TX_Next_Ack前面的所有SN都已經(jīng)收到了Ack,也就是接收側(cè)都已經(jīng)成功接收了;the highest SN表示發(fā)送側(cè)目前為止發(fā)出去的最大的SN,接收側(cè)自然不可能NACK一個(gè)發(fā)送側(cè)還從來(lái)沒(méi)有發(fā)送過(guò)的包。
對(duì)于第一次重傳的RLC SDU或RLC SDU segment,設(shè)RETX_COUNT為0,不是第一次重傳,則RETX_COUNT+1,當(dāng)RETX_COUNT = maxRetxThreshold,即重傳次數(shù)達(dá)到規(guī)定的最大門(mén)限時(shí),向上匯報(bào)達(dá)到最大重傳次數(shù)。
我們知道在構(gòu)建AMD PDU時(shí),包的大小(total size of AMD PDU)要符合MAC層的指示,這個(gè)值并不是一直不變的,所以在重傳RLC SDU或RLC SDU segment時(shí),如有必要的話,需要重新進(jìn)行分段或再分段,也就是說(shuō)一個(gè)segment也可以被分成更小的segment。然后基于RLC SDU或RLC SDU segment來(lái)構(gòu)建新的AMD PDU,設(shè)置P域,送到MAC層進(jìn)行傳輸。
2 輪詢(Polling)
發(fā)送方通過(guò)Polling,觸發(fā)接收方的狀態(tài)報(bào)告(STATUS reporting)。一旦滿足某個(gè)或某些條件,發(fā)送側(cè)就會(huì)Polling。
對(duì)于每次新傳,發(fā)送端計(jì)數(shù)器PDU_WITHOUT_POLL+1,BYTE_WITHOUT_POLL+新傳的Byte數(shù),一旦計(jì)數(shù)器達(dá)到門(mén)限,滿足以下兩個(gè)條件之一時(shí),發(fā)送側(cè)就會(huì)Polling:
- PDU_WITHOUT_POLL >= pollPDU
- BYTE_WITHOUT_POLL >= pollByte
當(dāng)buffer滿足以下條件之一時(shí),發(fā)送側(cè)也會(huì)Polling:
- transmission buffer和retransmission buffer都為空(不包括已經(jīng)發(fā)送正在等待反饋的RLC SDU或RLC SDU segment);
- 沒(méi)有新的RLC SDU要傳輸;
注意,如果上層還有數(shù)據(jù)要傳輸?shù)脑?#xff0c;那么上述第一個(gè)條件,buffer為空不應(yīng)該導(dǎo)致不必要的輪詢。
Polling其實(shí)也是發(fā)一個(gè)AMD PDU,只不過(guò)AMD PDU中P域置1,所以發(fā)送側(cè)如果要Polling,同樣需要等待transmission opportunity,同時(shí):
- P = 1;
- PDU_WITHOUT_POLL = 0;
- BYTE_WITHOUT_POLL = 0。
- POLL_SN = highest SN;
- 啟動(dòng)或重啟計(jì)時(shí)器t-PollRetransmit。
當(dāng)發(fā)送側(cè)收到了接收側(cè)發(fā)來(lái)的SN=POLL_SN的RLC SDU的STATUS report之后,不論包含的是Ack還是Nack,t-PollRetransmit都會(huì)停止并重置。一旦t-PollRetransmit超時(shí),如果滿足上述發(fā)送Polling的條件時(shí),傳輸側(cè)會(huì)將highest SN對(duì)應(yīng)的RLC SDU以及所有沒(méi)有收到ACK的RLC SDU重傳。
3 狀態(tài)報(bào)告(Status reporting)
通過(guò)前面的描述,我們知道發(fā)送側(cè)可以通過(guò)Polling,來(lái)觸發(fā)接收側(cè)發(fā)送狀態(tài)報(bào)告,接收端發(fā)送STATUS PDU來(lái)報(bào)告RLC SDU或RLC SDU segment的接收情況:收到了? positive acknowledgement (ACK),或沒(méi)收到 ? negative acknowledgement (NAck)。
STATUS reporting的觸發(fā)包括:
1) Polling,也可以理解為被動(dòng)觸發(fā):
上面也提到了,Polling就是用于觸發(fā)STATUS reporting的。接收側(cè)如果收到Polling,且Polling的這個(gè)AMD PDU被discard了;或該AMD PDU的SN滿足SN < RX_Highest_Status 或 SN >= RX_Next + AM_Window_Size時(shí),則觸發(fā)STATUS report。否則暫時(shí)不觸發(fā),一直到SN滿足條件。
2) Reception failure,也可以理解為主動(dòng)觸發(fā):
當(dāng)接收端檢測(cè)到接收失敗,即當(dāng)t-Reassembly超時(shí)時(shí),也會(huì)觸發(fā)STATUS report。
STATUS reporting一旦觸發(fā),接收側(cè)還要考慮計(jì)時(shí)器t-StatusProhibit的狀態(tài),來(lái)決定什么時(shí)候發(fā)送STATUS PDU,即如果t-StatusProhibit沒(méi)在運(yùn)行,則在MAC層指示的最近一個(gè)transmission opportunity發(fā)送STATUS PDU (STATUS PDU的優(yōu)先級(jí)高于AMD PDU);如果t-StatusProhibit正在運(yùn)行,則需要等t-StatusProhibit到期后的最近一個(gè)transmission opportunity傳輸STATUS PDU。一旦發(fā)送了一個(gè)STATUS PDU,則啟動(dòng)t-StatusProhibit。這樣就避免了頻繁的上報(bào)。
在構(gòu)建一個(gè)STATUS PDU的時(shí)候,首先針對(duì)SN在范圍RX_Next <= SN < RX_Highest_Status內(nèi),且沒(méi)有完整接收的RLC SDU,按照SN升序,且滿足最終形成的STATUS PDU大小不超過(guò)限制的要求,構(gòu)建STATUS PDU。不完整接收或者說(shuō)接收失敗的情況,又細(xì)分為下面幾種。
而ACK_SN設(shè)置為下一個(gè)沒(méi)收到的RLC SDU的SN。
總結(jié)
以上是生活随笔為你收集整理的5G NR RLC:Data Transfer ARQ的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 5G NR RLC:RLC架构和RLC
- 下一篇: 5G NR RLC:PDU Parame