3GPP 36322 LTE 协议RLC解读

3GPP 36322 LTE RLC协议解读

注:

1.0.1,0.2等章节是自己根据的理解新增的章节

2.本文中的章节与36322协议中的章节并非依次对应。例如介绍某个实体的时候,把其

传输实体及传输过程放在了一起,如4.2.1.1与5.1.1(4.2.1.1、5.1.1是英文协议中对应的章节)

3.文中1>:表示一级,多次出现的为同级,“2>”表示“1>”对应的下一个子级,“3>”表

示“2>”对应的下一个子级,依次类推

4.2 RLC 结构

4.2.1.RLC实体

在这个小节里描述的只是一个模型,而并没有指定或者限制具体的实现。

通常由RRC来控制RLC的配置。

RLC子层的职能由RLC实体来实施。如果在eNB配置了一个RLC实体,那么就会有

一个对等的RLC实体配置在UE侧,反之亦然。

一个RLC实体接收/ 传送的RLC SDUs 从/ 到上层(即对于CCCH 则为RRC,否则为PDCP)和通过下层(即MAC和物理层)发送/ 接收RLC PDU到/ 从它的对等的RLC 实体。一个RLC PDU可以是一个RLC数据PDU (见36.322 6.1.1 节)或RLC控制PDU (见36.322 6.2.1 )。如果一个RLC 实体接收来自上层的RLC SDUs,它是通过RLC和上层之间的唯一的SAP来接收。当使用接收到的RLC SDU生成相应的RLC PDU,RLC 实体就把这些RLC PDU通过一个唯一逻辑信道发送到下一层。而RLC 实体通过一个单一的逻辑信道接收来自下层的RLC PDU,当从收到的RLC PDU生产了的RLC数据SDUs后,则通过高层与RLC之间的单一SAP递交到上层。一个RLC实体传送/接收到/从下层的RLC控制PDU所使用的逻辑信道与RLC PDU的数据的传输信道相同。

一个RLC 实体可以被配置为下面三个模式之一来执行数据传输:透明模式(TM),非确认模式(UM)或确认模式(AM)。因此,一个RLC 实体归类为TM、UM 或AM 依赖与RLC 配置的数据传输的模式。

一个TM RLC实体配置既可以是一个传输TM RLC实体,或者是一个接收TM RLC实体。传输TM RLC实体接收来自上层的RLC SDUs并把相应的RLC PDU通过底层发送到对等接收端。而接收TM RLC实体提交RLC SDUs到上层,并通过下层从对等发送端接收RLC PDU 。

UM RLC实体可以配置为一个发送UM RLC实体或接收UM RLC实体。发送UM RLC实体接收由上层来的RLC SDU,并通过下层发送RLC PDU到对等端的接收UM RLC 实体。

接收UM RLC 实体通过下层接收对等端的RLC PDU。

一个AM RLC 实体由一个发射端和接收端组成。一个AM RLC实体发送端收到来自上层的RLC SDUs和并通过下层发送RLC PDU到其对等的AM RLC实体。一个AM RLC实体接向上层提交RLC SDUs,并通过下层接收其对等端AM RLC实体的RLC PDU。

图2-1 RLC 子层模型

分段与串接

Segmentation就是分段,LTE中它只在UM/AM的发送端执行。当由MAC层指示的RLC PDU大小小于RLC SDU时,RLC实体就会对RLC SDU执行分段操作,让生成的RLC PDU能

适配进去。

Concatenation就是串接,LTE中它只在UM/AM的发送端执行。当由MAC层指示的总的RLC PDU大小大于RLC SDU时,RLC 层就会根据此情况对RLC SDU执行串接操作,让一个RLC

SDU和其他RLC SDU或者其他RLC SDU的分段串联起来,让生成的RLC PDU能适配进去。

图2.1-1 RLC SDU 分段与串接示意图

2.2 重分段

Re-segmentation就是重分段,LTE 中它只在AM实体的发送端执行。RLC AM 实体支持

ARQ重传,当重传的RLC PDU无法适配到由MAC层指示的总的RLC PDU大小时,RLC层就

会根据此情况对重传的RLC PDU执行分段操作,让生成的RLC PDU分段能适配进去

4.2.1.1.TM实体

可以配置用于从下面的逻辑信道提交或接收RLC PDU:

1>BCCH, DL/UL CCCH以及PCCH.

4.2.1.1.2 TM 发送实体

1>不对RLC SDU进行串接,分段

1>没有RLC头

1>对RLC SDU不做任何改动,发送到下层协议实体(MAC层)

4.2.1.1.3 TM 接收实体

不做任何修改地提交RLC SDU到上层协议实体(PDCP层),向上层递交TMD PDUs (也就是RLC SDU)

图2.3.4-1 透明传输模式的两个对等实体模型

5.1.1 TM 数据传输

5.1.1.1 传输操作

当提交一个TMD PDU到低层,TM RLC传输实体应:

1>对RLC SDU不作任何修改提交到低层。

5.1.1.2 接收操作

当收到一个新的TMD PDU,TM RLC接收实体应:

1>提供上层没有任何修改的TMD PDU。

4.2.1.2 UM实体

UM 实体配置用于从以下逻辑信道传送/接收RLC PDU:

1> DL/UL DTCH, MCCH or MTCH

4.2.1.2.2 UM传输实体

1>在获得特定的发送机会时,需要根据MAC层的指示期待的RLC PDU大小进行分段

或者串接RLC SDU;

1>添加相应的RLC头。

4.2.1.2.3 UM接收实体

当收到UMD PDUs,UM RLC接收实体应:

1>检测收到的UMD PDU是否是重复的UMD PDU,如果是,则丢弃它,

1>重新排列失序的UMD PDU

1>检测在低层(MAC层)丢失的UMD PDU,从而避免过长的重排序时延w:如何检测

