王 亢,徐志江,阮正杰
(1.浙江警察学院计算机与信息技术系,浙江杭州310053;2.浙江工业大学信息工程学院,浙江杭州310032)
基于Twisted架构的GPS协议转换软网关
王 亢1,徐志江2,阮正杰2
(1.浙江警察学院计算机与信息技术系,浙江杭州310053;2.浙江工业大学信息工程学院,浙江杭州310032)
提出了一种服务器端可扩展的基于SIP协议的GPS设备协议转换软网关架构,以解决不同厂商GPS设备私有协议而导致的兼容性差、服务器端软件复杂等问题.软网关基于Python的Twisted开源网络框架构建,保证了软件的健壮性和代码的简洁性.软网关采用SIP协议对通信会话过程的统一管理,从而分担了服务器解析不同私有协议的系统开销,简化了服务器端软件的复杂性,同时加强了通信会话管理与多媒体数据扩展能力.
协议转换;SIP协议;Python;Twisted网络框架
近年来,伴随着GPS技术的成熟,目前不少设备厂商对GPS设备进行了一定深度的开发,对GPS功能进行了扩展.其中较为常见的是,当GPS设备与服务器通信会话时,不再是发送简单的定位数据报,而是对其进行了私有协议下的数据封装,有时还整合了额外数据,最后上传服务器[1-2].但是在车载定位、录像采集、车辆管理等大应用数据整合的背景下[3],目前已有车载GPS设备与服务器之间进行通信会话管理和数据交互时,往往采用自身私有协议.不同的GPS设备有不同的通信协议,一个运营商拥有多个不同厂家的GPS设备,这导致了兼容性差、服务器端软件复杂、扩展不便等不足.这使得设备在与服务器通信过程中,需要解析处理不同协议报文,对运营商的管理造成困难.因此,在车载GPS设备与服务器会话过程中,通过某种会话管理协议,对不同类型协议类型数据进行统一管理显得十分重要.
针对以上问题,笔者设计了一种在设备与服务器之间架设的协议转换软网关,将不同私有协议数据报文转换为统一的SIP(Session initiation protocol)协议报文.该软网关基于由纯Python语言的Twisted开源网络框架编写,将SIP协议引入GPS设备与服务器之间的通信会话[4],从而解决由于设备私有数据格式协议带来的诸多问题,同时也为现有多媒体应用中,如音视频会话,常使用RTP/ RTCP等通信协议预留了扩展空间[5].
1.1 SIP协议会话控制
SIP协议是由IETF制定的一个应用层的控制协议,可以用来建立、修改和终止多媒体会话.通过与RTP/RTCP,SDP,RTSP等协议及DNS配合,SIP协议支持语音、视频、数据等,并已经取得了广泛的应用[6].因此加入SIP协议管理很好地满足了车载GPS设备与服务器通信的需求.为了对多种车载GPS设备进行统一会话管理,采用架设协议转换软网关的方式,对设备与服务器通信过程中的会话进行设备私有协议与SIP协议的转换,避免了设备端的软硬件修改,既保证了设备平台的兼容性,又保证了服务器会话管理的统一性、扩展性.
1.2 软网关构架方案
车载GPS设备,上传至服务器的信息,既可以通过GPRS,也可以通过短信.由此可见,每条信息一般在140字节之内.虽然每条信息的数据量少,但需要可靠上传至服务器,因此大多采用TCP协议.同时,为了节省设备上网数据流量和减轻服务器和数据库的压力,车载GPS设备每次上报至服务器的时间间隔较长且可变.设计的软网关采用了Python语言的Twisted网络编程框架.Python语言具有简洁、跨平台等优点,Twisted是一种基于异步I/O的事件驱动开源网络框架.利用Twisted中的Server-Factory/Protocol架构,该架构进行多个TCP连接处理的优点在于既避免了分叉(forking)方案消耗内存大,局限于UNIX/LINUX平台的缺点,也克服了纯粹的线程(threading)方案不同连接之间共享内存,易造成内存变量读写冲突的不足,保证了该软网关的可靠性与有效性[7].
由于SIP协议本身包含了会话层的握手过程,因此在与服务器的会话过程中,在传输层上采用UDP协议即可8-9.图1为设计实现后的车载GPS设备协议软网关的网络框架结构.
图1 车载GPS协议转换软网关网络框架Fig.1 Soft gateway network framework of Vehicle GPS device protocol conversion
2.1 数据报文处理总流程
软网关采用Twisted开源网络框架编写.Twisted是用Python实现的基于事件驱动的网络引擎框架,具有可扩展性高、基于事件驱动、跨平台等优势,并且Twisted支持许多常见的传输及应用层协议,包括TCP,UDP,SSL/TLS,HTTP,IMAP,SSH,IRC以及FTP.Twisted的核心就是reactor事件循环.Reactor可以感知网络、文件系统以及定时器事件.它等待然后处理这些事件,从特定于平台的行为中抽象出来,并提供统一的接口,使得在网络协议栈的任何位置对事件做出响应都变得简单.
软网关采用Twisted中的Server Factory/Protocol架构,其中Server Factory的工作是管理连接事件,并且创建Protocol对象处理每一个成功的连接.一旦连接建立,Protocol对象就接管下面的工作了,包括收发数据和决定是否关闭连接.图2为软网关在处理车载GPS数据报文的流程.软网关reactor.run()之后,在设定的TCP端口等待车载GPS链接请求,其中:Server Factory派生出Dev2GateFactory对象单元,用以负责Protocol派生出的Dev2GateProtocol对象的管理、会话管理的方法实现、数据库读写接口;Dev2GateProtocol对象单元,用以负责软网关与每个GPS设备TCP连接超时管理、数据报文解析校验、启动/停止模拟设备、私有协议与SIP协议转换,转发设备请求/响应等网络处理的方法实现[10];Simu_dev对象单元,用以负责实例化软网关中对应车载GPS设备的模拟设备.通过该模拟设备,实现设备与服务器之间会话的具体方法.
2.2 报文接收处理设计
当车载GPS设备首次接入软网关时,此时软网关未知设备是否合法,所以先需要对其进行认证.只有通过认证的GPS设备,才能予以接入和提供服务.为此,先对私有协议数据报进行预解析,提取设备序列号、密码等验证信息.软网关采用sqlalchemy中间件,访问数据库,对接入设备进行数据库校验.如果验证未通过,则拒绝服务,断开与设备的TCP链接;如果验证通过,为合法设备,则记录设备信息,在整个会话结束之前,不再需要访问数据库,直接提供协议转换服务.
图2 软网关工作流程图Fig.2 Work flow chart of soft gateway
车载GPS设备在某些情况下可能突发数据,导致服务器负荷增大,降低响应速度.为了解决这个问题,在程序中添加了一个列表用于车载GPS上发数据的缓冲存储和基于defer To Thread的定时发送机制.具体而言,在数据接收处理事件dataReceived()中,把接收到的车载GPS设备上发数据添加到列表中,该事件调用函数defer To Thread()进入延迟对象Deferred子线程中,按照设定的时间间隔,定时从列表缓存中读取处理私有协议报文,经私有协议解析和SIP协议转换之后发送至服务器.由于采用了Deferred对象,并通过函数Deferred.callback()回调,该函数中的阻塞行为不会阻塞dataReceived()事件的快速退出.这种缓存和定时机制,保证了当大量突发设备上发数据时可以将服务器负荷控制在安全范围内.
由于纯Python脚本语言在处理字节或者比特上效率明显不足,而C语言有这方面的优势,因此私有协议解析函数采用C语言编写,再通过扩展接口Python可以调用.加入了C语言扩展模块后,一方面加快处理速度;另一方面不同的私有协议采用不同的动态链接库DLL(Linux中为so文件),隐藏了私有协议的具体解析细节,加强了协议的保密性.
以函数QCdev2ser()为例,C语言函数QC-dev2ser()扩展接口[11]如下:
//从Python中获得调用函数Qcdev2ser()传入的字符串
//具体的基于字节/比特的私有协议解析和转换,并以字符串的方式保存在ret_str数组中
由于车载GPS设备上发的TCP数据报中可能包含C语言中标志字符串结束的0x00字符,因此Python的C语言扩展接口函数Py Arg_Parse Tuple()中,格式化字符串必须采用“z#”而不能直接用“s”,这是一个关键点.
2.3 报文转发处理设计
为了实现设备与服务器之间的会话过程中的报文转发,必须在每个设备第一次接入时,注册启动模拟设备simu_dev()对象实例.每个GPS设备对应一个模拟设备实例,通过该实例经过UDP链路向SIP服务器发送请求或响应.同时也可以根据需要将服务器的请求与响应转发给GPS设备,以达到建立并完成会话目的.所述模拟设备实例中,实例化sip.Base类对象rvsip_endpoint,模拟设备端点,用于上发服务器设备请求,或者服务器下发指令;实例化sip.Request类对象rvsip_request,用于组成上发服务器的相应SIP协议请求报文.此外,模拟设备还实现了启动心跳包保活,向设备转发服务器请求或响应等功能的方法,从而对GPS设备与服务器之间的会话过程进行有效处理.
由于目前大多数GPS设备与SIP服务器通信目的主要是上传私有协议封装的定位数据.因此可以模拟实现该基本功能,验证该设计的是否能达到其要求.
软网关部署在联通IP地址为123.157.8.243的服务器上,端口为8 000;远程SIP服务器部署在电信IP为122.224.250.36的服务器上,端口为6 060;GPS设备用TCP调试工具(Socket Tool)来模拟.台式机通过TP-Link路由器、电信ADSL拨号上网,本地网络IP为192.168.1.100,外网IP由电信动态分配.软网关服务器和SIP服务器均采用Red Hat Enterprise Linux Server 5.5操作系统(x86 64位),自带Python版本为2.4,Twisted版本为8.2.0,Wireshark版本为1.0.15.GPS模拟设备以TCP client向软网关发送16进制私有协议报文:
“2842390000241038027A030A51680300000107 4536A13013633470A5012001911410A60000200032 090312C5F0CE0000000009B901E240FF00003CFF FF”,其解析内容分析如表1所示.
表1 私有报文解析表Table 1 Private message parsing
在软网关接收到模拟GPS私有报文报文后,通过Wireshark抓包软件,如表2所示,可以观察到软网关在经过TCP三次握手建立连接后,软网关收到私有协议报文.之后软网关首先发送了对应的注册SIP服务器请求报文,并在得到200OK的成功响应后,发送了转换成SIP协议的XML格式报文请求.
表2 Wireshark抓包软件获取的软网关与SIP服务器会话过程摘录Table 2 Session between soft gateway and SIP server captured by Wireshark protocol analyzer
Wireshark抓包软件捕获的对应私有协议报文的转换后SIP协议报文:
消息头:
消息体:
分析Wireshark抓包结果表明:模拟GPS设备向软网关发送私有协议数据,软网关转换成SIP协议后,向SIP服务器发送了正确的SIP协议报文.同时,通过1台PC模拟10台GPS设备,多台PC同时向软网关发送数据,以验证软网关的并发性能,测试表明达到了系统的设计要求.
通过车载GPS协议转换软网关的设计,能够使GPS设备与服务器通信过程中,私有协议与SIP协议的相互转换.该设计在确保不对设备进行大幅软硬件修改前提下,实现在应用层上对利用SIP协议对设备与服务器会话通信的有效管理,既保证了设备平台的兼容性,又保证了服务器会话管理的统一性,扩展性.经过长时间、几百台GPS设备的测试运行表明,设计的软网关架构是可靠、稳定和可扩展的.
本文得到了浙江警察学院科研项目(201206017)的资助.
[1] DUTTA A,MADHANI S,CHEN WAI,et al.GPS-IP based fast-handoff for mobiles[EB/OL].[2003-09-12].http:// www.nyman-workshop.org/2003/program.html.
[2] 毛俊,彭宏,孟利民.基于Django框架的车载定位系统PDF报表下载软件的设计与实现[J].浙江工业大学学报,2012,40(4):446-449.
[3] 曹冲.国内外车载GPS系统的应用现状和发展趋势[J].全球定位系统,2000(1):4-8.
[4] 杨建锋,孟利民.视频监控系统中实时流媒体传输控制方法的设计[J].浙江工业大学学报,2012,40(4):450-453.
[5] 司端锋,韩心慧,龙勤.SIP标准中的核心技术与研究进展[J].软件学报,2005,16(2):235-250.
[6] 互联网工程任务组(IETF).RFC 3261 SIP:session initiation protocol[EB/OL].[2002-07-01].http://www.ietf.org/rfc/ rfc3261.txt.
[7] MAGUS L H.Python基础教程[M].2版.司维,曾军崴,谭颖华,译.北京:人民邮电出版社,2010.
[8] 傅志辉,梁荣华.基于SIP协议远程教学系统模型[J].浙江工业大学学报,2007,35(2):159-162.
[9] 李净,华惊宇,孟利民.SIP协议在GPS中的应用设计[J].有线电视技术,2012(5):51-53.
[10] JOHN G.Python网络编程基础[M].莫迟,译.北京:电子工业出版社,2007.
[11] WESLEY J C.Python核心编程[M].2版.宋吉广,译.北京:人民邮电出版社,2008.
(责任编辑:刘 岩)
Twisted framework based soft gateway for vehicle GPS device protocol conversions
WANG Kang1,XU Zhi-jiang2,RUAN Zheng-jie2
(1.Dept.of Computer and Information Tecnology,Zhejiang Police College,Hangzhou 310053,China;2.College of Information Engineering,Zhejiang University of Technology,Hangzhou 310032,China)
A GPS device protocol conversion soft gateway architecture based on SIP protocol with server-side scalability is proposed in this paper in order to resolve the poor compatibility and complexity of server-side software caused by different protocols from different vendors.The soft gateway is built on the Twisted open network framework based on Python.It ensures the robustness of the software and simplicity of the code.In the soft gateway,the communication session is managed with the SIP protocol and the system overhead for parsing different private protocols can be shared.It also reduces the complexity of the server-side application software,and strengthens the management of the communication session and the expansion capability of multimedia data.
protocol conversions;SIP protocol;Python;Twisted network framework
TP393.04
A
1006-4303(2013)02-0232-05
2012-09-11
浙江省重点科技创新团队项目(2012R10011-03)
王 亢(1978-),女,河南开封人,讲师,研究方向为计算机网络及应用,E-mail:wangkang@zjjcxy.cn.