1、基于CMPP协议的短消息网关设计摘要本文介绍了短信网关(ISMG)在无线互联网短消息业务中所起的重要作用。ISMG为服务提供商(SP)与短消息中心(SMSC)之间的数据交换提供了一条安全、快捷的通道,以便手机用户采用短信方式与SP双向通信,接收SP提供的信息服务。本文提供WINDOWS下统一的编程接口,通过本接口,还开发了SP应用程序(作为客户端连接CMPP网关,进行短信收发)。本课题的主要工作是封装CMPP协议,实现短消息网关的接口程序。接口程序以动态链接库的形式导出API接口类,提供其成员函数和成员变量供SP应用程序调用。CMPP协议API接口是SP客户端应用系统接入短消息网关的通信桥梁。
2、并采用卓越短信网关模拟器对本接口程序进行测试充分验证了短信平台的正确性、稳定性。关键词:短信网关;CMPP;API接口1 绪论1.1 短信业务发展现状及有关业务种类2001年,整个中国的短信发送量不过170亿条,到了2002年猛增到900亿,而去年,又几乎实现翻番,达到2200多亿条,而中国移动短信发送量就达1700亿条。短信在中国互联网市场上的作用举足轻重。在电信运营瓶中,最先推出短信息业务的是中国移动,其“移动梦网”已掘到了市场的第一桶金。如此大的业务量,让中国移动和参与的ICP们尝到了甜头,也使运营商走出传统定格,向众多的应用内容、应用服务提供商提供一个大舞台,实现开放、公平的接入。也正
3、因如此,联通对于短信息业务关注了很长时间。2001年8月1日,中国联通正式推出了其无线数据业务的统一品牌“联通在信”,正式要与“移动梦网”比个高低上下。作为中国最大的电信运营商,中国电信拥有最大的用户群体、强大的网络支撑和丰富的内容服务经验,一旦大规模推出固定短信息业务消息定制类、信息点播类的“移动梦网”业务将会受到较大的冲击,部分业务收入将会被分流1。下面以“移动梦网”为例介绍一下与各SP合作向用户提供的短信信息服务的种类。“移动梦网”提供的短信信息服务种类行信息服务、娱乐服务、位置服务、通信服务和商务服务。1.2 短信信息服务的发展阶段从短信业务的发展来看,短信信息服务的发展经历了下述三个
4、时期:1)第一阶段,短信信息服务的独立发展时期,在此阶段,短信中心是唯一的信息提供者及数据传输通道,造成信息量少,且各短信中心的信息来源不一致。2)第二阶段,短信业务的急剧扩展时期,以互联网上的信息作为短信的主要信息来源,由互联网上的SP直接与各SMSC相沟通,建立信息交换的接口。3)第三阶段,目前短信业务正处在业务发展的第三阶段,其主要的业务特征模式就是依附与原有的手机信息传递方式(短消息),将互联网上的巨大信息量根据用户的要求通过手机的短消息方式传递给用户。这一发展模式,将传统的信息提供与信息服务的合二为一彻底分离,体现了一种传统业务与互联网相结合的发展模式 2 。1.3 本文的内容和研究
5、的意义随着通信技术的发展,无线互联网短消息业务正在为用户提供越来越多的服务。目前,大部分短消息业务的互联互通都是使用短消息网关来实现,主要服务提供商SP与短消息网关之间通过二进制的CMPP(中国移动点对点协议)接口进行信息交换。本文的工作是构建一个编程实现短信息网关接口的简单模型,开发出实现CMPP协议的短信网关动态链按库,并实现SP客户端的短信功能。而且自己开发实现CMPP的好处在于可以用一套平台,只需稍加修改甚至不用修改就可以应用到不同的网关。2 短信网络分析2.1 短信网络概述GSM系统除了提供电路交换的各种电信业务和承载业务外,还提供基于分组交换的短消息业务。短消息(Short Mes
6、sage)是通过移动网络传输的有限长度的文本信息。在GSM网中发送短消息是通过复用信令控制信道SDCCH或SACCH传输的。当话音信道TCH空闲时,短消息采用独立专用控制信道SDCCH传输,当话音信道TCH被占用时,短消息采用慢速随路控制信道SACCH进行传输,由于短消息不占用话音信道,因此,移动用户在处于完全通信状态下,仍然可以进行短消息的传输。2.2 短信网络系统结构短信网络结构如图2-1所示。图2-1短信网络结构SME:短消息实体,它可以接收或发送短消息,位于固话系统、移动基站或其他服务中心内。SMSC:短消息服务中心,负责在基站和SME间中继、储存或转发短消息;移动台(MS)到SMSC
7、的协议能传输来自移动台或朝向移动台的短消息,协议名为SMTP。SMS_GWMS: SMS网关,负责MT类型的业务,接收由SMSC发送的短消息,查询位置归属寄存器HLR获得路由信息,然后经由GSM电路交换网络,将短消息传送给到MS所在的目的拜访移动交换中心VMSC。HLR:归属位置寄存器,用于永久储存管理用户和服务记录的数据库,由SMSC产生。SMS网关与HLR之间的协议使前者可以要求HLR搜索可找到的用户地址。MSC:移动交换中心。负责系统切换管理并控制来自或发向其他电话或数据系统的拨叫。VLR:访问位置寄存器,含有用户临时信息的数据库。交换中心服务访问用户时需要这些信息。BSS:基站系统,是
8、移动终端通过无线信道接入网络的接口。MSC与VLR、HLR、SMS_GWMS之间通过7号信令网承载消息。MSC与BSS之间采用2048kb/s的E1线路承载消息3。2.3 短消息传输过程短消息传输过程可分为移动发起和移动接收过程。2.3.1 移动发起短消息传输过程移动发起短消息传输过程用于将短消息从移动用户(MS)传递给短消息业务中心(SMSC)。图2-2显示了这一过程。图2-2 MS发起短消息1) 移动台(MS)向移动交换中心(MSC)提交短消息;2) MSC访问拜访位置寄存器(VLR)以请求移动台的用户数据;3) VLR向MSC返回移动台的数据;4) MSC将移动台提交的短消息转发给互通S
9、MS网关(SMS IWMSC);5) 互通SMS网关将短消息提交给短信中心(SMSC);6) 短信中心回应确认给互通SMS网关;7) 互通SMS网关回送确认给MSC;8) MSC回应确认给移动台。2.3.2 移动接收短消息传输过程移动接收短消息传输过程用于将一个短消息或多个短消息从短消息业务中心(SMSC)传递给移动用户(MS)。图2-3显示了这一过程。图2-3 MS接收短消息1) 短信中心将短消息发到SMS网关;2) SMS网关向归属位置寄存器(HLR)查询目的手机的路由信息;3) HLR将手机的路由信息返回到归属位置寄存器;4) SMS网关根据返回的路由信息将短信发往手机所在的MSC;5)
10、 MSC向VLR请求手机当前的状态信息;6) VLR向MSC发送命令寻呼目的手机;7) MSC寻呼目的手机;8)手机响应MSC的寻呼,发起接入请求;9)MSC向VLR发送手机的接入请求;10)VLR向MSC回应手机的状态信息;11)MSC将短消息发给手机;12)手机回应短消息、证实消息给MSC;13)MSC将发送成功消息发送给SMS网关;14)SMS网关向短信中心SMSC发送短消息证实 4 。3 短信网关分析3.1 短信网关的引入在短信信息服务第二阶段业务发展的初期,一般采用SP直接与某一个SMSC连接,由SMSC直接通过信令网发送短信给用户的方式。但当SP的短信信息服务业务量很大时,SMSC
11、负荷极大,难以满足业务发展的需要。因此,信息类短信的转发也要求采用GSM网的规范做法。短信网关的应运而生可以将大量SP接入到各地的SMSC上,保证接入的一致性及安全性。3.2 短信网关系统3.2.1 短信网关系统组成短信网关ISMG主要和三个实体相连:(1) 短信服务参与实体服务提供商SP;(2) 短信中心SMSC;(3) 汇接网关GSN。 3.2.2 短信网关系统功能短信网关包括与负责范围内SP进行连接的通讯软件(采用CMPP协议)。与负责范围内SMSC相连的协议软件(采用SMPP协议)。与其他ISMG进行连接的通讯软件(采用CMPP协议)、业务处理软件等。短信网关各组成部分的功能为:(1)
12、SMPP代理系统支持流量控制功能,能够根据SMSC的业务量进行发送流量控制。(2)通信代理系统实现与SP等内容供应商的连接和协议互通。它基于TCP/IP协议基础之上,利用CMPP协议与SP之间建立一条安全、高效的传输通道。(3)防火墙:对短信网关内部其它相关模块进行保护,实现针对内外访问的包过滤和代理。(4)短消息网关处理系统完成网关的业务处理,包括:向汇接网关进行路由查询,在本地建立短信网关ID、计费原始话单的提供及处理等。(5)短信网关计费系统提供短信网关的原始话单记录(CDR)。3.2.3 短信业务流程(1)用户发送短信业务-即MO业务流程;(2)用户接收短信业务-即MT业务。3.3 短
13、信网关应用协议逻辑上,ISMG为SMSC的一个SME实体。它用来转发手机的互联网应用请求,由于GSM网络与互联网络是不同类型的两种网络,因此,在两网之间设置网关ISMG,用来转换协议:采用中国移动点对点CMPP协议与SP进行连接,采用短消息点对点SMPP协议与短信中心连接。从而提供SP与SMSC之间数据交换的通道,达到互联互通。实体之间底层均采用TCP/IP协议,上层使用不同的应用层协议5。3.4 CMPP协议3.4.1 CMPP功能概述CMPP协议主要提供以下两类业务操作:1.短信发送由图34可见需要前转的MO操作需要八个步骤:(1)手机发出数据请求(可能是订阅信息或图片点播等),被源ISM
14、G接收;(2)源ISMG对接收到的信息返回响应;(3)源ISMG在本地查询不到要连接的SP,向GNS(汇接网关)发路由请求信息;(4)GNS将路由信息返回;(5)源ISMG根据路由信息将请求前转给目的ISMG;(6)目的ISMG对接收到的信息返回响应;(7)目的ISMG将请求信息送SP;(8)SP返回响应。在以上操作中,步骤3到步骤8均使用CMPP协议。典型的业务操作如图3-1所示。图3-1 需要前转的MO操作在随后的操作中,目的ISMG在接收到SP的响应后将产生M0状态报告发给源ISMG。2短信接收短信接收是短信发送的逆过程:(1)SP发出数据请求,被源ISMG接收;(2)源ISMG对接收到
15、的信息返回响应;(3)源ISMG在本地数据库中找不到要目的手机号段所对应网关代码,向GNS发路由请求信息;(4)汇接网关将路由信息返回;(5)源ISMG根据路由信息将请求前转给目的ISMG;(6)目的ISMG对接收到的信息返回响应;(7)目的ISMG将请求信息发送至SMC;(8)SMC向目的ISMG返回响应。在上述操作中,步骤1到步骤6均使用CMPP协议6。3.4.2 CMPP通信方式由于CMPP协议是以TCPIP协议作为底层承载,因此,SP与ISMG之间、ISMG之间进行信息交互时,可以采用长连接方式,也可以采用短连接方式。所谓长连接,指在一个TCP连接上可以连续发送多个数据包,在TCP连接
16、保持期间,如果没有数据包发送,需要双方发链路检测包以维持此连接。短连接是指通信双方有数据交互时,就建立一个TCP连接,数据发送完成后,则断开此TCP连接,即每次TCP连接只完成一对CMPP消息的发送。端口号分配如下表所示表3-1 端口号分配表端口号应用7890长连接(SP与网关间)7900短连接(SP与网关间或网关之间)7930长连接(网关之间)9168短连接(短信网关与汇接网关之间)4 基于CMPP协议的短消息收发系统的总体设计4.1 短消息收发系统SP客户端接入方式4.1.1 API接入方式按照目前短消息服务接入实现,服务提供商SP与短消息网关之间通过二进制的CMPP(移动)协议接口或者S
17、GIP(联通)协议进行信息交换,SP必须将消息按照CMPP或SGIP协议来封装,对具体协议实现和消息包格式必须深刻了解。因此,本短消息收发系统为SP客户端以动态链接库的形式提供API接入方式,即将CMPP封装起来并提供一个统一的接口。该方式具有以下优点:(1)为上层应用客户端提供方便统一的短信收发服务;(2)屏蔽底层通信协议,应用客户端不必关心底层的网络通信过程;(3)屏蔽网关生产厂商和运营商,可以用一套平台,只需稍加修改甚至不用修改就可以应用到不同的网关。4.1.2 模拟网关中国移动CMPP模拟器是基于CMPP V3.0 V2.0协议开发的,具有方便易用图形化的界面,专业级协议分析工具,是中
18、国移动SP的开发利器,大大减少了开发成本,配合专用的手机模拟终端可以直接模拟手机用户收发短信,还可进行合有逻辑的压力测试,能充分检验短信平台的正确性、稳定性。功能介绍(1)按照CMPP V3.O,CMPP V2.0协议实现,支持CONNECT,SUBMIT,DELIVER(含状态报告),ACTIVE_TEST,TERMINATE消息。(2)根据客户端登录提交的版本号自动识别CMPP协议版本。(3)手动设置CMPP协议版本。(4)支持多个客户端登录,支持长连接和短连接类型,支持标准CMPP和华为、亚信接口。(5)服务端自动生成信息标识。(6)全中文解析及二进制格式包内容显示 7 。4.2 短消息
19、收发系统结构4.2.1 短信增值业务网络平面结构全国短消息增值业务网络按平面可分为五层:(1)最上面是信息源的提供者; (2)第二层是因特网的短消息网关平面;(3)第三层是各地的短消息中心平面,由各地负责各种业务的短消息实体构成;(4)第四层是短消息的SS7信令网关接入平面;(5)最后一层是PLMN(Public Land Mobile NetWork)网8。网络平面结构如下图4-1所示。图4-1 全国短消息增值业务网络平面结构4.2.2 系统模块结构从上面我们可以看出短消息网关通过CMPP协议把短消息接入因特网。下图4-2 给出本短消息收发系统的模块结构。图4-2短消息收发系统模块结构4.2
20、.3 系统收发短消息流程短消息收发系统的消息主要分短消息上行、下行:1短消息上行手机发送短消息到SP应用客户端。业务流程如图4-3所示。图4-3短消息上行2短消息下行SP应用客户端发送短消息到手机。由于API接口与ISMG之间的通信过程是基于Winsock通信,所以下面简要介绍Winsock编程模型。4.3 Winsock网络编程模型简介4.3.1 Winsock概述Winsock是一套开放的、支持多种协议的Windows下的网络编程接口,是Windows网络编程事实上的标准。应用程序通过调用Winsock的API实现相互之间的通信,而Winsock利用下层的网络通信协议功能和操作系统调用实现
21、实际的通信工作。4.3.2 Winsock简单客户机/服务器模型进入20世纪90年代后,随着计算机和网络技术的发展,很多数据处理系统都采用开放系统结构的客户机/服务器(Client/Server)网络模型,即客户机向服务器提出请求,服务器对请求做相应的处理并执行被请求的任务,然后将结果返回客户机。这种方式隐含了在建立客户机/服务器通信时的非对称性。客户机/服务器模型工作时要求有一套为客户机和服务器所共识的惯例来保证服务能够被提供(或被接收),这一套惯例包含了一套协议,它必须在通信的两头都被实现。根据不同的实际情况,协议可能是对称的或是非对称。在对称的协议中,每一方都有可能扮演主从角色;在非对称
22、协议中,一方被不可改变的认为是主机,而另一方则是从机。一个对称协议的例子是Internet中用于终端仿真的Telnet,而非对称协议的例子是Internet中的HTTP。无论具体的协议是对称的或是非对称的,当服务被提供时必然存在客户进程和服务进程。4.3.3 Winsock I/0模型本节主要讨论2种I/O模型的特点和用法:(1)Select模型Select(选择)模型是Winsock中最常用的I/O模型。通过调用Select函数可以确定一个或多个套接字的状态,判断套接字上是否存在数据,或者能否向一个套接字写入数据。在套接字处于阻塞模式下的时候,它能够防止一次I/O操作后应用程序被阻塞,同时在
23、套接字处于非阻塞模式下的时候,它能够防止出现WSAEWOULDBLOCK错误。Select函数的原型是:int select(int nfds,fd_set* readfds,fd_set*writefds,fd_set*exceptfds,const struct timeval*timeout);其中,readfds,writefds和exceptfds三个fd_set数据类型的参数分别指向等待可读性检查的套接字组、等待可写性检查的套接字组和指向等待错误检查的套接字组的指针,在这三个fd_set参数中,至少有一个不为NULL,在任何不为空的集合中,必须包含至少一个套接字句柄,否则,Sele
24、ct()函数就没有任何东西可以等待了。Select()函数调用成功返回时,fd_set结构中将存有满足一定条件的套接字组的子集,并且Select)返回满足条件的套接字的数目,若调用失败,则返回SOCKET_ERROR。(2)WSAAsync Select模型WSAAsync Select模型也是一个常用的异步I/0模型,利用这个模型,应用程序可以在一个套接字上接收以Window:消息为基础的网络事件的通知。该模型的实现方法是通过调用WSAAsyncSelect函数自动将套接字设置为非阻塞模式,并向Winsock DLL注册一个或多个感兴趣的网络事件,并提供一个通知时使用的句柄,当注册的网络事件
25、发生时,对应的窗口将收到一个基于消息的通知WSAAsync Select函数的原型为:int WSAAsyncSelect(SOCKET s,HWVD hWnd,unsigned int wMsg,Long lEvent):其中,字段S用于标识一个需要事件通知的套接字的描述符,hwnd标识一个在网络事件发生时需要接收消息、的窗口句柄,wMsg在网络事件发生时指定窗口要接收的消息,它为一个自声明的消息。最后一个参数为lEvent,为屏蔽码,用于指明应用程序感兴趣的网络事件的集合9。5 CMPP协议API接口程序的设计与实现5.1 接口程序流程接口程序流程图如图5-1所示:图5-1 接口程序的流程
26、图5.1.1 Socket连接首先,建立TCP连接。一般情况下,由短消息应用系统连接到SMSC/ISMG的指定端口。5.1.2 登录网关服务器之后,登录到网关服务器,进行身份认证和注册。5.1.3 发送线程处理在成功登录网关服务器之后,就可以通过网关向移动终端提交短信CMPP_SUBMIT。当检测到有提交短信事件发生,判断N个发送线程有无空闲窗口资源,只要其中一个线程符合条件,系统将数据复制到该线程的发送窗口,并发送出去,然后等待网关的回应。另外,如果提交到发送线程滑动窗口的数据是新提交的,则立即将数据发送出去;如果数据发送失败但发送次数不超过3次且没有超时(60秒), 则重新发送数据。5.1
27、.4 接收线程处理接收线程循环主要处理上行消息。等待所有网关连接的数据,数据到,根据相应条件写入接收队列。上行消息主要有:Deliver消息、Submit_ Resp消息、Connect_ Resp消息和Query_ Resp消息、Cancel_ Resp消息、Active_ Resp消息。主要是对Submit_ Resp消息和Deliver消息的处理。接收线程采用简单的Select套接字模型。通过调用Select函数确定套接字的状态,判断套接字上是否存在数据可读。判断可读数据的消息类型,然后做相应的处理。接受线程处理流程图如下图5-2所示:图5-2 接收线程处理流程5.1.5 链路检测线程处
28、理短消息应用系统对于网关来说是客户端,需要主动发起建立连接的请求。在CMPP中请求和应答是CMPP_ACTIVE TEST和CMPP_ACTIVE_TEST_RESP,当TCP连接上没有数据发送和接收并保持一段时间后,有的ISMG会自动关闭TCP连接。因此,一般情况下每间隔一段时间需要进行一次保持连接的操作。为此,在接口程序中,通过创建一个链路检测线程,在链路检测线程中每隔30s向短消息网关空闲连接中发送一次链路检测包。以保持连接链路不断开。当连接意外断开时,及时向短消息网关发送CMPP_CONNECT请求包,及时重新建立连接10。5.2 接口程序的结构接口程序主要由一个CCMPP Clien
29、t类构成,在该类中实现同短信网关的通信细节,封装成DLL形式提供给短消息应用系统。接口程序按功能可分为三层:Socket_I0层、CMPP_PDU层和API层。5.2.1 Socket_I0层最底层是Socket_IO层,主要功能是建立TCP连接、完成数据包的发送和接收。Socket_I0层与上层协议无关,只是完成具体的网络通信。Socket_IO层中为socket分配有发送缓冲区和接收缓冲区。上一层将要发送的数据包写入发送缓冲区中的空闲区域,每一次调用套接字发送函数send时都试图将发送缓冲区中所有未发送的数据发送出去。对于数据的接收,调用recv时将接收到的数据写入接收缓冲区,由上一层从接
30、收缓冲区中取出己经接收到的完整的数据包。5.2.2 CMPP_PDU层接口程序中间层是CMPP PDU层,一方面负责完成CMPP协议中的数据包(PDU)的生成和解析。另一方面负责完成CMPP的请求/应答机制。每一种需要发送的CMPP数据包都对应一个生成函数,接收线程接收数据时首先判断包格式是否正确,正确再从接收缓冲区中取出数据包,每个数据包也对应一个解析函数。生成函数按照CMPP协议中规定的格式填写各种参数,在发送缓冲区中直接生成数据包。解析函数从接收缓冲区中取出数据包的各个字段。 5.2.3 API层最上层是API层,提供应用程序的接口函数。为了使应用程序能够同时支持多个CMPP连接,在AP
31、I层中,每一个连接都对应一个私有的数据结构。其中包含了连接使用的socket发送和接收缓冲区、连接属性等。应用程序初始化连接时需要设置连接属性,包括协议韵种类CMPP、协议的版本、ISMG的IP地址、端口号等。此外,对外提供的API层主要包括登录连接、设置短消息发送包、提交短消息、退出登录、查询、取消短消息等操作。5.3 接口类的实现本接口程序以动态库的形式提供了Windows下的接口,导出协议封装类CCMPP Client,提供其成员函数和成员变量供客户端应用系统调用。CMPP协议API接口是SP客户端应用系统接入短消息网关的通信桥梁。5.3.1 接口类的成员函数只列出主要接口函数,对于客户端应用系统来说,调用这些接口函数就能完成通过网关和移动终端的短信收发功能。下图5-3给出客户端应用系统调用API接口程序启动过程的流程图5-3客户端调用API接口程序启动过程功能概述在客户端提交Submit消息前设置发送消息包,按照CMPP_SUBMIT消息格式配置各参数,包括业务类型、计费用户类型字段、信息格式、信息内容来源、资费类别、资费代码、源号码、接收短信的目的号码、短消息内容和短消息内容的长度。函数原型
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1