1>将已经排序的UMD PDU重组成RLC SDU,并递交给上层w:重组规则?

1>如果发现属于某一特定RLC SDU的UMD PDU丢失,则把其它同样属于这个RLC SDU

的PDU丢弃:

注:属于某一特定RLC SDU的UMD PDU丢失,如何确定属于?

在RLC重建的时候,接收UM RLC实体,需要:

1>尝试重组失序的包,并提交给上层

1>丢弃那些无法组成RLC SDU的UM PDU w:无法组成的原因

1>初始化相关状态变量并停掉相关timer

5.1.2UM数据传输

图2.4.4-1 非确认模式的两个对等实体模型

UM 实体会按顺序把RLC SDU递交到上层协议实体,这个顺序号由上层分配,

1>这种模式的RLC实体不支持重传,但是能够检查到相应的PDU丢失

1>这种服务非常适合于VOIP这样的业务,因为这种业务相对于无错传输来说更强调

实时性

2.4.4.2 SDU丢弃

当发送UM RLC实体从高层接收到对于特定的RLC SDU的丢弃指示时,则对那些被指示丢弃,并且没有任何分段被映射为RLC UMD PDU的RLC SDU进行直接删除。

2.4.4.3 RLC重建过程。

当收到RRC层要求RLC实体重建的指示后,对于UM RLC发送实体,删除所有存储的RLC SDU,停止并复位所有的计时器,复位所有的状态变量为初始值。

当收到RRC层要求RLC实体重建的指示后,对于UM RLC接收实体,将所有接收缓存中

的UMD PDU,去掉RLC头,进行RLC SDU重组,将所有没有递交过的RLC SDU按照序列号升序的顺序发往高层;删除所有保留的UMD PDU;停止并复位所有的计时器并且复位所有的状态变量至初始值。

5.1.2.1 UM发送过程

发送过程:

1>每发送一个UMD PDU到下一层协议实体,则设置发送状态变量VT(US) = SN (这

个PDU的SN);之后VT(US)++

5.1.2.2 UM接收过程

5.1.2.2.1 General

UM RLC接收实体需要根据状态变量VR(UH)来维护重排序窗口,如下所述:

1>当接收到的PDU SN处于VR(UH)–UM_window_size<=SN < VR(UH),则这个PDU

落入排序窗口内,

1>否则,则落在重排序窗口之外

当UM RLC接收实体收到对端的一个UMD PDU时,则:

1>可能丢弃或者放入接收缓存里【参见36.322 5.1.2.2.2】,

1>如果收到的UMD PDU被放入接收缓存,那么,

2>需要更新状态变量,重组并且提交RLC SDU到上层协议实体(PDCP), 并且根

据需要重启或者停止t_reordering计时器(see sub clause 5.1.2.2.2);

当t_reordering超时时,UM RLC接收实体应:

1>更新状态变量,重组并且提交RLC SDU到上层协议实体(PDCP), 并且根据需要重

启t_reordering计时器(see sub clause 5.1.2.2.3)。

并不是所有的UMD PDU放入缓存都会重组为SDU ,这需要根据当前重组窗口已经接收到的同属于一个RLC SDU的PDU情况等

当t_reordering 超时:

- 接收实体须更新状态变量,重组RLC SDU并提交到上层协议实体(PDCP), 并根据

需要重启T_ordering 计时器

- 同样,是否能够重组RLC SDU也要根据情况来定,如果同属于某一个RLC SDU

的PDU有缺失,那么可能导致该SDU被丢弃

5.1.2.2.2 当从低层收到UMD PDU时

当从底层接收到UMD PDU(SN=x),则UM RLC接收实体:

1>如果VR(UR) < x < VR(UH),但是在之前已经收到,或者;

1>(VR(UH)–UM_Window_Size) <= x < VR(UR),那么

2>丢弃这个包

1>否则【亦即是除上面两种情况之外】

2>把这个包放入接收缓冲。

5.1.2.2.3 当UMD PDU放入接收缓存

根据具体情况是重新调整排序窗口,还是可以直接和其他的PDU 组成一个RLC SDU

并递交到上层实体

如果UMD PDU(SN=x)被放入了接收缓存,则接收UM RLC 实体应:

1>如果x 没有落入重排序窗口内,则:

2>更新状态变量:VR(UH) = x + 1,

2>重组任何没有落入重排序窗口的PDU ,这个过程包括去除RLC包头,并按照

升序方式把组包好的RLC SDU递交到上层实体,

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

包头,并按照升序方式把组包好的RLC SDU递交到上层实体。

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)

5.1.2.2.4 当t_Reordering计时器超时

当t_Reordering计时器超时,则UM RLC接收实体:

1>更新VR(UR)为第一个没有收到的UMD PDU,它的SN > VR(UX)

1>重组所有SN < 更新后的VR(UR)的UMD PDU

1>如果VR(UH) > VR(UR):

2>启动该计时器

2>设置VR(UX) = VR (UH)

1否则

2>设置VR(UX) = NULL

7.1 UM接收端状态变量

每个接收UM RLC 实体维护下列状态变量:

VR(UR):UM receive state variable

这个状态变量记录着等待重排序的最早UMD PDU的序列号。

在重排序窗口之内,序列号低于该变量的UMD PDU其接收状态认为已经确定,放弃对此范围内的接收空隙处PDU(认为是丢失的PDU)的等待,将其余正确接收到的PDU重组形成SDU,顺序递交到高层,后续即使正确接收到此范围内序列空隙处的PDU也采取删除数据包的操作。该状态变量的初始值为0;

VR(UX):UM t-Reordering state variable

这个状态变量记录着触发重排序计时器的UMD PDU紧接着的下一个序列号SN。当

重排序计时器启动时,该变量与VR(UR)分别记录当前重排序计时器对应的序列号范围内的上边界和下边界。当该范围内全部接收序列空隙处的PDU 都正确接收后,终止当前重排序计时器。当重排序计时器不存在时,则该变量变得无意义。

