RLC协议简介
RLC(Radio Link Control)在无线协议架构中属于数据面协议中的一部分,数据传输从基站到终端的过程中,一共要经历UDP/SCTP-->SDAP/RRC-->PDCP-->RLC-->MAC-->PHY。通常PDCP/RLC/MAC统称为L2,所以RLC在整个无线协议中,可以认为其是数据面L2协议的一部分。
RLC层的主要功能
RLC层作为L2数据面协议的一部分主要解决的功能是如下几个:
- 分段重组,上层PDCP过来的数据包大小与业务强相关,下层MAC处理的数据包,又与控制面和资源强相关,RLC在两者之间架设了一座桥梁。
- RLC重传(AM模式),RLC重传是为了保证可靠传输的同时,又需要保证传输的效率,所以必须引入重传功能。
- 此外RLC实体的建立,数据包的预处理,重复包的检查等基本还是服务于上述两个基本的功能。
当然,对于UM/TM模式有很大的不同,比如没有重传,会丢包等。但RLC层其核心还是具有重传功能的AM模式。
在RLC与MAC层交互的过程中,还有一个常见的概念,就是逻辑信道。MAC层的主要功能复用解复用就是逻辑信道到传输信道的映射。RLC层的数据,是以用户+信道的形式来组织,并给到MAC层,MAC层将其以TB的形式传输到物理层。
AM数据报文格式
下面通过AM数据报文的格式,来看一下RLC是如何实现AM模式功能的。AM RLC只传输UL/DL DCCH或UL/DL DTCH的数据包。
- SN. RLC要确保每一个报文的送达,所以要对自己发出去的每一个报文都登记造册,所以编号(SN)是必须的。
- D/C. AM报文包含两大类,一个是数据报文,一个是控制报文,控制报文是指RLC状态报告,这两种报文格式截然不同。D/C字段即用来标识此是何种报文的。
3. SI。 当要给AM数据报文把一个业务包给分段了时,则RLC层还需要知道被分段的报文处于哪些报文中,是如何被分段的。SI字段主要其这样的作用,能标识是否包含了分段,以及是哪一个分段。为了配合SI完成分段报文的传输,同一个被分片的报文具有相同的SN。
4. P.。P字段是为重传而准备的,主要作用是提醒接收放应答, 回复状态状告。
- 5.SO: 用于指示RLC SDU segment在原始RLC SDU中的位置,以byte为单位。
AM 状态报告报文格式
RLC在接收到一定数量的报文后,满足一定条件时,会回复状态报告。告诉对端哪些报文收到了,哪些报文没有收到。其原则是在报文的发送中尽可能传递更多的信息。与数据报文一个明显的区别是,状态报告没有了SN号,因为状态报告不需要重传。
以如下场景为例,绿色为已经接收到的报文,白色为没有接收到的报文。
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
- D/C. 在前面已经描述,状态报告中为C。
- CPT. 字段是为了标识不同种类的控制报文,当前为000。
3. ACK_SN. 此序列号及之后的报文没有被接收到,也没有明确告知没有接收到。比如如下场景,可以填写10。
4. E1. 表示后面是否跟随一个NACK_SN/E1/E2/E3字段。
5. NACK_SN. 标示丢失没有收到的报文。当前场景可以填写5。
6. E2标识是否跟随有SoStart和SoEnd。主要用于报文的不完整接收场景的处理。
7. E3字段表示后面是否跟着关于一连串RLC SDU未被接收的消息。是否有range字段。
8. NACK range字段表示从NACK_SN开始(包括NACK_SN),有几个连续的RLC SDU丢失。比如当前场景7号报文开始连续2个报文丢失,可以采用NACK range标识。
9. SOstart, Soend. 表示被RLC接收端发现丢失的SN=NACK_SN的SDU的某个部分。SOstart的值表示该丢失的SDU部分在原始SDU中的哪一个byte处开始.Soend表示哪个byte结束。此场景中不涉及。
最终报文填写完的样子如下:
DC | CPT | ACK_SN | E1 | NACK_SN | E1 |
C | 0 | 10 | 1 | 5 | 1 |
E2 | E3 | NACK_SN | NACK_RANGE | E1 | |
0 | 1 | 7 | 8 | 0 |