摘 要:根据3GPP协议中LTE空中接口协议栈Release 8标准,首先研究无线链路控制(RLC)层的原理和工作机制,然后基于Linux操作系统,给出实现RLC层协议的设计方案和总体框架。
关键词:LTE协议栈;RLC层;AM;UM;Linux操作系统
1 引言
LTE(Long Term Evolution)是3GPP组织基于3G移动通信技术研发出的下一代“准4G”技术。该标准可以支持最大20MHZ的系统带宽、超过200Mbit/s的数据传输速率和更短的传输延时。LTE协议栈可分为三层:物理层(L1),数据链路层(L2)和网络层(L3)。其中L2自下而上分为MAC(Media Access Control)子层、RLC(Radio Link Control)子层和PDCP(Packet Data Convergence Protocol)子层,如图1所示。其中RLC子层是面向连接的、基于比特流的可靠的传输控制协议,用于为上层不同类型的业务提供不同的数据传输链路和QoS控制。L3的RRC(Radio Resource Control)层对RLC层进行状态管理和参数配置等。
图1 RLC在LTE协议栈中的位置
2 RLC协议研究
2.1 概述
RLC层的功能由RLC实体实现。根据上层不同的数据传输要求,RLC实体可被配置为TM(Transparent Mode)发送实体、TM接收实体、UM(Unacknowledged Mode)发送实体、UM接收实体和AM(Acknowledged Mode)实体。其中RLC发送实体从上层的SAP(Service Access Point,服务接入点)接收SDU(Service Data Unit),在得到下层发送机会通知后,将SDU分段拼接为指示大小的PDU(Packet Data Unit),如图2所示,然后通过下层的逻辑信道发送给对等端实体。RLC接收实体从下层逻辑信道接收PDU,并重新组合为SDU,再发送给上层SAP。RLC AM实体同时具有发送和接收功能。
图2 RLC PDU结构图
TM实体为上层提供透明模式传输,这种模式不对数据包进行任何处理,常用于信令发送,如广播消息、寻呼消息等。UM实体为上层提供非确认模式传输,这种模式提供了一定的可靠性保障,但是可能会存在丢包现象,适用于对延迟敏感,但允许一定误码率的业务,如VoIP等。AM实体为上层提供确认模式传输,这种模式可实现无差错传输,但会导致较大的延时,适用于对错误敏感但对时延不敏感的业务,如RRC信令传输和FTP业务等。
2.2 非确认传输模式UM
图3 UM实体模型
UM传输模式实体模型如图3所示。UM发送实体把从上层接收到的SDU放入发送缓冲区中。当下层通知RLC层发送时机时,UM发送实体将发送缓冲区中的SDU分段拼接成下层指示大小的PDU,添加RLC包头后通过逻辑信道发送给下层。
UM接收实体定义了一个接收窗口,它从下层逻辑信道接收到PDU后,首先检测该PDU是否落在该窗口之内,如果没有,则丢弃,否则将其放入接收缓冲区中。如果接收缓冲区中的PDU序列号有乱序,则进行重排序,之后去掉RLC包头,将PDU重组为SDU,并递交到上层。
为了避免过多的重排序时延,UM接收实体设置了一个重排序定时器。当检测到有没收到的PDU时,就启动该定时器,若定时器超时,UM接收实体不再等待没收到的PDU,而是开始将接收缓冲区中的PDU重组为SDU,递交到上层。
2.3 确认传输模式AM
图4 AM实体模型
AM传输模式实体模型如图4所示,它在支持UM模式所有功能的基础上,采用ARQ(Automatic Repeat reQuest,自动重复请求)机制来实现对出错或丢失数据包的重传。与ARQ有关的功能包括:PDU的重传和重分段,轮询和状态报告。
重传和重分段为了让发送方重传丢失的PDU,接收方会向发送方发送一个状态PDU,也叫做状态报告,用来通知发送方成功接收的PDU和丢失的PDU。AM实体发送端在发送完PDU之后,应该把它们保存在一个重传缓冲区中,以便对等端通过状态报告要求对某些PDU进行重传。
AM实体接收端接收到状态PDU后,判断发送端哪些PDU或PDU分段需要重传。当需要对某个PDU重传时,若下层指示的发送大小小于该PDU的大小,还需将该PDU重分段成更小的PDU分段再发送。
轮询和状态报告
AM实体发送端通过将PDU包头中的轮询位置为1,来要求对等实体接收端给它发送状态报告,该功能叫做轮询。发送端发起轮询的条件有:发送端最后一个PDU被发出去,或者从上次发送轮询以来记录的发送过的PDU个数或字节数达到某个预定值。此外,当AM实体接收端检测到一个PDU接收失败,也可以生成一个状态报告,以期待对等端的重传,而不是像UM实体那样认为在一定时间内没收到的PDU是永远丢失了。
3 RLC层在Linux中的设计和实现
基于Linux操作系统的RLC子层协议开发有效利用Linux操作系统的多线程编程、内存管理和通信方式简单高效等方面的特点,按功能独立性来划分RLC子层的各个模块,并妥善处理模块之间的通信。
3.1 整体架构设计
RLC子层由发送线程、接收线程和定时器线程三个线程组成,所有线程均从属于LTE协议栈进程。这三个线程之间通过消息队列和传输控制块(TCB)进行协调,如图5所示。线程的建立和调度则由操作系统负责。
图5 RLC层整体架构
发送线程和接收线程均有自己的消息队列,用于接收其他线程的各类消息,如RRC层发来的RLC实体建立消息、PDCP层发来的SDU接收消息、MAC层发来的PDU接收消息、定时器线程发来的某个定时器超时消息等。
RLC层定时器线程定义了UM实体和AM实体用到的所有定时器,多个定时器用链表来管理,定时器超时即向发送或接收线程的消息队列发送消息,由发送或接收线程来调用相应的超时例程。
3.2 功能模块设计
协议控制模块
RLC子层最多可以同时建立32个不同工作模式的实体,因此定义一个包含32个元素的全局数组,每个数组元素称为一个协议控制块(PCB),用来存放对应实体用到的状态变量、定时器和数据缓冲区等。采用链表方式对PCB进行管理:当收到RLC实体建立消息时,在PCB全局数组中找到一个未分配的元素加入该链表中,标记分配状态为已分配,并关联给刚建立的RLC实体,最后配置该PCB的各个参数。
数据处理模块
将RLC子层的功能进行抽象化、模块化的设计之后,可将UM模块划分为:PDU构造子模块、发送管理子模块、PDU解析子模块和接收管理子模块,将AM模块划分为:PDU构造子模块、发送管理子模块、PDU解析子模块、接收管理子模块和状态控制子模块。各模块之间界限清晰、功能独立,彼此之间的通信简洁高效。
4 总结和展望
本文介绍了LTE协议栈RLC层的工作机制,并给出了在Linux操作系
统下实现RLC层协议栈的设计方案。现阶段的协议软件能够完成LTE RLC层协议文档Release 8的主要功能,但是还需要提高代码的运行效率和对异常情况的处理能力。这些将在今后的工作中得以改进。
参考文献
Stevens, W. Richard. UNIX网络编程:卷2 进程间通信:英文版. 北京:人民邮电出版社. 2009