VR(UH):UM highest received state variable

这个状态变量记录接收到的PDU中最高序列号紧接着的下一个序列号,作为重排序窗口的上边界。该状态变量的初始值为0 。

0.0 UM 接收实体分析

UM RLC接收实体根据UMD PDU 的序列号来对窗口进行维护、更新、重复接收检测

和重排序等功能。UMD PDU 的序列号长度可以为5比特或者10比特,具体取值由高层配置。UM RLC接收实体的重排序窗口大小是与序列号长度相关。当配置为5比特序列号长

度时,重排序窗口大小为16;当配置为10比特的序列号长度时,重排序窗口大小为512 ,

即重排序窗口总是序列号长度的一半。在进行序列号比较与判断等操作时,需考虑序列号翻转的问题。以10比特序列号长度为例,序列号取值范围为[0,1023] ,在对序列号进行加减以及比较判断时需要进行模1024 操作。

图2.4.4.6-1 UM RLC 实体接收排序示意图

接收UM RLC实体维护一个重排序窗口,如图2.4.4.6-1 所示,其中重排序窗口的上边界为当前收到的所有UMD PDU中序列号中最高的序列号加一获得:用VR(UH)表示;重排序窗口的下边界是由上边界减去重排序窗口大小而得到的一个数值。

如果新接收到的UMD PDU其序列号位于重排序窗口之外,则接收UM RLC实体认为其为新数据,相应更新重排序窗口的上边界,并将该数据放入接收缓存,等待进一步处理。如果接收到的UMD PDU其序列号位于重排序窗口之内,则需要进一步判断该序列号的PDU是否属于重复接收或则已经超过了重排序等待时间,如果是这两类PDU,则UM RLC接收实体直接采取删除这个PDU;否则,这个UMD PDU是一个正常接收到的PDU,则放入接收缓存,等待进一步处理。

UM RLC接收实体基于重排序计时器进行重排序操作,重排序计时器的具体取值由高层配置。UM RLC接收实体对未接收到的PDU对应的序列号启动重排序计时器,在重排序计时器超时后,如果该PDU仍然没有收到,则放弃对该PDU的等待并相应的更新重排序等待的下边界;在重排序计时器超时前,收到了该PDU,则按照正常接收处理,将PDU放入接收缓存。

UM RLC 接收实体并不对每一个还没有接收到的PDU对应序列号都启动一个重排序计时器,而是整个接收UM RLC实体最多维护一个重排序计时器,以相应的变量记录每一次启动重排序计时器对应的序列号上边界和下边界,对该范围内的所有序列号空缺统一处理,当该范围内所有序列号空缺中的PDU都正确接收,则停止该重排序计时器;当该重排序计时器超时后,如果仍然有新的接收序列号空隙,则对后续所有新的空隙重启重排序计时器,并记录相应的重排序等待的序列号上边界和下边界。

对于UM RLC接收实体中放置于接收缓存中的PDU,一旦该PDU序列号超出了重排序窗口或者超出了目前重排序等待的下边界,则将该UMD PDU去掉RLC头部,重组成为RLC SDU 并按照序列号的升序顺序递交到高层。

4.2.1.3 AM实体

AM实体配置用于从以下逻辑信道传送/接收RLC PDU:

1>DL/UL DCCH或DL/UL DTCH

AM实体用于发送/接收如下RLC数据PDU :

1>AMD PDU

1>AMD PDU分段

AM实体用于发送/接收RLC控制PDU :

1>状态报告PDU

图2.5-1 确认模式的RLC 实体模型

4.2.1.3.2 AM RLC实体发送端

当一个AM RLC实体发送端用RLC SDU生成AMD PDU,它应:

1>对RLC SDUs 进行分段和/或串接,使得生成的AMD PDU符合低层在特定的传输机会

上指示的大小。

AM RLC实体发送端支持RLC数据PDU重传(ARQ):

1>如果RLC数据重传的PDU不适合由低层指示的在特定的传输机会中的PDU大小,则

AM RLC实体发送端需要重新分段RLC数据PDU为AMD PDU;

1>重新分割数量没有上限。

当一个AM RLC实体用从高层收到的RLC SDUs或者用于重传的RLC数据PDU生成AMD PDU,它应:

1>在RLC PDU中包含相应的RLC 头。

4.2.1.3.3 AM RLC实体接收端

当一个AM RLC实体接收端收到的RLC PDU的数据,它应:

1>检测RLC数据PDU是否重复收到,并丢弃重复的RLC数据PDU;

1>如果这些收到的PDU失序,则对它们进行重新排序;

1>在低层检测RLC数据PDU丢失的情况,并要求AM RLC实体对端重传;

1>重组经过重新排序的RLC PDU为RLC数据SDUs,并按序提供的RLC SDUs给上层。

在RLC重建立时,AM RLC实体接收端应:

1>如果可能,重组失序接收的RLC PDU为RLC数据SDUs,并按序提供RLC SDUs给上层。

1>丢弃任何剩余的不能重新组装成的RLC SDUs的PDU;

1>初始化相关的状态变量和计时器。

2.5.

3.1 发送端状态变量

AM RLC发送实体维护下列状态变量:

VT(A),VT(MS),VT(S),详见后面

5.1.3 AM数据传输

5.1.3.1传输操作

发送端需要对用户数据以及控制数据进行优先级处理:

1),RLC控制PDU优先级应该高于数据PDU ,

2),重传的RLC数据PDU优先级要高于新的AMD PDU。

发送实体需要根据状态变量VT(A)和VT(MS)来维护一个发送窗口:

1>如果待发送PDU的SN满足(VT(A) < SN < VT(MS)),则它处于这个窗口,

1>否则在此窗口之外,

发送端不会传送一个SN不在此窗口的PDU到下层。

