LTERLC学习报告.docx
《LTERLC学习报告.docx》由会员分享,可在线阅读,更多相关《LTERLC学习报告.docx(16页珍藏版)》请在冰豆网上搜索。
![LTERLC学习报告.docx](https://file1.bdocx.com/fileroot1/2023-7/6/6579e963-f7d1-4006-ad6b-ec3c5918c58b/6579e963-f7d1-4006-ad6b-ec3c5918c58b1.gif)
LTERLC学习报告
1.RLC架构
RLC实体从/向上层(RRCforCCCH,PDCPotherwise)接收/发送RLCSDUs,向/从底
层发送/接收与对等RLC实体间的RLCPDUs。
RLCPDU包括RLC数据PDU和控制PDU两类。
如果一个RLC实体从与上层间的一个独立的SAP中接收到RLCSDUs后,RLC将其
转化为RLC数据PDUs,然后通过一个独立的逻辑信道递交给底层。
如果一个RLC实体从底层某个独立的逻辑信道上接收到RLC数据PDUs,然后将其转
化为RLCSDUs,并通过与上层间某个独立的SAP递交给上层。
如果一个RLC实体向/从底层发送/接收到RLC控制PDUs,则通过的通道发送/接收RLC
数据PDU相同。
RLC实体可以以下列三种模式实现数据的传输:
TM(透明模式),UM(非确认模式)
或者AM(确认模式)。
根据这三类传输模式,RLC实体可以分为TMRLC实体,UMRLC实体或者AMRLC实体。
图1RLC子层模型
对于所有RLC实体(包括TM、UM、AMRLC实体):
1)支持字节对齐的可变尺寸的RLCSDUs
2)只有当底层(MAC)通知可以发送,RLC才会组成RLCPDUs递交给底层
1.1TMRLC实体
TMRLC实体用于发送/接收逻辑信道BCCH,DL/ULCCCH和PCCH上的RLCPDUs。
图2双TM实体模型
TM实体发送/接收TM模式的RLC数据PDU:
TMDPDU
TMRLC发送实体:
当一个发送TMRLC实体将RLCSDUs组成TMDPDUs时,不会分段也不会级联,且不会在TMDPDUs中包含任何的RLC头。
TMRLC接收实体:
当一个TMRLC接收实体收到TMDPDUs,将其(即RLCSDUs)递交给上层
1.2UMRLC实体
UMRLC实体用于发送/接收逻辑信道DL/ULDTCH上的RLCPDUs。
图3双UM实体模型
UM实体发送/接收UM模式的RLC数据PDU:
UMDPDU
UMRLC发送实体:
UMRLC实体将RLCSDUs形成UMDPDUs时,需要:
1)分段和/或级联RLCSDUs,这样UMDPDUs就可以和某个发送时机内底层指示的RLCPDU(s)大小相匹配了
2)需要在UMDPDU里包含相关的RLC头
UMRLC接收实体:
当UMRLC接收实体收到UMDPDUs后,将:
1)检查UMDPDUs是否重复接收,如果重复则丢弃
2)如果接收是乱序的,则需要重排序
3)在底层检测UMDPDUs是否丢失,避免额外的重排序时延
4)将重排序过的UMDPDUs重组为RLCSDUs(不包括已经检测到丢失的)
5)丢弃接收到的无法重组为一个RLCSDU(由于某些相关的UMDPDU丢失)的
6)UMDPDUs
RLC重建的时,UMRLC接收实体将:
7)将乱序接收到的UMDPDUs重组后递交给上层
8)丢弃剩余的无法重组为RLCSDUs的UMDPDUs
9)初始化相关的状态变量,停止相关的定时器
1.3AMRLC实体
AMRLC实体用于发送/接收逻辑信道DL/ULDCCHorDL/ULDTCH上的RLCPDUs。
图4一个AMRLC实体模型
AMRLC实体发送/接收RLC数据PDU:
AMDPDU;AMDPDU分段
AMRLC实体发送/接收RLC控制PDU:
STATUSPDU
发送侧:
当发送侧将RLCSDUs转换为AMDPDUs时,需要:
分段和/或级联RLCSDUs,这样AMDPDUs就可以和底层指示的RLCPDU(s)总大小相匹配
发送侧支持RLC数据PDUs的重传(ARQ):
1)如果重传的RLC数据PDU和某个发送时机内底层指示的总大小不匹配,则将RLC数据PDU重分段为AMDPDUsegments
2)重分段的格式不受限制
在发送AMDPDUs或者重AMDPDUsegments时都需要在RLC数据PDU里添加相关的RLC头
接收侧:
收到RLC数据PDUs后,将
1)检测接收到的RLC数据PDUs是否重复,如果重复则丢弃
2)如果接收到的数据包乱序,则重排序
3)底层检测是否有丢失的RLC数据PDUs,如果有则请求对等RLC实体进行重传
4)将乱序的RLC数据PDUs重组为RLCSDUs,并将其按序递交给上层
当RLC重建时,接收侧的AMRLC实体将:
1)将乱序的RLC数据PDUs重组为RLCSDUs,并将其按序递交给上层
2)丢弃剩余的无法重组为RLCSDUs的RLC数据PDUs
3)初始化相关的状态变量,停止相关定时器
2.RLC提供的服务
提供给上层(即RRC或者PDCP)的服务:
1)TM数据传输
2)UM数据传输
3)AM数据传输,包括指示上层发送成功
期望底层提供的服务:
1)数据传输
2)发送时机通知,以及在该发送时机内能够发送的RLCPDU(s)的总大小
3.RLC实体的功能
1)上层PDUs传输
2)AM数据传输时,通过ARQ进行错误检查
3)UM和AM数据传输时,进行级联、分段和重组
4)AM数据传输时,重组RLC数据PDUs
5)UM和AM数据传输时,对RLC数据PDUs进行重排序
6)UM和AM数据传输时,重复检查
7)UM和AM数据传输时,RLCSDU丢弃
8)RLC重建
9)协议错误检查和恢复
4.可以进行发送的数据
1)还没有包含在一个RLC数据PDU内的RLCSDUs或者分段
2)pending住待重传的AM模式RLCdataPDUs,orportions
如果需要发送一个STATUSPDU,且statusprohibittimer没有运行或者已经超时,则UE将在下个发送时机内估算STATUSPDU的大小,并认为是一个可以发送的数据。
5.数据传输流程
TM数据传输
发送操作
当发送一个新TMDPDU给底层时,RLCTM发送实体将不做任何修改把该RLCSDU发送给底层;
接收操作
从底层接收到一个新的TMDPDU时,TMRLC接收实体也将不做任何修改把该PDU递交给上层。
UM数据传输
UMRLC实体相关变量
发送实体
1)VT(US)
下次将要生成的UMDPDU的SN。
初始值为0,当UMRLC实体发送了一个SN=VT(US)的UMDPDU后该参数被更新
接收实体
1)VR(UR):
UM接收状态变量
被考虑重排序的UMDPDU中最早的一个SN,初始值为0
2)VR(UX):
UMt-Reordering状态变量
触发t-Reordering的UMDPDU之后的UMDPDU的SN
3)VR(UH):
UM最高已接收的状态变量
在所有已经接收的UMDPDUs中SN最高的UMDPDU之后的UMDPDU的SN,该值为重排序窗口的最高边界。
初始值为0
4)UM_Window_Size
定义了可以被接收的SNs
ThisconstantisusedbythereceivingUMRLCentitytodefineSNsofthoseUMDPDUsthatcanbereceivedwithoutcausinganadvancementofthereceivingwindow.UM_Window_Size=16whena5bitSNisconfiguredandUM_Window_Size=512whena10bitSNisconfigured.
发送操作
当发送一个新的UMDPDU给底层时,UMRLC发送实体把该UMDPDU的SN置为VT(US),然后把VT(US)加1
接收操作
UMRLC接收实体将根据状态变量VR(UH)维护一个重排序窗:
1)如果(VR(UH)–UM_Window_Size)<=SN则该SN将落入重排序窗
2)否则SN落入窗口外
当UMRLC接收实体从底层接收到一个UMDPDU后,
1)要么丢弃接收到的PDU,要么将它放在接收缓存里
2)如果该PDU放入接收缓存,则需要更新状态变量,重组并将RLCSDUs递交给上层,如果需要的话开启/停止t-Reordering
当t-Reordering超时后,则UMRLC接收实体将更新状态变量,重组并递交RLCSDUs给上层,需要的话开启t-Reordering
具体:
当UMRLC接收实体从底层接收到一个SN=x的UMDPDU,则
1)如果VR(UR)如果(VR(UH)–UM_Window_Size)<=x则丢弃接收到的UMDPDU
2)否则,把接收到的UMDPDU放在接收缓存里
如果一个SN=x的UMDPDU被放在了接收缓存里,则UMRLC接收实体将:
1.如果x落在重排序窗外:
1)更新VR(UH)为x+1
2)将SN落在重排序窗口外的UMDPDUs重组为RLCSDUs,去掉RLC头,并按照RLCSN升序把重组成的RLCSDUs递交给上层
3)如果VR(UR)落在重排序窗口外,则将VR(UR)设置为(VR(UH)–UM_Window_Size)
2.如果接收缓存中包含SN=VR(UR)的UMDPDU,则
1)将VR(UR)更新为SN>currentVR(UR)(还没有接收到的)第一个UMDPDU的SN
2)将SN3.如果t-Reordering正在运行,则
1)如果VR(UX)<=VR(UR)或
2)如果VR(UX)落到重排序窗口外,且VR(UX)不等于VR(UH),则停止并复位t-Reordering
4.如果t-Reordering没有运行,则
如果ifVR(UH)>VR(UR),开启startt-Reordering;将VR(UH)设置为VR(UX)
t-Reordering超时后的处理
1)更新VR(UR)为SN>=VR(UX)(还没有被接收)的第一个UMDPDU的SN
2)将SN3)如果VR(UH)>VR(UR):
开启t-Reordering
把VR(UH)设置为VR(UX)
AM数据传输
相关参数
发送侧
1)VT(A):
确认状态变量
下一个需要被正确确认的AMDPDU的SN,作为发送窗口的最低边界。
初始值为0,当收到一个SN=VT(A)的AMDPDU的正确确认后更新该参数
2)VT(MS):
最大发送状态参数
该参数值等于VT(A)+AM_Window_Size,为发送窗口的最高边界
3)VT(S):
发送状态参数
分配给下一个将要生成的AMDPDU的SN,初始值为0,只要发送了一个SN=VT(S)的AMDPDU后,该值便会更新
4)POLL_SN:
轮询发送状态变量
该变量值等于最近一次发送的P位置1的RLC数据PDU的SN,初始值为0
接收侧
1)VR(R):
接收状态变量
变量值为最后一个顺序接收到的AMDPDU的下一个PDU的SN,作为接收窗口的最低边界。
初始值为0,当收到SN=VR(R)的AMDPDU时,该值更新
2)VR(MR):
最大可接收状态变量
等于VR(R)+AM_Window_Size,接收窗外第一个PDU的SN,作为接收窗的最高边界
3)VR(X):
t-Reordering状态变量
等于触发t-Reordering的RLC数据PDU的下一个PDU的SN
4)VR(MS):
最大STATUS发送状态变量
当需要构造一个STATUSPDU的时候,该值等于可以被“ACK_SN”指示的SN的最大值
5)VR(H):
最高接收状态变量
已经接收到的RLC数据PDUs中的SN最高值,初始值为0
6)POLL_SN:
轮询发送状态参数
等于最近一次发送的P位指示为1的RLC数据PDU时的VT(S)-1,初始值为0
发送操作
AMRLC实体优先发送RLC控制PDUs,其次才是RLC数据PDUs;优先发送重传RLC数据PDUs,其次才是新的AMDPDUs。
AMRLC实体的发送侧根据状态变量VT(A)和VT(MS)维护一个发送窗口:
-如果VT(A)<=SN-否则,落在窗口外
发送侧不会把落在发送窗外的RLC数据PDU递交给底层
当把一个新的AMDPDU递交给底层后,发送侧将把VT(S)设置为该PDU的SN,然后把VT(S)加1
AMRLC发送侧可以获得对等AMRLC实体对某个RLC数据PDU的正确确认,即收到STATUSPDU
当收到对SN=VT(A)的AMDPDU的确认后,发送侧将:
-设置VT(A)为,满足VT(A)<=SN<=VT(S)中,且没有收到正确确认的PDU中最小的SN
-如果一个发送实体发送和某个发送RLCSDU相关的所有AMDPDUs都已经被正确确认了,则RLC需要指示给上层该RLCSDU发送成功
接收操作
接收侧将根据状态变量VR(R)和VR(MR)维护一个接收窗:
-当VR(R)<=SN-否则落到窗口外
当从底层收到一个RLC数据PDU后,AMRLC实体的接收侧将:
-丢弃该PDU或者把它放在接收缓存中
-如果放入接收缓存中,则
-更新状态变量,重组并递交RLCSDUs给上层,需要的话开启/停止t-Reordering
t-Reordering超时后,AMRLC实体的接收侧将更新状态变量,需要的话开启t-Reordering
收到底层SN=x,且包含字节分段y到z的数据后
如果x在接收窗外,或者SN=x的AMDPDU的字节分段y到z已经接收过,
则丢弃接收到的RLC数据PDU
否则,将接收到的PDU放入接收缓存;如果某些字节分段之前接收过,则丢弃重复的字节
分段
当SN=x的RLC数据PDU被放入了接收缓存,则AMRLC实体的接收侧将:
-如果SN=VR(MS)的AMDPDU的所有字节分段都已经被接收到了,则
将VR(MS)更新为SN>currentVR(MS)(没有接收完所有分段)的AMDPDU中的第一个PDU的SN
-如果x=VR(R)
-如果SN=VR(R)的所有分段都已经接收到则
-更新VR(R)为没有接收到所有分段(SN>currentVR(R))的第一个AMDPDU的SN
-将VR(MR)更新为VR(R)+AM_Window_Size
-重组落在接收窗外的AMDPDU的任意分段以及SN=VR(R)的按序分段,取掉RLC头,按序将重组后的且之前没有递交过的RLCSDUs递交给上层
-如果x>=VR(H)
更新VR(H)为x+1
-如果t-Reordering正在运行
如果VR(X)=VR(R)或者VR(X)落在接收窗外,则停止并复位t-Reordering
-如果t-Reordering不在运行(包括因上述原因而被停止)
如果VR(H)>VR(R)
开启t-Reordering
设置VR(X)为VR(H)
当t-Reordering超时后,AMRLC实体的接收侧将
-将VR(MS)更新为SN>currentVR(MS)(没有接收完所有分段)的AMDPDU中的第一个PDU的SN
-如果VR(H)>VR(MS)
-停止t-Reordering
-设置VR(X)为VR(H)
6.ARQ过程
该过程仅用于AM模式
重传
AMRLC实体的发送侧可能收到对等AMRLC实体发送的非确认包(STATUSPDU),错误确认一个AMDPDU或者一个AMDPDU的一部分
当收到一个非确认包后,如果相关PDU的SN在VT(A)<=SN-如果某个AMDPDU第一次被认为需要重传,则将该PDU相关的RETX_COUNT设置为0
-否则,如果没有正在pending的重传,则增加RETX_COUNT
-如果RETX_COUNT=maxRetxThreshold,则指示上层已经达到最大重传次数
当需要重传一个AMDPDU时,如果该AMDPDU可以在底层指示的总的大小条件下发送,则将该PDU的P位置1,并递交给底层;如果超过了底层指示的大小,则需要分段,形成一个新的AMDPDU分段,并将新分段递交给底层
如果需要重传AMDPDU的一个部分,则如果需要的话分段该部分,并将新分段递交给底层
如果形成了一个新分段,则需要将原始AMDPDU的数据域映射到新分段的数据域;设置新分段的头;设置P位
轮询
AMRLC实体可以轮询它的对等实体,以触发对等实体发送状态报告
6.2.1发送AMDPDU或者AMDPDU分段
当重组了一个新的AMDPDU后,AMRLC实体的发送侧将:
-将PDU_WITHOUT_POLL加1
-当有映射到RLC数据PDU数据域的字节时,将BYTE_WITHOUT_POLL增加相应的byte数
-如果PDU_WITHOUT_POLL>=pollPDU或者BYTE_WITHOUT_POLL>=pollByte
则在RLC数据PDU里包含一个poll
当重组了一个新的AMDPDU或者AMDPDU分段,则发送侧将:
-如果在发送了RLC数据PDU后,发送缓存和重传缓存就变空了(不包含已经发送出去正在等待确认的数据包),或者
-如果发送了RLC数据PDU后没有新的RLC数据PDU可以被发送(例如窗停止)
则在RLC数据PDU里包含一个poll
当在一个RLC数据PDU里包含一个poll时,发送侧将:
-将RLC数据PDU的P域置为1
-将PDU_WITHOUT_POLL设置为0
-将BYTE_WITHOUT_POLL设置为0
当把一个带P位的数据包递交给底层后,如果需要的话增加VT(S),发送侧将:
-设置POLL_SN为VT(S)–1
-如果t-PollRetransmit没有运行,则开启t-PollRetransmit
-否则,重新开启t-PollRetransmit
6.2.2收到状态报告
当RLCAM实体收到发送侧的一个状态报告后,如果状态报告中包含对SN等于POLL_SN的PDU的正确或者错误确认,则如果t-PollRetransmit正在运行,则停止t-PollRetransmit.
6.2.3t-PollRetransmit超时
t-PollRetransmit超时后,发送侧:
-如果在发送了RLC数据PDU后,发送缓存和重传缓存就变空了(不包含已经发送出去正在等待确认的数据包),或者
-如果发送了RLC数据PDU后没有新的RLC数据PDU可以被发送(例如窗停止)
则将SN=VT(S)–1的AMDPDU认为是重传
或者认为被重传的PDU没有被正确确认
-在这个PDU中包含一个poll,之后的处理同6.2.1
状态报告
为了对RLCPDUs或者其中的一部分进行正确或者错误确认,AMRLC实体将给它的对等AMRLC实体发送STATUSPDUs。
RRC配置是否使用状态禁止功能,触发状态报告:
-当从底层收到一个SN=x,且P位设置为1的数据PDU后,接收侧将:
-如果满足丢弃条件,则丢弃该数据PDU
-如果x=VR(MR)
则触发状态报告
-否则,延迟触发时间,直到x=VR(MR).
状态包在HARQ重排序后发送
当发现一个RLC数据PDU接收失败后,t-Reordering超时时,接收侧将触发状态报告
T_reordering超时后会触发VR(MS)更新、发送一个状态报告,当状态报告的发送要在VR(MS)更新之后
如果触发了状态报告,接收侧将:
-如果t-StatusProhibit没有在运行,在第一个收到底层指示发送时机时,构造一个STATUSPDU,并递交给底层
-否则,t-StatusProhibit超时后,当底层第一次指示发送时机时,构造一个STATUSPDU(即使在t-StatusProhibit运行期间已经触发过多次),并递交给底层
当一个STATUSPDU已经递交给底层后,接收侧将开启t-StatusProhibit
当构造了一个STATUSPDU时:
-对于VR(R)<=SN对于没有接收到任意字节分段的AMDPDU,在STATUSPDU中包含一个设置为该PDUSN的NACK_SN
对于由连续字节分段组成,但是还没有接收到的PDU,在STATUSPDU中包含NACK_SN、SOstart、SOend
-将ACK_SN设置为下一个还没有收到的、且没有在状态包中被指示丢失的RLC数据PDU
7.SDU丢弃过程
当上层(PDCP)指示丢弃一个特殊的RLCSDU时,AMRLC发送实体或者UMRLC发送实体将丢弃指示的RLCSDU(如果该SDU中没有映射到已经接收到的PDU中的分段)
8.重建过程
RLC重建由RRC请求,该功能可以应用到AM、UM以及TMRLC实体
当RRC指示RLC实体需要进行重建时,RLC实体将:
如果是一个TMRLC发送实体,则丢弃所有的RLCSDUs
如果是一个UMRLC接收实体,则如果可以的话,将SN如果是发送UMRLC实体,则丢弃所有RLCSDUs
如果是AM实体:
-在接收侧将SN已经重组的且之前还没有递交的RLCSDUs,按照RLCSN的升序递交给上层
-接收侧丢弃剩余的AMDPDUs和字节分段
-发送侧丢弃所有的RLCSDUs和AMDPDUs
-丢弃所有的RLC控制PDUs
停止并复位所有定时器,将所有状态变量复位为初始值