基于DSP的WMGCP协议栈的设计与实现*
2011-06-03郭翠娟苗长云武志刚
郭翠娟,苗长云,武志刚
(天津工业大学 信息与通信工程学院,天津300160)
随着Internet和语音压缩技术的发展,针对传统电话网通话成本高的弊端,人们提出了VoIP(Voice over Internet Protocol)技术,该技术可将语音数据在分组交换网络中传输,提供比传统业务更多更好的服务,并大大降低了语音业务的成本。目前主流的VoIP协议包括1998年ITU-T提出的H.323协议族、1999年由IETF定义的会话初始协议SIP(Session Initial Protocol)和媒体网关控制协议MGCP (Media Gateway Control Protocol)标准。MGCP协议是在吸收H.323经验的基础上。
目前国内外基于MGCP协议的开发仍较有限,伴随着VoIP的不断发展,开发能够处理MGCP通信信令的协议栈以及在协议栈基础上开发MGCP的应用越来越受到人们的关注。然而通常MGCP协议主要是由软件实现的,在具体实现过程中要耗费大量的CPU处理时间,处理速度比较慢,而通过硬件实现协议栈则可以大大减轻系统的网络处理负荷。本文基于嵌入式操作系统,采用DSP实现了改进的MGCP协议——WMGCP协议的设计。该协议使运行于局域网的VoIP电话通信系统在完成基本呼叫控制的同时还能实现群呼、全呼和扩音呼叫,并使信令传榆和交换过程简单、系统运行稳定,节省了系统资源、降低了系统成本。
1 MGCP协议简介
MGCP协议由简单网关控制协议(SGCP)和IP设备控制规范(IPDC)融合而成,是一个分布式IP电话网关系统的内部协议,用于控制来自外部呼叫控制单元的IP语音(VoIP)网关[1-2]。MGCP定义了媒体网关控制器(MGC)和媒体网关(MG)之间的操作。MGC又可称为软交换或呼叫代理 (CA-Call Agent),主要负责处理控制信令,根据接收到的信令控制媒体网关的连接建立和释放。MG对应的媒体网关包括中继网关(TG)、接入网关(AG)和接入设备(IAD)等,分别负责桥接相应类型的网络。MGCP的要点是对网关命令的发布,以及网关在这些命令上的操作和发送返回信号。这些命令的目的是控制网关中连接创建和终止的操作,并使呼叫代理了解到发生在网关端点上的事件。
MGCP协议消息采用UDP协议传送,以加快消息传送速度。但由于UDP本身只能提供不可靠的传送服务,所以MGCP采用了重发定时机制、“至多执行一次”功能、消息捎带机制和临时响应机制,以保证消息的可靠传送和正确处理[3]。MGCP协议消息分为命令和响应两类,每个命令需要接收方回送响应,并采用“三次握手”方式证实。基于MGCP的VoIP电话网关系统如图1所示。
2 协议需求分析
本VoIP电话通信系统应用于石油、化工和煤炭等生产企业的生产调度,它利用企业现有的局域网络实现网内和网间电话通信,用户间可以实现单呼、群呼、全呼和扩音呼叫。该系统采用的媒体网关控制协议是改进的MGCP协议—WMGCP协议,系统由电话终端、呼叫控制器MGC、中继网关TMG和网管系统组成,系统组成框图如图2所示。其中,电话终端中实现了MG和电话机功能,简化了系统结构;TMG负责与外部PSTN电话网络的对接;网管系统负责电话通信系统的网络管理;呼叫控制器(MGC)内部包含了MGCP服务器,提供了基本的呼叫控制业务;IP分组传输网为局域网[4]。
在MGCP协议中,规定了呼叫方网关、呼叫代理和被呼叫方网关间的所有交互命令和消息,而要实现这一整体协议过程,需要一定的软件资源和硬件条件。本系统采用TMS320C5402芯片实现MGCP协议栈,由于DSP系统资源有限,因此需要对MGCP协议进行改进。考虑本局域网VoIP系统的实际需求后,从以下几方面进行改进:
(1)由于系统容量较小,电话终端的IP地址与电话号码有固定的计算关系,所以设计时将IP地址与电话号码绑定,不需要庞大的映射表。
(2)语音的编解码方式指定为G.711A率,因此不需要设计EPCF程序。
(3)每一个 MG上只有一个终结点(电话机),MG和MGC记录的终结点状态和连接认为是同步的,因此呼叫控制器(MGC)不需要通过审计终结点命令查询 MG特定终结点的状态和检查指定连接的各种信息,所以不需要设计AUEP和AUCX程序。
(4)在完成一对一呼叫的同时,协议中增加了扩音呼叫、群呼及全呼控制,增加了系统功能。
改进后的WMGCP协议栈既实现了MGCP协议的基本功能,又减少了设计上的复杂程度,同时由于上层协议(如UDP等)的设计相对独立,对其影响也非常小。
3 WMGCP协议的设计
3.1 分层设计
WMGCP协议采用分层设计,与RFC2705中定义的分层结构略有不同[2]。按照系统中WMGCP消息的实际处理过程将层次分为:传输适配层,编、解码层,事务层和应用层API。它们在垂直方向上有明显的上下层关系,实现自上而下的调用。分层结构如图3所示。
传输适配层调用UDP套接字发送WMGCP数据,或者从UDP层接收WMGCP数据。WMGCP协议端口默认值为2427/2727。
编、解码层用于实现WMGCP消息的构建和解析。WMGCP消息的构建是指将事务层提供的WMGCP事务结构格式按照需要生成起始行、头域和消息体等有用信息,并将这些信息转换成WMGCP协议消息格式。WMGCP消息的解析是指将WMGCP协议消息解码为WMGCP事务结构,提供给WMGCP事务层。
事务层负责创建和取消事务,处理各种WMGCP命令和响应,维护事务状态机。WMGCP协议是事务型协议,采用事务号来标识和定位每个命令消息。WMGCP协议提供 6种命令消息,分别是:RQNT、CRCX、DLCX、MDCX、NTFY 和 RSIP。 其 中 RQNT、CRCX、DLCX、MDCX 4种命令可以由软交换发起;NTFY、DLCX、RSIP 3种命令可以由MG发起。同时,WMGCP协议提供响应消息,通过响应消息的响应码可以对收到的命令进行正确响应或者错误响应。
应用层API向WMGCP任务提供各种会话的控制API,用于完成摘机、应答、挂断、保持等事件引发的MGCP处理。
3.2 状态机
电话终端的状态采用状态机的方法实现[5]。本系统就是通过事件和消息的触发来改变状态机的状态。事件是指对电话产生的动作(如摘机、拨号、挂机等);消息是指系统进行状态转换时发出的命令、请求、响应等信号。主叫与被叫分别维护各自的状态机。
主、被叫状态转移图分别如图4、图5所示。在空闲状态下,主叫用户摘机,MG向MGC报告,MGC通知MG向主叫送出拨号音;主叫用户拨号,MG号码收齐后向MGC报告;MGC进行号码分析,如号码为单呼号码且被叫用户已经注册并处于空闲状态,则向被叫MG发出连接命令,连接形式为“只接收”;MGC收到被叫MG的响应后,向主叫MG发出连接命令,连接形式为“只发送”,此时为扩音态,主叫用户即可通过媒体端口向被叫用户发送语音;被叫用户摘机,被叫 MG向 MGC报告,MGC向主被叫双方MG发送修改连接命令,连接形式为“发送和接收”;通话完毕,任一方挂机,向 MGC报告,MGC向挂机方发出删除连接命令,将其状态置为空闲,向另一方发出删除连接命令,并要求其送出忙音,等其挂机后,将其状态也置为空闲。如果被叫处于扩音状态,主叫挂机,MGC向双方发送删除连接命令,并将双方状态置为空闲。如果所播号码为群呼或全呼组号,则MGC依次向属于该群组的用户或全部用户发送创建连接命令,连接方式为“只接收”。此时MGC只需得到其中一个用户的应答就向主叫发送创建连接命令,连接方式为“只发送”;主叫用户使用广播分组发送语音数据,网络上所有终端均接收这个分组,但只有处于被叫连接状态的终端才处理这个分组。
4 精简MGCP协议的实现
4.1 基于DSP的工作方式
本系统的DSP为TI公司的TMS320VC5402 16位定点处理器芯片,其采用哈佛体系结构、流水线技术和独立的硬件乘法器,操作速度最高为100 MIPS。TMS320VC5402内部有16 KB的SRAM,一部分用于引导Flash程序的运行,另一部分用于堆栈、存放中断向量、DSP中DMA模块所需的数据和少量常用变量;片外数据和指令的可存、取空间分别为64 KB和1 MB,分别采用了SST39VF400A Flash和IS61LV25616 SRAM存储器;实际运行时可执行的指令和数据分别为64 KB。TMS320VC5402的处理速度完全可以满足系统的运算要求,非实时性的MGCP协议栈指令可以在片外Flash上运行,数据在片外SRAM上运行,其瓶颈在于可执行的指令和数据空间受限。本系统采用的网络芯片为DM9000,设置为100 Mb/s网速、16 bit数据收发模式和全双工工作方式。
在 16 bit DSP中,文本数据存储占用低 8 bit,高 8 bit补0,造成50%数据带宽的浪费。本系统采用16 bit存储方式,即每两个文本数据合并成一个 16 bit数据,奇数字节放在高 8 bit,偶数字节放在低 8 bit,数据带宽利用率接近100%。MGCP消息由很多信息段组合而成,这些信息段既有按照文本方式存储,也有些按照16 bit字段方式存储,MGCP消息的构建需要调用8 bit/16 bit转换函数,最终生成的MGCP消息是由16 bit存储的。
MGCP消息的解析采用 “懒汉”算法,即将收到的MGCP消息按照起始行、头域和消息体等内容拆开并分别存储。在解析时对每部分内容分别解析,获取其中有用的信息。
4.2 WMGCP任务
在TMS320C5402 DSP上使用μC/OS-Ⅱ操作系统建立WMGCP任务。WMGCP任务通过接收操作系统消息调用相应WMGCP协议栈应用层API,包括:WMGCP_Register()用户注册消息;WMGCP_RSIP()重启命令;WMGCP_RQNT()通知请求命令;WMGCP_NTFY()通知命令;WMGCP_CRCX()创建连接命令;WMGCP_MDCX()修改连接命令;WMGCP_DLCX()删除连接命令;WMGCP_RESP()响应命令;WMGCP_UDPHandle()解析UDP上传的MGCP消息;WMGCP_TimerHandle()负责协议栈计时处理。以上WMGCP协议栈应用层API由WMGCP任务消息触发,WMGCP任务在完成某一函数调用后,通过OSQPend()等待新的消息到来。
4.3 实现尺寸
本文实现了应用于局域网VoIP的WMGCP协议栈,在TMS320C5402芯片上编译的数据和代码如表1所示。WMGCP协议的全部代码在片外Flash中运行,所有数据在片外SRAM中运行,运行速度满足要求。
表1 WMGCP协议栈所需数据代码量
本文针对TMS320C5402的特点设计实现了运行于局域网VoIP的WMGCP协议栈,该WMGCP协议栈既能够满足基本呼叫功能,又能够实现群呼、全呼和扩音呼叫,实现了局域网VoIP电话通信系统的应用。实验结果表明,本文设计实现的精简MGCP协议栈具有良好的运行稳定性。
[1]GOKULAKRISHNAN T, LEFFEW J,SHREINIVASAN S,et al.Standardizing call control in voice over internet appplications:A MGCP approach[C].Fourth IEEE International Caracas Conference on Devices:Circuits and Systems,Aruba,2002:91-111.
[2]Network working group.Media Gateway Control Protocol Version1.0 RFC2705[S],1999.
[3]GREENE N.Media gateway control protocol architecture and requirements[S].RFC2805,2000.
[4]Network working group.Megaco Protocol Version 1.0 RFC3015[S].2000.
[5]ANDREASEN F,FOSTER B.Media gateway control protocol version 1.0[S].RFC3435,2003.