当成功发送一个PDU到低层,则AM RLC实体发送端应:

1>设置VT(S) = SN,再对VT(S)加一

AM RLC实体发送端可以通过如下方式收到一个RLC数据PDU的肯定确认(它的对等

端AM RLC实体确认成功接收):

1>AM RLC实体发送端可以通过status report消息来获得对端的肯定确认。

当收到一个SN= VT(A)的AMD PDU的肯定确认,则AM RLC实体发送端应:

1>设置VT(A)为所有窗口内还没有收到正确接收确认的PDU中具有最小的SN的SN。

1>如果同属于同一个RLC SDU的PDU都收到了的肯定确认,那么

2>通知上一层协议实体:这个RLC SDU已经成功发送

注:VT:Variable transmit;VR:variable receive

0.1 传输过程解析

VT(A):Acknowledgement state variable

这个状态变量记录已经收到肯定确认的连续PDU中最高序列号紧接着下一个序列号,作为发送窗口的下边界。该变量初始值为0。只有当AM RLC实体发送端收到序列号等于当前VT(A)变量值的PDU的肯定确认时,该变量才会更新。序列号小于该变量的PDU全部经过接收端肯定确认,表明已经全部正确接收。

VT(MS):Maximum send state variable

这个状态变量等于VT(A)+AM_window_size,作为发送窗口的上边界。任何序列号超出该变量的PDU都不允许发送。当窗口溢出时,AM RLC实体发送端不能发送任何新产生的PDU。VT(S):Send state variable

这个状态变量记录下一个新产生的AMD PDU的序列号,初始值为0。在当前VT(S)值被赋予一个新产生的AMD PDU后,该变量做加一操作。

AM RLC实体发送端优先发送重传的RLC PDU,AM RLC实体发送端维护状态变量VT(S),含义为分配给下一个新生成的RLC PDU 的序列号数值。该变量初始值为零,当生成一个新的AMD PDU 时,将该变量作为该PDU 的序列号,然后将该变量的数值加一。

AM RLC实体发送端维护一个发送窗口,如图0.1-1 所示,发送窗口的下边界定义

为收到接收端肯定确认且连续的最高PDU紧接着的下一个序列号的数值。发送窗口的上边界为下边界的数值加上窗口的大小。窗口大小为常数值512,即为AM序列号空间长度1024的一半。AM RLC实体发送端不会发送任何序列号位于发送窗口之外的AMD PDU到底层。

图0.1-1 AM 模式发送窗口示意图

AM RLC实体发送端根据对端发来的状态PDU中包含的肯定确认来更新发送窗口变量,发送窗口的下边界总是更新为当前发送窗口内的最小需要收到肯定确认的PDU的序列号。当收到与RLC SDU相关的AMD PDU肯定确认时,AM RLC实体发送端向高层发送该RLC SDU 的传输成功指示。

5.1.3.2接收操作

AM RLC实体接收端根据状态变量VR(R)和VR(MR)来维护接收窗口,如下:

1>如果VR(R) <= SN < VR(MR),则这个SN落入接收窗口; MR:max receive?

1>否则落在接收窗口之外。

当从低层收到RLC数据PDU,AM RLC实体接收端应:

1>要么丢弃收到的RLC数据PDU或放入接收缓存(见36.322 5.1.3.2.2 );

1>如果收到的RLC PDU的被放入了接收缓存:

2>更新状态变量,重组并递交RLC SDUs到上一层,然后根据需要开始/停止

t_reordering(见36.322 5.1.3.2.3 节)。

当t_reordering超时后,AM RLC 实体接收端:

1>更新状态变量,并根据需要开始t_reordering(见36.322 5.1.3.2.4 节)。

5.1.3.2.2 当从低层收到RLC数据PDU

当从低层收到一个RLC数据PDU时,它包含SN= x的AMD PDU分段字节y到z,则

AM RLC实体接收端应:

1>如果x 落在接收窗外,或;

1>如果SN= x的AMD PDU的分段字节y 到z,在之前已收到;

2>丢弃收到的RLC数据PDU ;

1>否则:

2>将接收到的RLC数据PDU放入接收缓存中;

2>如果在AMD PDU的一些字节段中的RLC PDU的数据之前已收到:

3>丢弃重复的字节段。

5.1.3.2.3 当RLC数据PDU放入接收缓存

当SN= x 的RLC数据PDU已放入接收缓存,AM RLC 实体接收端应:

0>如果x >= VR(H)

1>更新VR(H) 为x+ 1;

0>如果SN=VR(MS)的AMD PDU的所有的分段字节都已经收到:

1>则更新VR(MS)为第一个AMD PDU,它的SN> 当前VR(MS),并且它的分段字节

没有全部收到;

0>如果x = VR(R):

1>如果SN=VR(R)的AMD PDU的所有的分段字节都已经收到:

2>更新VR(R)为第一个AMD PDU,它的SN > 当前VR(R),并且其所有的分段字

节没有全部收到;

2>更新VR(MR)为VR(R) + AM_Window_Size,并且使用最新VR(R);

1>重组任何字节分段的AMD PDUs(它的SN落入接收窗口之外)和SN= VR(R)的顺

序字节分段的ADM PDU 为RLC SDUs,删除的RLC 头时,这样做,如果之前没

有提交给高层,那么就按顺序提交重组的RLC SDUs到高层

0>如果t_reordering正在运行:

1>如果VR(X) = VR(R),或

1>如果VR(X) 落入接收窗之外且VR(X) 不等于VR(MR):

2>停止和复位t_reordering;

0>如果t_reordering没有运行(包括由于上述行为t_reordering被停止的情况):

1>如果VR (H) > VR(R) :

2>启动t_reordering;

2>设置VR(X)为VR(H) 。

0.2 接收过程解析

AM RLC 实体接收端维护下列状态变量:

VR(R):Receive state variable

