- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
TD-SCDMA测试仪中Iub接口实现RLC层信令解码
摘要 为了更精确地完成TD-SCDMA测试仪中相关信令的解码测试工作,对TD-SCDMA系统的Uu接口RLC层信令在Iub接口实现的解码进行了深入分析和研究,给出了RLC层的信令消息结构和流程,提出了RLC解码的一种算法,并且应用到TD-SCDMA测试仪中,经调试并实际测试后,得到了预期的良好效果。经过再改进,完全可以满足市场需要。
0、引言
TD-SCDMA系统作为第三代移动通信系统的主流标准之一,受到了全球研究学者、移动通信运营厂商和广大用户的密切关注,具有广阔的发展前景[1]。TD-SCDMA于2000年5月在土耳其召开的国际电联2000年全会上被批准为国际电联的正式标准后,经过几年的发展,无论在形式上还是在实质上,都已在国际上被广大运营商、设备制造商所认可和接收。TD-SCDMA系统综合了4种多址方式:TDMA,FDMA,CDMA和SDMA,采用了6大关键技术:智能天线、联合检测、接力切换、上行同步及动态信道分配和软件无线电。通过这些技术[2-7]极大地降低了系统的干扰,扩大了系统的容量,提高了频谱的利用率,同时也节省了系统的成本开支。在中国,用TD-SCDMA标准组建第三代移动通信运营网的呼声更是越来越高。TD-SCDMA网络的大规模建设已经迫在眉睫。作为组网的重要支撑技术的测试仪的开发显得异常重要。
针对这种情况,重庆邮电大学在对TD-SCDMA技术充分研究的基础上,研制出了具有自主知识产权的TD-SCDMA移动通信网络测试仪,完善了TD-SCDMA产业链,并形成系列产品并推向市场。TD-SCDMA网络测试仪提供了强大的分析、统计和处理功能,支持UMTS R99,R4,R5等多种版本网络的信令及业务分析,提供协议解码、通用指标统计、呼损分析、呼叫追踪、多接口关联分析以及协议仿真测试等功能,是移动无线网、接入网及SS #7网络设备研发、网络组建、网络维护、网络优化、网络安全、运营决策及增值应用的实用工具。
1、Iub接口RLC层消息
TD-SCDMA系统中Node B和RNC(无线网络控制)的接口,即Iub接口[3],用来传输RNC和Node-B之间的信令和无线接口的数据,它的协议栈是典型的三平面表示法[4]:无线网络层、传输网络层和物理层。无线网络层由控制平面的NBAP和用户平面的帧协议(FP)组成;传输网络层目前采用ATM传输;物理层可以使用E1T1STM-1等多种接口,目前常用的是E1和STM-1。Iub接口主要功能为:Iub传输资源管理、Node-B的管理与维护、系统信息管理、公共信道业务管理、专用信道业务管理、共享信道业务管理、定时与同步管理、数据传输等。Iub接口在网络中的位置相当于GSM中的Abis接口。在现行的第三代移动通信系统标准中,Iub接口没有象Iur接口和Iu接口一样做成完全开放的接口。
在协议祯(FP)[8]传输的RRC消息数据被添加了MAC头、RLC头,还有可能被分段或者串接等,因而对于信令数据而言,只有除去了MAC头、RLC头,并经过组装(有分段的情况)后才能成为完整的RRC层信令数据,进行解码或者进一步处理。由于其层次多,数据复杂,已成为测试仪开发中的一个难点。其中连接RRC(或者PDCP,BMC)和MAC层的RLC层的数据更是类别众多,结构多变,相当复杂。
RLC[9]层在MAC[10]之上,在RRC(或者PDCP层,BMC层)之下,进行相对独立的管理和控制。RLC子层所支持的功能如下[9]:①工程分段和重组,在发送端执行将不同长度的高层PDU分段,使之成为较小的RLC PDU,并在接收端进行重组,RLC单元的大小可以根据实际的传输格式集进行调整;②串接,当一个RLC SDU的内容不能填满一个RLC PDU时,下一个RLC SDU的第一段可能放在该RLC PDU中与前一个RLC SDU的最后一段连接在一起;③填充,当连接不适当且要发送的剩余数据不能填满一个完整的RLC PDU时,RLC PDU的剩余数据域将用填充比特填满;④用户数据传输,该功能用于在RLC业务用户之间的数据传输,RLC支持确认、非确认、透明的数据传输,QoS的设置控制用户数据的传输;⑤纠错,该功能与物理层采用编码等方式降低误码率不同,RLC子层的确认传输方式利用重传机制提供纠错功能,例如选择重发、返回N、停止等待自动重传请求;⑥高层PDU的顺序传递,在确认模式下进行数据传输时,该功能保证递交到RLC的高层PDU的发送顺序,若高层要求提供无顺序的传递服务,RLC将不使用该功能;⑦重复检测,该功能在接收端检测接收到的RLC PDU是否重复接收,确保送到高层的PDU只递交一次;⑧流量控制,该功能允许RLC接收端控制对等发送端RLC信息发送的速率;⑨序列号检查,该功能用于非确认传输模式,保证重组PDU的完整性并提供一个检测恶化的RLC SDU的机制,将抛弃恶化的RLC SDU;⑩协议错误检侧和恢复,该功能用于在RLC协议操作中检测错误并进行恢复;⑾加密,该功能阻止未经允许的数据用在RLC层的非透明模式中;⑿轮询,该功能用于RLC发送端请求RLC接收端回复一个状态报告;⒀状态传输,为了通知RLC发送端PDU是否接收到,一个RLC接收端将使用该功能传送一个状态报告;⒁SDU的抛弃,该功能允许RLC的发送端释放缓冲区中的一个RLC SDU;⒂暂停/继续功能,该功能用于暂停和继续数据的传输;⒃重建功能,该功能用于重建一个确认和非确认模式的RLC实体;⒄高层数据分段或连接成为固定长度的分组,第三代移动通信系统能够传输不同性质、不同速率的多种业务,而在物理层传输的数据包的长度是相对固定的,RLC层根据物理层的数据传输格式,将来自高层的大小不等的数据包(SDU)分段或连接成为固定长度的分组(RLC PDU)。
图1 RLC子层的总体模型
Fig 1 Overall model of RLC
RLC层消息利用透明模式(TM)、非确认模式(UM)和确认模式(AM)等3种数据传输方式,为不同类型的业务提供不同的传输通道。其中,AM传输方式以一套较复杂的机制提供数据的可靠传输,并且使高层可以通过对AM实体参数的不同配置,获得更高级别的QoS控制;非确认模式的RLC实体和透明模式的RLC实体即可作为发送RLC实体也可以作为接收RLC实体。发送RLC实体发送RLC PDUs,接收RLC实体接收RLC PDUs,而确认模式的RLC实体则由发送端发送RLC PDUs的AM实体和接收端接收RLC PDUs的AM实体组成。RLC子层的总体模型如图1所示。
2、RLC层消息解码关键原理
对于RLC层的解码,主要考虑下面几种功能对解码所具有的普遍性影响:①RLC层支持分段和重组功能,在发送端将根据RRC建立时候的传输格式集等的指示对高层PDU分段,使之成为较小的PDU,并在接收端重组、解码时考虑到一条逻辑信道中的传输数据是在一个高层PDU依次传输,而需要对其重组;②RLC层支持串接功能,当一个RLC SDU的内容不能填满一个RLC PDU时,下一个RLC SDU的第一段可能放在该RLC PDU中,与前一个RLC SDU的最后一段连接在一起,解码时将依靠解出的LI(长度指示)的内容来具体分析串接数据的结构,并对其进行处理;③RLC具有填充功能,解码时也可以依据LI来做出判断处理。此外,其他功能造成的解码问题由于不具有普遍性,我们只是在解码中对具体问题具体分析。
RLC层为高层(RRC,PDCP,BMC)[11]提供的数据传输服务有3种模式:透明模式、非确认模式和确认模式。他们的传输的消息结构如图2所示。
图2 RLC PDU格式
Fix.2 RLC PDU format
图2给出了RLC PDU的3种传输模式中所包含的各个字段,这些字段都是解码程序模块设计及实际运行需要的,下面对部分关键的RLC头包含的字段做出如下解释[9]:①D/C字段,占用1 bit,对于数据PDU,D/C字段值为1;②SN字段,在UM PDU中占用7 bit,在AM PDU中占用12 bit,表示PDU传输的序列号;③HE,E字段,指示下一字段是要传输的数据还是RLC头中的长度指示,其中HE占用2 bit,E占用1 bit;④P字段,轮询比特;用于请求对等端发送状态报告,0表示不请求状态报告,1表示请求状态报告,占用1 bit;⑤LI字段,是长度指示字段[9],该字段在解码函数模块中非常重要,其字段提取的正确性是解码能否成功的保证。
长度指示用来指示在PDU中每个RLC SDU结尾的最后一个八位组。除了保留专用目的的预定义值外,长度指示为:从RLC头的末尾直到一个RLC SDU片断最后一个八位组之间的八位组数目,包括在他们涉及的PDU中。长度指示大小为7 bit或者15 bit,其长度指示大小由上行和下行独立决定。对于UM和AM PDUs,长度指示值不能超过(PDU的值—RLC头)指示的值。涉及相同PDU的长度指示万一重发也不重新安排,和他们涉及的RLC SDUs有相同的顺序。
(1)对AM模式的长度指示。如果AM PDU大小模式≤126 octets,则用7 bit长度指示,否则使用15 bit长度指示。对于一个RLC实体,长度指示的大小总是和所有的AM PDUs相同。其他具体意义和UM模式相似。
(2)对于UM模式的长度指示。如果最大UM PDU大小模式≤125 octets,则使用7 bit长度指示,否则使用15 bit长度指示。在"最大UM PDU大小"模式中,长度指示的大小都和所有的UM PDUs相同。如果RLC SDU开始于RLC PDU的开头,并且RLC PDU在上行链路传输,而且在先前的RLC PDU中,指示的RLC SDU尾部恰好在最末端,或者是一个八比特组的"长度指示"(仅当15 bit长度指示被使用)不存在。此时,如果使用7 bit长度指示,长度指示值为111 1100;如果使用15 bit长度指示,值为111 1111 1111 1100。
(3)在下行链路的情况。①如果使用7 bit长度指示,接收端将会准备收到值为111 1100的长度指示;当值为111 1100的长度指示存在和当它不存在时,接收端会根据接收到的UMD PDU更新VR(US),如果VR(US)更新的步骤不等于1(例如一个或者多个UMD PDUs没收到),则丢弃拥有这个片断的SDU或者是在这个没收到的UMD PDUs中的指示到这个SDUs的尾端的长度指示。②如果使用15 bit的长度指示,接收端将准备接收到的值为111 1111 1111 1100的长度指示;当值为111 1111 1111 1100的长度指示存在和不存在的时候,接收端会根据接收到的UM PDU更新VR(US),如果VR(US)更新的步骤不等于1(例如一个或者多个UM PDUs没收到),则丢弃拥有这个片断的SDU,或者在这个没收到的UM PDUs中的指示到这个SDUs的尾端的长度指示。上述2种情况中,RLC SDU片断的末端恰好是PDU的末端,这就没有对RLC SDU的长度指示。③如果用7 bit长度指示,值为000 0000的长度指示将用在下一个PDU的第一个长度指示上。④如果用15 bit长度指示,值为000 0000 0000 0000的长度指示将用在下一个PDU的第一个长度指示上。这种情况,若一个PDU包含一个15 bit长度指示指示一个RLC SDU末端,而PDU只剩下一个八位组,则PDU最后一个八位组将由发送端填充,并由接收端忽略,没有长度指示指示这个额外的填充,并且PDU最后一个八位组不填充到下一个SDU数据的初始八位组。
在以上情况下,PDU中使用15 bit长度指示,一个RLC SDU的最后一个片断是一个刚好填充PDU的短八位组,即,①如果下一个PDU用15 bit长度指示,值为111 1111 1111 1011的长度指示将用在下一个PDU的第一个长度指示上,当前PDU的剩余一个八位组将被发送端填充,被接收端忽略,而且没有指示额外填充的长度指示;②如果下一个PDU使用7 bit的长度指示,RLC配置为UM模式,值为000 0000的长度指示将用在下个PDU的第一个长度指示上,并且传输前,它的序列号将会增加2。
如果RLC PDU使用7 bit的长度指示,在RLC PDU中最后一个RLC SDU的末端有一个或者多个填充八位组,则用PDU最后的值为111 1111的长度指示值来指示存在的填充。同样,如果RLC PDU使用15 bit长度指示,在RLC PDU中最后一个RLC SDU的末端由一个或者多个填充八位组,则用PDU最后的值为111 1111 1111 1111的长度指示值来指示存在的填充(注意:在长度指示指示的存在RLC PDU内含的填充后,填充的长度可以为0)。
如果长度指示在等待发送,而没有用到RLC SDU,一个由这个长度指示、适当填充长度指示和填充组成的RLC PDU将会被传输。
长度指示预定义值用来指示填充。长度指示为7 bit和15 bit情况的保留值在表1和表2中列出,仅有预定义长度指示值能指示填充空间,这些值仅用于其他对PDU的长度指示值之后。
表1 长度指示为7 bit情况的保留值
Tab.1 Retention value when LI denotes 7 bits
表2 长度指示为15 bit情况的保留值
Tab.2 Retention value when LI denotes 15 bits
状态PDUs能够在AMD PDU中使用部分或者全部填充空间被捎带。一个预定义长度指示值将用来指示捎带状态PDU,这个长度指示值代替了填充长度指示,捎带状态PDU直接附加在PDU数据之后。当只有部分填充空间被使用时,捎带状态PDU的尾端有一个SUFI域NO_MORE或者ACK指示,所以没有额外长度指示来显示这里还有填充。
如果配置了外在信令的SDU丢弃,则一个AMD PDU能包含最大数字为15的长度指示来指示对应的的15个PDU,AMD PDU剩余空间将填充或者是捎带状态PDU。不同的模式有不同的SDU传输结构,所以将根据模式的不同采用不同的解码方法如下。
(1)透明模式,在一个TTI中传输且仅传输一个上层SDU,且本层SUD传输时不添加RLC头结构,对于本层的SDU来说,它只是上层PDU的部分或者全部数据,因此方法比较简单,只需要将其在TTI中传输的数据按照传输顺序串接起来就可以形成一个完整的上层PDU数据,可直接供上层使用或者上层解码使用。
(2)非确认模式,发送端通过UM-SAP从高层接收SDU后,将根据UM参数指示进行SDU分段或者串接,然后添加RLC层控制信息头,进行传输。解码程序中将先解出RLC层控制信息头的信息,然后根据头信息中的LI等信息进行分析研究,对后面的PDU数据进行分段(如果传输时候有串接情况)和串接(如果传输时候有分段情况)处理。
(3)确认模式的数据PDU传输的情况,从解码的角度来看,其传输方法也和非确认模式类似(控制信息头稍有不同,解码时指针的移动大小稍不同;数据最后可能有捎带状态PDU,可对其采用确认模式的、控制PDU的解码方法),也可以采用确认模式的方法进行解码,确认模式的控制PDU解出PDU头信息后,采用循环的方法对若干个超域(SUFI)进行解码。
3、RLC层消息解码算法分析
我们主要对TM模式、UM模式、AM模式的解码算法进行分析,其各个算法流程如图3,图4,图5所示。
图3 RLC层TM消息解码算法流程图
Fig.3 Arithmetic for RLC TM decode
图4 RLC层UM消息解码算法流程图
Fig.4 Arithmetic for RLC UM decode
图5 RLC层AM消息解码算法流程图
Fig.5 Arithmetic for RLC AM decode
(1)对于TM模式传输的消息解码,其算法相对简单,解码时候只需要根据一个TTI指示的接口函数做出判断,将同一个TTI的消息片断按照接收次序组装起来,是一个完整上层消息,可送入上层解码。
(2)对于UM模式传输的消息解码,首先判断PDU的长度,然后指针从头开始,按照消息结构提出PDU消息头的各个特征片断(如SN,LI等)的数据,并用一个数据结构存储其值,同时指针根据特征片断的长度向后移动,消息头解码结束后,根据消息头中LI和指针的继续移动,对SDU或者SDU片断进行处理,分别进行组装或者提取后,形成完整的上层SDU送入上层。对于SUD片断,需要数据结构对其暂时存贮,我们可使用容器或者链表等进行处理。
(3)对于AM模式传输的消息解码,首先指针指向第一比特,判断是数据PDU还是控制PDU,如果是数据PDU,可参照UM模式解码算法,需要注意的是PDU的填充可能有捎带状态PDU,可将其数据提取出来,按照控制PDU的算法进行处理;如果是控制PDU,可使指针按照消息结构各个特征片断的长度进行移动,并解码,需要注意的是,控制PDU中的SUFI可能有多个,我们可使用循环处理的方法进行处理。
4、解码测试程序分析
测试程序使用Visual C++语言编写,在VC环境中经过编译、连接之后,执行程序就会出现如图6所示的对话框,提示选择所需解码模式。键入解码模式后,屏幕提示输入所需解码的PDU长度,输入数据采用16进制表示,最后,程序会提示输入代码的内容。
UM模式中没有长度指示的解码示例,程序运行结果如图7所示,输入的数据长度是0x04,内容是0x2a,0x78,0x98,0x22。
图6 输入代码
Fig.6 Input code
图7 无LI的解码结果
Fig.7 Decode result without LI
UM模式中有一个长度指示的解码示例,程序运行结果如图8所示,输入的数据长度是0x04,内容是0x03,0xf8,0x99,0x88。
图8 长度指示LI为0x7C的解码结果
Fig.8 Decode result with LI 0x7C
图8为LI是0x7c情况的解码示例,此情况可用于判断SDU第一个片断的开始。根据PDU的格式,序列号取前7 bit,即SN=(1)16=(1)10,扩展比特为下一比特,即E=(1)16而根据E比特的含义可知:当其为1时,下一字节为LI和E,因而程序进入有长度指示的解码部分。又因为本程序只涉及了LI为7 bit的情况,所以下7 bit为LI,即LI=(1111100)2=(7C)16=(124)10此时下一比特为0,即E=(0)16,表示下一字节为数据。
UM模式中有LI1和LI2 2个长度指示的解码示例,2个LI都为普通值的情况,输入长度为0x07,内容为0xed,0x05,0x06,0x44,0x55,0x66,0x77的代码,其运行结果如图9所示。
图9 LI1=0x02,LI2=0x03的解码结果
Fig.9 Decode result with LI1=0x02 and LI2=0x03
UM模式中有3个及其以上LI的解码示例,LI1-0x7c,LI2,LI3,LI4,LI5为普通值的情况,输入变量为0xed,0xf9,0x05,0x07,0x09,0x0c,0x11,0x22,0x33,0x44,0x55,0x66,长度为0x0c,其运行结果加图10所示。
图10 LI1=0x7c,LI1,LI2,LI3,LI4为普通值的解码结果
Fig. 10 Decode result with LI1 0x7c and other
利用测试程序还可以测试其他模式以及其他所有因为LI不同而形成的不同类型的PDU。经大规模测试,程序解码正确,算法合理。
5、结束语
RLC层信令的解码和组装是测试仪中通过Iub口测试Uu口消息信令的关键一步,它在MAC层解码基础上,将信令消息进一步解析并组装或者拆分,形成完整的上层消息,其中,根据解码后的RLC消息头进行信令消息的组装是其中的难点,我们经缜密思考做出上述解码算法,还使用Visual C++语言对RLC层消息解码部分进行了编程。该程序dll模块已经应用到"重庆邮电大学TD-SCDMA网络测试仪"中,测试其效果良好。目前已经准备再次改进,力争尽早达到TD-SCDMA市场应用的各种要求。
参考文献
[1] 李小文,李贵勇,陈贤亮.TD-SCDMA第三代移动通信系统、信令及实现[M].北京:人民邮电出版社,2003.
[2] 3GPP TS?23.110 V4.0.0 UMTS Access Stratum;Services and Functions[EB/OL].(2001-04-11)[2006-10-11].http://WWW.3gpp.org/ftp/Specs/archive/23_series/23.110/23110-400.zip.
[3] 3GPP TS?25.401 V4.6.0 UTRAN Overall Description[EB/OL].(2003-01-03)[2006-10-10].http://WWW.3gpp.org/ftp/Specs/archive/25_series/25.401/25401-460.zip.
[4] 3GPP TS 25.430 V4.4.0 UTRAN Iub Interface.General Aspects and Principles[EB/OL].(2002-10-03)[2006-10-11].http://WWW.3gpp.org/ftp/specs/archive/25_series/25.430/25430-440.zip.
[5] 3GPP TS 25.431 V4.0.0 UTRAN Iub Interface.Layer 1[EB/OL].(2001-04-06)[2006-10-11].http://WWW.3gpp.org/ftp/Specs/archive/25_series/25.431/25431-400.zip.
[6] 3GPP TS 25.432 V4.0.0 UTRAN Iub Interface.Signalling Transport[EB/OL].(2001-04-06)[2006-10-12].http://WWW.3gpp.org/ftp/specs/archive/25_series/25.432/25432-400.zip.
[7] 3GPP TR 25.990 V3.0.0 Vocabulary for UTRAN [EB/OL].(1999-10-13)[2006-10-12].http://WWW.3gpp.org/ftp/Specs/archive/25_series/25.990/25990-300.zip.
[8] 3GPP TS 25.301 V4.4.0 Radio Interface Protocol Architecture[EB/OL].(2002-09-18)[2006-10-14].http://WWW.3gpp.org/ftp/Specs/archive/25_series/25.301/25301-440.zip.
[9] 3GPP TS 25.322 V4.12.0 Radio Link Control(RLC)protocol specification[EB/OL].(2004-06-17)[2006-10-18].http://WWW.3gpp.org/ftp/specs/archive/25_series/25.322/25322-4co.zip.
[10] 3GPP TS?25.321 V4.10.0 Medium Access Control (MAC)protocol specification[EB/OL].(2004-06-17)[2064-10-17].http://WWW.3gpp.org/ftp/Specs/archive/25_series/25.321/25321-4a0.zip.
[11] 3GPP TS?25.331 V5.8.0 Radio Resource Control (RRC)protocol specification[EB/OL].(2004-03-24)[2006-10-21]. http://WWW.3gpp.org/ftp/specs/archive/25_series/25.331/25331-580.zip.
作者:龚珏 雒江涛 张治中 来源:重庆邮电学院学报
上一篇:IP网络及其QoS技术发展研究(中)
下一篇:IP网络及其QoS技术发展研究(下)