3GPP 36322 LTE协议RLC解读.docx
《3GPP 36322 LTE协议RLC解读.docx》由会员分享,可在线阅读,更多相关《3GPP 36322 LTE协议RLC解读.docx(24页珍藏版)》请在冰豆网上搜索。
3GPP36322LTE协议RLC解读
3GPP36322LTERLC协议解读
注:
1.0.1,0.2等章节是自己根据的理解新增的章节
2.本文中的章节与36322协议中的章节并非依次对应。
例如介绍某个实体的时候,把其传输实体及传输过程放在了一起,如
3.文中1>:
表示一级,多次出现的为同级,“2>”表示“1>”对应的下一个子级,“3>”表示“2>”对应的下一个子级,依次类推
4.2RLC结构
在这个小节里描述的只是一个模型,而并没有指定或者限制具体的实现。
通常由RRC来控制RLC的配置。
RLC子层的职能由RLC实体来实施。
如果在eNB配置了一个RLC实体,那么就会有
一个对等的RLC实体配置在UE侧,反之亦然。
一个RLC实体接收/传送的RLCSDUs从/到上层(即对于CCCH则为RRC,否则为PDCP)和通过下层(即MAC和物理层)发送/接收RLCPDU到/从它的对等的RLC实体。
一个RLCPDU可以是一个RLC数据PDU(见36.3226.1.1节)或RLC控制PDU(见36.3226.2.1)。
如果一个RLC实体接收来自上层的RLCSDUs,它是通过RLC和上层之间的唯一的SAP来接收。
当使用接收到的RLCSDU生成相应的RLCPDU,RLC实体就把这些RLCPDU通过一个唯一逻辑信道发送到下一层。
而RLC实体通过一个单一的逻辑信道接收来自下层的RLCPDU,当从收到的RLCPDU生产了的RLC数据SDUs后,则通过高层与RLC之间的单一SAP递交到上层。
一个RLC实体传送/接收到/从下层的RLC控制PDU所使用的逻辑信道与RLCPDU的数据的传输信道相同。
一个RLC实体可以被配置为下面三个模式之一来执行数据传输:
透明模式(TM),非确认模式(UM)或确认模式(AM)。
因此,一个RLC实体归类为TM、UM或AM依赖与
RLC配置的数据传输的模式。
一个TMRLC实体配置既可以是一个传输TMRLC实体,或者是一个接收TMRLC实体。
传输TMRLC实体接收来自上层的RLCSDUs并把相应的RLCPDU通过底层发送到对等接收端。
而接收TMRLC实体提交RLCSDUs到上层,并通过下层从对等发送端接收RLCPDU。
UMRLC实体可以配置为一个发送UMRLC实体或接收UMRLC实体。
发送UMRLC实体接收由上层来的RLCSDU,并通过下层发送RLCPDU到对等端的接收UMRLC实体。
接收UMRLC实体通过下层接收对等端的RLCPDU。
一个AMRLC实体由一个发射端和接收端组成。
一个AMRLC实体发送端收到来自上层
的RLCSDUs和并通过下层发送RLCPDU到其对等的AMRLC实体。
一个AMRLC实体接向上层提交RLCSDUs,并通过下层接收其对等端AMRLC实体的RLCPDU。
图2-1RLC子层模型
分段与串接
Segmentation就是分段,LTE中它只在UM/AM的发送端执行。
当由MAC层指示的RLC
PDU大小小于RLCSDU时,RLC实体就会对RLCSDU执行分段操作,让生成的RLCPDU能
适配进去。
Concatenation就是串接,LTE中它只在UM/AM的发送端执行。
当由MAC层指示的总的RLCPDU大小大于RLCSDU时,RLC层就会根据此情况对RLCSDU执行串接操作,让一个RLCSDU和其他RLCSDU或者其他RLCSDU的分段串联起来,让生成的RLCPDU能适配进去。
图2.1-1RLCSDU分段与串接示意图
2.2重分段
Re-segmentation就是重分段,LTE中它只在AM实体的发送端执行。
RLCAM实体支持
ARQ重传,当重传的RLCPDU无法适配到由MAC层指示的总的RLCPDU大小时,RLC层就
会根据此情况对重传的RLCPDU执行分段操作,让生成的RLCPDU分段能适配进去
可以配置用于从下面的逻辑信道提交或接收RLCPDU:
1>BCCH,DL/ULCCCH以及PCCH.
TM发送实体
1>不对RLCSDU进行串接,分段
1>没有RLC头
1>对RLCSDU不做任何改动,发送到下层协议实体(MAC层)
TM接收实体
不做任何修改地提交RLCSDU到上层协议实体(PDCP层),向上层递交TMDPDUs(也
就是RLCSDU)
图透明传输模式的两个对等实体模型
5.1.1TM数据传输
传输操作
当提交一个TMDPDU到低层,TMRLC传输实体应:
1>对RLCSDU不作任何修改提交到低层。
接收操作
当收到一个新的TMDPDU,TMRLC接收实体应:
1>提供上层没有任何修改的TMDPDU。
UM实体
UM实体配置用于从以下逻辑信道传送/接收RLCPDU:
1>DL/ULDTCH,MCCHorMTCH
UM传输实体
1>在获得特定的发送机会时,需要根据MAC层的指示期待的RLCPDU大小进行分段
或者串接RLCSDU;
1>添加相应的RLC头。
UM接收实体
当收到UMDPDUs,UMRLC接收实体应:
1>检测收到的UMDPDU是否是重复的UMDPDU,如果是,则丢弃它,
1>重新排列失序的UMDPDU
1>检测在低层(MAC层)丢失的UMDPDU,从而避免过长的重排序时延w:
如何检测
1>将已经排序的UMDPDU重组成RLCSDU,并递交给上层w:
重组规则?
1>如果发现属于某一特定RLCSDU的UMDPDU丢失,则把其它同样属于这个RLCSDU
的PDU丢弃:
注:
属于某一特定RLCSDU的UMDPDU丢失,如何确定属于?
在RLC重建的时候,接收UMRLC实体,需要:
1>尝试重组失序的包,并提交给上层
1>丢弃那些无法组成RLCSDU的UMPDUw:
无法组成的原因
1>初始化相关状态变量并停掉相关timer
图非确认模式的两个对等实体模型
UM实体会按顺序把RLCSDU递交到上层协议实体,这个顺序号由上层分配,
1>这种模式的RLC实体不支持重传,但是能够检查到相应的PDU丢失
1>这种服务非常适合于VOIP这样的业务,因为这种业务相对于无错传输来说更强调
实时性
SDU丢弃
当发送UMRLC实体从高层接收到对于特定的RLCSDU的丢弃指示时,则对那些被指示丢弃,并且没有任何分段被映射为RLCUMDPDU的RLCSDU进行直接删除。
RLC重建过程。
当收到RRC层要求RLC实体重建的指示后,对于UMRLC发送实体,删除所有存储的RLCSDU,停止并复位所有的计时器,复位所有的状态变量为初始值。
当收到RRC层要求RLC实体重建的指示后,对于UMRLC接收实体,将所有接收缓存中的UMDPDU,去掉RLC头,进行RLCSDU重组,将所有没有递交过的RLCSDU按照序列号升序的顺序发往高层;删除所有保留的UMDPDU;停止并复位所有的计时器并且复位所有的状态变量至初始值。
UM发送过程
发送过程:
1>每发送一个UMDPDU到下一层协议实体,则设置发送状态变量VT(US)=SN(这
个PDU的SN);之后VT(US)++
UM接收过程
General
UMRLC接收实体需要根据状态变量VR(UH)来维护重排序窗口,如下所述:
1>当接收到的PDUSN处于VR(UH)–UM_window_size<=SN落入排序窗口内,
1>否则,则落在重排序窗口之外
当UMRLC接收实体收到对端的一个UMDPDU时,则:
1>可能丢弃或者放入接收缓存里【参见36.322,
1>如果收到的UMDPDU被放入接收缓存,那么,
2>需要更新状态变量,重组并且提交RLCSDU到上层协议实体(PDCP),并且根
据需要重启或者停止t_reordering计时器(seesubclause;
当t_reordering超时时,UMRLC接收实体应:
1>更新状态变量,重组并且提交RLCSDU到上层协议实体(PDCP),并且根据需要重
启t_reordering计时器(seesubclause
并不是所有的UMDPDU放入缓存都会重组为SDU,这需要根据当前重组窗口已经接收到
的同属于一个RLCSDU的PDU情况等
当t_reordering超时:
-接收实体须更新状态变量,重组RLCSDU并提交到上层协议实体(PDCP),并根据
需要重启T_ordering计时器
-同样,是否能够重组RLCSDU也要根据情况来定,如果同属于某一个RLCSDU
的PDU有缺失,那么可能导致该SDU被丢弃
当从低层收到UMDPDU时
当从底层接收到UMDPDU(SN=x),则UMRLC接收实体:
1>如果VR(UR)1>(VR(UH)–UM_Window_Size)<=x2>丢弃这个包
1>否则【亦即是除上面两种情况之外】
2>把这个包放入接收缓冲。
当UMDPDU放入接收缓存
根据具体情况是重新调整排序窗口,还是可以直接和其他的PDU组成一个RLCSDU
并递交到上层实体
如果UMDPDU(SN=x)被放入了接收缓存,则接收UMRLC实体应:
1>如果x没有落入重排序窗口内,则:
2>更新状态变量:
VR(UH)=x+1,
2>重组任何没有落入重排序窗口的PDU,这个过程包括去除RLC包头,并按照
升序方式把组包好的RLCSDU递交到上层实体,
2>如果VR(UR)没有落入排序窗口,那么:
3>更新VR(UR)=VR(UH)-UM_window_size
1>如果接收缓存里有一个PDU,它的SN=VR(UR),那么:
2>更新VR(UR)为第一个没有接收到且其SN>当前的VR(UR)的PDU,
2>然后重组所有的PDU(它的SN<更新后的VR(UR)),这个过程包括去除RLC
包头,并按照升序方式把组包好的RLCSDU递交到上层实体。
1>如果t_reordering正在运行:
2>如果VR(UX)<=VR(UR),或则,
2>如果VR(UX)没有落入排序窗口,并且VR(UX)不等于VR(UH),则
3>停止并重启t_reordering计时器
3>设置状态变量VR(UX)=NULL
1>如果t_reordering没有运行:
2>如果VR(UH)>VR(UR):
3>启动该计时器
3>设置VR(UX)=VR(UH)
当t_Reordering计时器超时
当t_Reordering计时器超时,则UMRLC接收实体:
1>更新VR(UR)为第一个没有收到的UMDPDU,它的SN>VR(UX)
1>重组所有SN<更新后的VR(UR)的UMDPDU
1>如果VR(UH)>VR(UR):
2>启动该计时器
2>设置VR(UX)=VR(UH)
1否则
2>设置VR(UX)=NULL
7.1UM接收端状态变量
每个接收UMRLC实体维护下列状态变量:
VR(UR):
UMreceivestatevariable
这个状态变量记录着等待重排序的最早UMDPDU的序列号。
在重排序窗口之内,序列号低于该变量的UMDPDU其接收状态认为已经确定,放弃对此范围内的接收空隙处PDU(认为是丢失的PDU)的等待,将其余正确接收到的PDU重组形成SDU,顺序递交到高层,后续即使正确接收到此范围内序列空隙处的PDU也采取删除数据包的操作。
该状态变量的初始值为0;
VR(UX):
UMt-Reorderingstatevariable
这个状态变量记录着触发重排序计时器的UMDPDU紧接着的下一个序列号SN。
当
重排序计时器启动时,该变量与VR(UR)分别记录当前重排序计时器对应的序列号范围内的上边界和下边界。
当该范围内全部接收序列空隙处的PDU都正确接收后,终止当前重排序计时器。
当重排序计时器不存在时,则该变量变得无意义。
VR(UH):
UMhighestreceivedstatevariable
这个状态变量记录接收到的PDU中最高序列号紧接着的下一个序列号,作为重排序窗口的上边界。
该状态变量的初始值为0。
0.0UM接收实体分析
UMRLC接收实体根据UMDPDU的序列号来对窗口进行维护、更新、重复接收检测
和重排序等功能。
UMDPDU的序列号长度可以为5比特或者10比特,具体取值由高层配
置。
UMRLC接收实体的重排序窗口大小是与序列号长度相关。
当配置为5比特序列号长
度时,重排序窗口大小为16;当配置为10比特的序列号长度时,重排序窗口大小为512,
即重排序窗口总是序列号长度的一半。
在进行序列号比较与判断等操作时,需考虑序列号翻
转的问题。
以10比特序列号长度为例,序列号取值范围为[0,1023],在对序列号进行加减以及比较判断时需要进行模1024操作。
图UMRLC实体接收排序示意图
接收UMRLC实体维护一个重排序窗口,如图所示,其中重排序窗口的上边界为当前收到的所有UMDPDU中序列号中最高的序列号加一获得:
用VR(UH)表示;重排序窗口的下边界是由上边界减去重排序窗口大小而得到的一个数值。
如果新接收到的UMDPDU其序列号位于重排序窗口之外,则接收UMRLC实体认为其为新数据,相应更新重排序窗口的上边界,并将该数据放入接收缓存,等待进一步处理。
如果接收到的UMDPDU其序列号位于重排序窗口之内,则需要进一步判断该序列号的PDU是否属于重复接收或则已经超过了重排序等待时间,如果是这两类PDU,则UMRLC接收实体直接采取删除这个PDU;否则,这个UMDPDU是一个正常接收到的PDU,则放入接收缓存,等待进一步处理。
UMRLC接收实体基于重排序计时器进行重排序操作,重排序计时器的具体取值由高层配置。
UMRLC接收实体对未接收到的PDU对应的序列号启动重排序计时器,在重排序计时器超时后,如果该PDU仍然没有收到,则放弃对该PDU的等待并相应的更新重排序等待的下边界;在重排序计时器超时前,收到了该PDU,则按照正常接收处理,将PDU放入接收缓存。
UMRLC接收实体并不对每一个还没有接收到的PDU对应序列号都启动一个重排序计时器,而是整个接收UMRLC实体最多维护一个重排序计时器,以相应的变量记录每一次启动重排序计时器对应的序列号上边界和下边界,对该范围内的所有序列号空缺统一处理,当该范围内所有序列号空缺中的PDU都正确接收,则停止该重排序计时器;当该重排序计时器超时后,如果仍然有新的接收序列号空隙,则对后续所有新的空隙重启重排序计时器,并记录相应的重排序等待的序列号上边界和下边界。
对于UMRLC接收实体中放置于接收缓存中的PDU,一旦该PDU序列号超出了重排序窗口或者超出了目前重排序等待的下边界,则将该UMDPDU去掉RLC头部,重组成为RLCSDU并按照序列号的升序顺序递交到高层。
AM实体
AM实体配置用于从以下逻辑信道传送/接收RLCPDU:
1>DL/ULDCCH或DL/ULDTCH
AM实体用于发送/接收如下RLC数据PDU:
1>AMDPDU
1>AMDPDU分段
AM实体用于发送/接收RLC控制PDU:
1>状态报告PDU
图2.5-1确认模式的RLC实体模型
AMRLC实体发送端
当一个AMRLC实体发送端用RLCSDU生成AMDPDU,它应:
1>对RLCSDUs进行分段和/或串接,使得生成的AMDPDU符合低层在特定的传输机会
上指示的大小。
AMRLC实体发送端支持RLC数据PDU重传(ARQ):
1>如果RLC数据重传的PDU不适合由低层指示的在特定的传输机会中的PDU大小,则
AMRLC实体发送端需要重新分段RLC数据PDU为AMDPDU;
1>重新分割数量没有上限。
当一个AMRLC实体用从高层收到的RLCSDUs或者用于重传的RLC数据PDU生成AMDPDU,它应:
1>在RLCPDU中包含相应的RLC头。
AMRLC实体接收端
当一个AMRLC实体接收端收到的RLCPDU的数据,它应:
1>检测RLC数据PDU是否重复收到,并丢弃重复的RLC数据PDU;
1>如果这些收到的PDU失序,则对它们进行重新排序;
1>在低层检测RLC数据PDU丢失的情况,并要求AMRLC实体对端重传;
1>重组经过重新排序的RLCPDU为RLC数据SDUs,并按序提供的RLCSDUs给上层。
在RLC重建立时,AMRLC实体接收端应:
1>如果可能,重组失序接收的RLCPDU为RLC数据SDUs,并按序提供RLCSDUs给上层。
1>丢弃任何剩余的不能重新组装成的RLCSDUs的PDU;
1>初始化相关的状态变量和计时器。
发送端状态变量
AMRLC发送实体维护下列状态变量:
VT(A),VT(MS),VT(S),详见后面
5.1.3AM数据传输
发送端需要对用户数据以及控制数据进行优先级处理:
1),RLC控制PDU优先级应该高于数据PDU,
2),重传的RLC数据PDU优先级要高于新的AMDPDU。
发送实体需要根据状态变量VT(A)和VT(MS)来维护一个发送窗口:
1>如果待发送PDU的SN满足(VT(A)1>否则在此窗口之外,
发送端不会传送一个SN不在此窗口的PDU到下层。
当成功发送一个PDU到低层,则AMRLC实体发送端应:
1>设置VT(S)=SN,再对VT(S)加一
AMRLC实体发送端可以通过如下方式收到一个RLC数据PDU的肯定确认(它的对等
端AMRLC实体确认成功接收):
1>AMRLC实体发送端可以通过statusreport消息来获得对端的肯定确认。
当收到一个SN=VT(A)的AMDPDU的肯定确认,则AMRLC实体发送端应:
1>设置VT(A)为所有窗口内还没有收到正确接收确认的PDU中具有最小的SN的SN。
1>如果同属于同一个RLCSDU的PDU都收到了的肯定确认,那么
2>通知上一层协议实体:
这个RLCSDU已经成功发送
注:
VT:
Variabletransmit;VR:
variablereceive
0.1传输过程解析
VT(A):
Acknowledgementstatevariable
这个状态变量记录已经收到肯定确认的连续PDU中最高序列号紧接着下一个序列号,作为发送窗口的下边界。
该变量初始值为0。
只有当AMRLC实体发送端收到序列号等于当前VT(A)变量值的PDU的肯定确认时,该变量才会更新。
序列号小于该变量的PDU全部经过接收端肯定确认,表明已经全部正确接收。
VT(MS):
Maximumsendstatevariable
这个状态变量等于VT(A)+AM_window_size,作为发送窗口的上边界。
任何序列号超出该变量的PDU都不允许发送。
当窗口溢出时,AMRLC实体发送端不能发送任何新产生的PDU。
VT(S):
Sendstatevariable
这个状态变量记录下一个新产生的AMDPDU的序列号,初始值为0。
在当前VT(S)值被赋予一个新产生的AMDPDU后,该变量做加一操作。
AMRLC实体发送端优先发送重传的RLCPDU,AMRLC实体发送端维护状态变量VT(S),含义为分配给下一个新生成的RLCPDU的序列号数值。
该变量初始值为零,当生成一个新的AMDPDU时,将该变量作为该PDU的序列号,然后将该变量的数值加一。
AMRLC实体发送端维护一个发送窗口,如图0.1-1所示,发送窗口的下边界定义
为收到接收端肯定确认且连续的最高PDU紧接着的下一个序列号的数值。
发送窗口的上边
界为下边界的数值加上窗口的大小。
窗口大小为常数值512,即为AM序列号空间长度1024的一半。
AMRLC实体发送端不会发送任何序列号位于发送窗口之外的AMDPDU到底层。
图0.1-1AM模式发送窗口示意图
AMRLC实体发送端根据对端发来的状态PDU中包含的肯定确认来更新发送窗口变量,发送窗口的下边界总是更新为当前发送窗口内的最小需要收到肯定确认的PDU的序列号。
当收到与RLCSDU相关的AMDPDU肯定确认时,AMRLC实体发送端向高层发送该RLCSDU的传输成功指示。
AMRLC实体接收端根据状态变量VR(R)和VR(MR)来维护接收窗口,如下:
1>如果VR(R)<=SNmaxreceive?
1>否则落在接收窗口之外。
当从低层收到RLC数据PDU,AMRLC实体接收端应:
1>要么丢弃收到的RLC数据PDU或放入接收缓存(见36.322);
1>如果收到的RLCPDU的被放入了接收缓存:
2>更新状态变量,重组并递交RLCSDUs到上一层,然后根据需要开始/停止
t_reordering(见36.322节)。
当t_reordering超时后,AMRLC实体接收端:
1>更新状态变量,并根据需要开始t_reordering(见36.322节)。
当从低层收到RLC数据PDU
当从低层收到一个RLC数据PDU时,它包含SN=x的AMDPDU分段字节y到z,则
AMRLC实体接收端应:
1>如果x落在接收窗外,或;
1>如果SN=x的AMDPDU的分段字节y到z,在之前已收到;
2>丢弃收到的RLC数据PDU;
1>否则:
2>将接收到的RLC数据PDU放入接收缓存中;
2>如果在AMDPDU的一些字节段中的RLCPDU的数据之前已收到:
3>丢弃重复的字节段。
当RLC数据PDU放入接收缓存
当SN=x的RLC数据PDU已放入接收缓存,AMRLC实体接收端应:
0>如果x>=VR(H)
1>更新VR(H)为x+1;
0>如果SN=VR(MS)的AMDPDU的所有的分段字节都已经收到:
1>则更新VR(MS)为第一个AMDPDU,它的SN>当前VR(MS),并且它的分段字节没有全部收到;
0>如果x=VR(R):
1>如果SN=VR(R)的AMDPDU的所有的分段字节都已经收到:
2>更新VR(R)为第一个AMDPDU,它的SN>当前VR(R),并且其所有的分段字
节没有全部收到;
2>更新VR(MR)为VR(R)