这个状态变量揭露最新完整接收到的连续AMD PDU紧接着的下一个序列号,作为接收窗口的下边界。该变量初始值为0,仅仅当当前R 变量值对应的PDU被正确接收后才会更新。低于该变量,不存在于接收序列缺口或者丢失的PDU 。

VR(MR):Maximum acceptable receive state variable

这个状态变量等于R+窗口,作为接收窗口的上边界且是第一个超出接收窗口的

AMD PDU的序列号,序列号超出该变量的PDU不能被AM RLC实体接收端接收。

VR(X):t-Reordering state variable

这个状态变量记录着触发重排序计时器的AMD PDU紧接着的下一个序列号。当重排序计时器启动时。该变量与VR(MS)分别记录当前重排序计时器对应的序列号范围的上边界与下边界。当该范围内全部接收序列号空隙处的PDU都正确接收后,终止当前重排序计时器。当重排序计时器不存在时,该变量无意义。

VR(MS):Maximum STATUS transmit state variable

这个状态变量记录作为状态报告中的ACK_SN的最高序列号值,初始值为0 。处于接收窗口中,序列号低于该状态变量的AMD PDU,要么肯定确认接收,要么已经经过重排序计时器检测认定为丢失的PDU;高于该状态变量的接收序列号空隙处为没有完成各个排序计时器检测的,仍旧等待HARQ重传的AMD PDU。

VR(H):Highest received state variable

这个状态变量记录接收到的最高序列号PDU紧接着的下一个序列号,初始值为0。当接收到

位于接收窗口中且序列号超出原来H数值的PDU时,该状态变量更新为当前接受的最高序列号加1.

图0.2-1 AM RLC 实体接收示意图

AM RLC实体接收端基于AMD PDU的序列号来完成窗口维护和更新,重复接收检测、重排序和状态报告等功能。AMD PDU的序列号10比特,窗口大小为512在进行序列号比较和判断等操作时,需要考虑序列号翻转问题。序列号实际取值范围为[0,1023],在对序列号进行比较判断是需要进行模1024。

AM RLC实体接收端维护一个接收窗口,如图0.2-1 所示,其中接收窗口的下边界为当前接收到的连续AMD PDU中序列号最高的紧接着的一个序列号数值VR(R);接收窗口的上边界是由下边界加上窗口大小而得到的数值。如果新接收到的AMD PDU其序列号位于接收窗口之外或者该PDU分段已经收到过,则AM RLC实体接收端删除收到的数据;否则放入接收缓存,等待进一步处理,对已经收到的PDU分段,删除其重复接收部分。

AM RLC 实体接收端基于重排序计时器来进行重排序操作,重排序进行重排序操作,重排序计时器的具体取值由高层配置。在重排序计时器时后,该空隙处的PDU仍旧没有收到,则认为检测到RLCPDU 接收失败,根据情况发起状态报告过程;在重排序计时器超时前,收到了空隙出的PDU ,则按照正常接受处理,将PDU 放入接收缓存中,AM RLC 实体接收端并不是对每一处序列号空隙都启动一个重排序计时器,而是整个AM RLC实体接收端仅维护最多一个重排序计时器,以相应变量记录每次启动的重排序计时器对应的序列号上边界和下边界,对该范围内的序列号空隙统一对待;该范围内所有序列号空隙处的PDU都正确接收后,停止该重排序计时器;当该重排序计时器超时后,如果后续仍旧有新的接收序列号空隙,则对后续的空隙重启重排序计时器,并记录相应的重排序等待的序列号上边界和下边界。

位于AM RLC实体接收端接收缓存中的PDU,一旦它们的序列号超出了接收窗口,则

将该AMD PDU去掉RLC头部,重组成为了RLC SDU并按照序列号的升序顺序发送到高层。自动重复应答过程

1. 重传,AM RLC 实体发送端收到接收端的状态PDU有关AMD PDU或AMD PDU分段的否定确认。对于AMD PDU 序列号位于发送窗口内的已发送部分,认为该否定确认的AMD PDU或AMD PDU分段需要重传。记录该AMD PDU或AMD PDU分段的重传次数,初次重传计数器记为0 ,以后每次重传计数器增加1 ,当计数器等于最大重传次数时,向高层上报。

2. 重传AMD PDU 或分段时其探询比特须根据当前需要重新设置。当低层指示的传输机会中RLC PDU的大小足够容纳需重传的AMD PDU时,则直接发送该AMD PDU至底层。否

则需要根据底层传输机会中指示大小重新对需要重传的AMD PDU进行分段。如果需要重传数据本身为AMD PDU分段,则根据需要切割原始的AMD PDU的相应数据载荷部分组成新的AMD PDU 分段以适应底层指示的传输机会中RLC PDU 大小。在构造AMD PDU分段时,仅对原始AMD PDU的数据部分进行新的映射并按照实际分段和串接情况组织新的头部,最终形成新的AMD PDU分段。

5.2 ARQ 过程

RLC AM 的ARQ功能

ARQ过程只会在AM RLC实体上执行。

RLC AM实体的发送端发送RLC数据PDUs到对端RLC AM 实体,对端接收端接收到RLC数据PDUs,并在以下两种情况下发送状态报告给发送侧

1>收到发送侧发来的Polling

1>检测到RLC数据PDU接收失败

发送端在以下两种情况会进行重传:

1>收到接收侧发来的状态报告指示有数据包未接收成功

1>本发送侧底层发来的HARQ发送失败指示

5.2.1 重传

AM RLC实体发送端可以收到一个AMD PDU或PDU的一部分的否定确认(其对等端

AM RLC 实体通知接收失败),如下方式:

1>由对等端的AM RLC实体发送的状态PDU;

当收到一个AMD PDU的一个否定的确认或由一个AMD PDU 的一部分的HARQ 递送失败通知,RLC实体发送端应:

1>如果相应的AMD PDU 的SN落入到VT(A) <= SN < VT(S):

2>则认为这个AMD PDU 或AMD PDU 的一部分要求重传。

当一个AMD PDU或一个AMD PDU的部分被要求重传,则AM RLC实体发送端应:

1>如果这个AMD PDU被认为是第一次重传:

2>则设置与AMD PDU的关联的RETX_COUNT 为零;

1>否则,如果它(AMD PDU或者它的一部分被认为是重传)或它的一部分重传没有

被挂起:

2>递增RETX_COUNT;

1>如果RETX_COUNT = Max_Retx_Threshold:

2>则向上层指示已经达到了最大重传次数了。

当重传一个AMD PDU,AM RLC 实体发送端:

1>如果AMD PDU 大小能够被完全容纳在由低层指示的传输机会中:

2>则传输这个AMD PDU,除了P域(P 在36.322 5.2.2节描述);

1>否则:

2>对这个AMD PDU进行分段,使得分段后的新的AMD PDU 大小可以被完全

容纳在由低层指示的传输机会中并向底层传递新的AMD PDU分段。

当重传了一个AMD PDU的一部分,AM RLC 实体发送端应当:

1>根据需要分段AMD一部分,形成一个新的AMD PDU分段,使得分段后的新的

AMD PDU 大小可以被完全容纳在由低层指示的传输机会中并向底层传递新的AMD

PDU分段。

当形成了新的AMD PDU 的部分,AM RLC 实体发送方应:

1>只需要把原来的AMD PDU数据字段映射到新的AMD PDU 分段的数据部分;

1>并根据36.322第6节设置新的AMD PDU段包头;

1>并根据(36.322 5.2.2节描述)设置的P域。

5.2.2 Polling

AM RLC 实体可以Polling 它的对等端实体用于触发对端发送状态报告,在随后章节里

描述的Polling 功能要在VT(S)变量增加之后执行

5.2.2.1 AMD PDU 或AMD PDU 分段传输

当组装一个新的AMD PDU时,AM RLC实体发送端应:

1>PDU_WITHOUT_POLL加一;

1>对于每一个映射到RLC数据PDU数据域新数据域元素,BYTE_WITHOUT_POLL增加的值为新数据域元素对应的字节数;

1>如果PDU_WITHOUT_POLL>= Poll_PDU; 或

1>如果BYTE_WITHOUT_POLL>= Poll_Byte;

2>在RLC数据PDU包含一个POLL,如下所述。

当组装一个AMD PDU或者AMD PDU分段,AM RLC实体发送端应:

1>在传输了RLC数据PDU后,如果传输缓存和重传缓存均变为空的话(不包括还没有肯定确认的RLC数据PDU),或;

1>在传输了RLC数据PDU后,如果没有新RLC数据PDU能进一步发送,(例如,由于窗口溢出的原因);

2>在RLC 数据PDU包含一个POLL,如下所述。

要在RLC 数据PDU包含一个POLL,AM RLC实体发送端应:

1>设置的RLC 数据PDU 的“P”域为1;

1>PDU_WITHOUT_POLL设置为0;

1>BYTE_WITHOUT_POLL设置为0

在完成一个包含poll的RLC数据PDU向低层的传输后根据需求增加VT(S),AM RLC实体传输端应:

1>POLL_SN 设置VT(S) –1;

1>如果t_poll_retransmit没有运行:

2>启动t_poll_retransmit;

1>其他:

2>重新启动t_poll_retransmit;

5.2.2.2 状态报告的接收

当AM RLC实体发送端收到AM RLC实体接收端的状态报告,则应:

1>如果状态报告包含RLC数据PDU的序列号等于POLL_SN的肯定或否定确认:

2>如果T_poll_retransmit正在运行:

3>停止T_poll_retransmit。

5.2.2.3 t_poll_retransmit 超时

当t_poll_retransmit超时,AM RLC 实体发送端应:

1>在传输了RLC数据PDU后,如果传输缓存和重传缓存同时为空(不包括还没有肯定确认的RLC 数据PDU ); 或

1>在传输了RLC 数据PDU 后,没有新的RLC数据PDU能够发送(例如,由于窗口溢出的原因):

2>则认为SN=VT(S)-1的AMD PDU 需要重传;

2>则认为没有收到确认消息的任何AMD PDU需要重传;

1>在RLC 数据PDU 包含一个POLL,如36.322 5.2.2.1 所述。

2.5.5.4 Polling

AM RLC实体通过Polling方式向其对等端请求出发状态报告。在以下几种情况下会触

发Polling :

1. 继上次Polling 之后新发送的RLC PDU累计到一定的个数

2. 继上次Polling 之后新发送的RLC PDU的数据域部分的字节总和和累计达到一定的

字节数;

3. 完成当前RLC PDU的传输后传输缓存和重传缓存均为空;

4. 完成当前RLC PDU的传输后不再有新的RLC PDU能进行传输时(例如由于窗口溢

出等)

Polling 实现的方式为将RLC PDU 中的P 域(探询比特)置为“1 ”。发送携带Polling

的RLC PDU后,记录当前已经发送的PDU 中最高的序列号为Polling 序列号,并启动或重启动Polling 重传计时器。

当收到记录的Polling 序列号相关的肯定或否定确认后,停止并复位探询重传计时器,

此次探询过程结束。

当Polling 计时器超时,则发起一次新的Polling 过程。如果此时传输缓存和重传缓存均

为空或者没有新的RLC PDU 传输(例如由于窗口溢出的原因),则将当前已经传输过的序列号最高的AMD PDU 或者任意没有收到肯定确认的AMD PDU 进行重传,用以携带Polling 比特。

5.2.3状态报告

为了给对端实体提供RLC PDU的肯定或否定确认信息,AM RLC 实体需向其对等端实体发送状态PDU。

RRC层可以配置RLC是否启动状态报告禁止功能。

触发状态报告包括:

1>从对等的AM RLC 实体发起POLLING:

2>当一个AM RLC 实体接收端从底层收到一个RLC数据PDU,它的SN = X并且

它的P域设置为“1”,

3>如果根据第5.1.3.2.2规定这个PDU要被丢弃;或

3>如果x < VR(MS):

4>触发一个状态报告;

3>其他:

4>延迟触发状态报告,直到x < VR(MS)或x >= VR(MR)。

1>检测到一个RLC PDU接收失败:

2>当T_reordering超时,AM RLC 实体接收端会触发一个状态报告。

当状态报告已被触发,AM RLC 实体接收端应:

1>如果T_status_prohibit没有运行:

2>在下层指示的第一次传输机会中,构建一个STATUS PDU并传输给下层;

1>其他:

2>在T_status_prohibit超时后,由低层指示的第一个传输机会,构建一个状态报告

PDU并并提交给它的下层,即使在t_status_prohibit正在运行时已经多次触发了

状态报告,;

当STATUS PDU已递交给下层,AM RLC 实体接收端:

1>启动T_status_prohibit。

当构造一个状态PDU 时,AM RLC 实体应:

1>对于AMD PDU,它的SN满足VR(R) <= SN < VR(MS),并且还没有被完全接收到,按照

SN升序和PDU字节端升序的方式,从SN = VR(R)开始直到这个STATUS PDU大小已经达到底层指示发送机会里的大小为止:

2>对于一个AMD PDU,还没有接收到任何字节分段:

3>则在状态PDU里包含把这个AMD PDU的SN对应设置为NACK_SN;

2>对于一个部分接收到的AMD PDU,它的一个还没有接收到的连续的字节分段?:

3>则在状态PDU里包含一个NACK_SN,SOstart和SOend

1>设置ACK_SN为下一个还没有收到的RLC数据PDU的SN,它在STATUS PDU中并没有

指示为丢失的状态。

2.5.6.1 RLC AM 的状态报告

发送方触发(通过在RLC PDU中置Polling 位为“1”来触发)

- 最后一个包,发方缓存中没有数据

- T_Poll_Retransmit 计时器超时(Polling 触发后没有收到回应)

- 每发送完Poll_PDU个PDU 后将P 位置为“1 ”(PDU 个数触发)

- 每发送完Poll_Byte 个字节后将P 位置为“1 ”(Byte 位触发)

- 接收方触发

- 检测到接收的RLC 数据PDU 错误时,触发状态报告

2.5.6.2 状态报告解析

AMD RLC 实体向对等端发送状态报告,用以告知其RLC PDU的是否成功接收。触发

状态报告的条件包括:

- 接收到来自AM RLC 实体对等端的探询;

- 检测到RLC PDU的接收失败。

需要注意的是,如果相关携带探询的RLC PDU仍旧处于重排序计时器检测的阶段,则

需要延迟到该PDU 的接收状态明确后再触发状态报告。

RRC层可以配置RLC 是否启动状态报告禁止功能。该功能主要是为了避免频繁发送状

态报告。当状态报告禁止功能开启,则对于触发的状态报告只能延迟到状态报告禁止计时器超时后的第一次传输机会才能根据最新的接收状态发送;在状态PDU发往底层之后,启动状态报告禁止计时器。

状态报告的内容包括两部分:肯定确认部分(ACK_SN)和否定确认部分(NACK_SN)。

其中否定确认部分为当前接收窗口中已经检测到接收失败的RLC PDU的序列号列表,并按照序列号和字节分段升序排列。当存在一个AMD PDU 中部分字节而非全部接收失败的情况,除了需要用序列号指示,还需要携带接收失败部分的起始与终止字节位置。肯定确认部分设置为未在此状态报告中包含并且紧接着的下一个没有收到的RLC PDU的序列号。简单来讲,状态报告的含义为除了在本状态报告明确列出的接收失败的RLC PDU或分段以外,其余所有以肯定确认指示(ACK_SN )为上限的PDU 均已经正确接收。

5.3 SDU丢弃

当AM RLC实体发送端从高层(PDCP 层)接收到对于特定RLC SDU的丢弃指示,则

对那些被指示丢弃,且还没有任何分段映射为RLC AMD PDU的RLC SDU进行直接删除。5.4 重建过程

当收到RRC层要求RLC 实体重建的指示后,RLC实体应:

1>如果是TM发送实体

丢弃所有RLC SDUs

1>如果是接收UM RLC实体

2>如果可能,用SN < VR(UH)的UMD PDUs组装RLC SDUs,去除RLC头,如果之前

没有传送过,并按照RLC SN升序把RLC SDUs传送给上层

2>丢弃所有剩余的UMD PDUs

1>如果是传输UM RLC entity

2>丢弃所有的RLC SDUs

1>如果是AM RLC实体

2>将所有SN < VR(MR) 的AMD PDU,去掉RLC 头,进行RLC SDU重组,将所有没

有递交过的RLC SDU按照序列号升序的顺序发往高层;

2>删除所有保留的AMD PDU 及分段;

2>丢弃发送端所有RLC SDUs和AMD PDUs;

2>删除所有RLC控制PDU ;

1>停止并复位所有的计时器,

1>复位所有的状态变量至其初始值。

4.3 服务

4.3.1 提供给上层的服务

1>TM数据传输;

1>UM 数据传输

1>AM 数据传输, including indication of successful delivery of upper layers PDUs.

4.3.2 期待下层提供的服务

1>数据传输;

1>传输机会的通知,同时在本次传输机会中指示RLC PDU的总尺寸大小

4.4 RLC层功能

1>上层PDUs的传送;

1>通过ARQ错误纠正ARQ (只适用于AM数据传输);

1>级联(连接), 分段和重组RLC SDUs (only for UM and AM data transfer);

1>RLC 数据PDUs的重分段(只适用于AM数据传输);

1>RLC 数据PDUs的重排序(only for UM and AM data transfer);

1>重复检测(only for UM and AM data transfer);

1>RLC SDU 丢弃(only for UM and AM data transfer);

1>RLC重建;

1>协议错误检测(只适用于AM数据传输).

2.6 三种实体比较

我们观察前面对实体视图就会发现:

- 对于UM/TM各有一个发送与接收实体

- AM 接收发送同属于一个实体

- 这个区别在于AM 支持ARQ原因,发送端需要接收端提供确认信息来决定是否需

要重传

2.7 格式

RLC 数据单元,格式和参数

1>RLC 数据PDU

2>TMD PDU ,

2>UMD PDU ,SN:5 bits or 10 bits

2>AMD PDU ,SN:10 bits第一次发送的RLC SDU的一部分生成的PDU,或者在重传的时

候不需要分段的PDU

2>AMD PDU segment,SN:10 bits,重传的PDU 需要分段,从而产生的

1>RLC控制PDU

2>状态报告

采用什么样的格式取决于:

- 对分段支持

- 上层使用什么样的业务

- 针对AM 实体的重传机制的支持

TMD PDU

- 因为透明传输,所有不需要做任何处理直接透传到MAC

2.8 HARQ 与ARQ的区别

HARQ 与ARQ都可以通过重传来纠正传输过程中的错误,因此看起来在RLC 上的ARQ

是多余的,但是在某些情况下HARQ 并不能够纠正所有的错误:

- 尽管MAC层的HARQ 可以纠正几乎所有的错误,但是在一些情况下依然存在错

误的情况:

- NACK传输过程出错被理解成ACK

- HARQ重传次数超过门限值

- 这样的错误概率有可能达到1%,这对于TCP业务来说是不可以接受的,在高速移

动数据业务量大时会导致性能大大降低

6.0 PDU, 格式和参数

3.1 UMD PDU

一个UM RLC 实体由RRC来配置使用5bit SN或10bit SN。

5bit SN: UMD PDU header的固定部分的长度是1字节

10 bit SN : UMD PDU header 的固定部分内容与AMD PDU header 固定部分内容相同(除了D/C, RF 和P 三个域被R1域取代以外)。

UMD PDU header 扩展部分与AMD PDU header 扩展部分相同(与SN 无关)。

E

FI SN

Data ...

Oct N

Oct 1Oct 2

UMD PDU with 5 bit SN (No LI)

R1R1R1

FI E SN

SN Data ...

Oct 3Oct N

Oct 1Oct 2

D/C RF P

FI E SN

SN Data ...

Oct 3Oct N

Oct 1Oct 2

UMD PDU with 10 bit SN (No LI) AMD PDU (No LI)

LI 2E LI 2 (if K>=3)

E

LI 1LI 1

E

FI SN

Data Oct N

Oct 1Oct 2Oct 3Oct 4

...

LI K-1

E LI K-1

E

LI K-2LI K-2

...

Padding

E

LI K

LI K

Oct [2.5+1.5*K -1]Oct [2.5+1.5*K-2]Oct [2.5+1.5*K-3]Oct [2.5+1.5*K-4]Oct [2.5+1.5*K-5]Oct [2.5+1.5*K]Present if K >= 3

UMD PDU with 5 bit SN (Odd LIs)

LI 2E LI 2

E

LI 1LI 1

E

FI SN

Data Oct N

Oct 1Oct 2Oct 3Oct 4

...

LI K E LI K

E

LI K-1LI K-1Oct [2+1.5*K -1]...

Oct [2+1.5*K-2]Oct [2+1.5*K-3]Oct [2+1.5*K]

UMD PDU with 5 bit SN (Even LIs )

LI 2E LI 2 (if K>=3)

E

LI 1LI 1

R1R1R1

FI E SN

SN Data Oct N

Oct 1Oct 2Oct 3Oct 4Oct 5

...

LI K-1

E LI K-1

E

LI K-2LI K-2

...

Padding

E

LI K

LI K

Oct [2.5+1.5*K]Oct [2.5+1.5*K-1]Oct [2.5+1.5*K-2]Oct [2.5+1.5*K-3]Oct [2.5+1.5*K-4]Oct [2.5+1.5*K+1]Present if K >= 3

LI 2E LI 2 (if K>=3)

E

LI 1LI 1D/C RF P

FI E SN

SN Data Oct N

Oct 1Oct 2Oct 3Oct 4Oct 5

...

LI K-1

E LI K-1

E

LI K-2LI K-2

...

Padding

E

LI K

LI K

Oct [2.5+1.5*K]Oct [2.5+1.5*K-1]Oct [2.5+1.5*K-2]Oct [2.5+1.5*K-3]Oct [2.5+1.5*K-4]Oct [2.5+1.5*K+1]Present if K >= 3

UMD PDU with 10 bit SN (Odd LIs ) AMD PDU (Odd number of LIs)

LI 2E

LI 2

E

LI 1LI 1

R1R1

R1

FI E

SN

SN Data Oct N

Oct 1Oct 2Oct 3Oct 4Oct 5

...

LI K E LI K

E

LI K-1LI K-1

Oct [2+1.5*K]...

Oct [2+1.5*K-1]Oct [2+1.5*K-2]Oct [2+1.5*K+1] LI 2E LI 2

E

LI 1LI 1D/C RF P

FI E SN

SN Data Oct N

Oct 1Oct 2Oct 3Oct 4Oct 5

...

LI K E LI K

E

LI K-1LI K-1Oct [2+1.5*K]...

Oct [2+1.5*K-1]Oct [2+1.5*K-2]Oct [2+1.5*K+1]

UMD PDU with 10 bit SN (Even LIs ) AMD PDU (Even number of LIs)

相关主题
相关文档
最新文档