APP下载

一种超长短信拆分与合并方法

2014-04-24司雨濛谢海涛靳华中叶志伟张程晖

湖北工程学院学报 2014年3期
关键词:分片字段字节

司雨濛,谢海涛,靳华中,叶志伟,张程晖

(1. 湖北工业大学 计算机学院, 湖北 武汉 430068;2. 上海交通大学 高性能计算中心, 上海 200240)

短信服务(SMS: Short Message Service)是通信从模拟转向数字技术最成功的商业应用之一,短信业务已在银行证券、商贸物流、行政管理和公共服务等诸多行业得到广泛应用。SMS数据由服务提供商(SP:Service Provider)产生,通过互联网连接到电信运营商的行业网关转发到用户手机终端。根据短信协议规定,短信长度在140字节以内,即一条短信不能超过70个汉字。如果需要发送长度超过140字节(70个汉字)的超长短信,通常的处理方法是先将其按单条长度140字节(70字)分拆成多条短信,然后逐条发送,因此手机终端收到的短信也是逐条显示。显然,上述处理方式存在若干弊端。例如:用户需要查看多条短信才能获取短信的全部内容,查看短信很不方便;长短信拆分成多条后,分别通过多个短消息网关设备进行存储转发可能导致部分短信的丢失或失序,容易导致用户对短信内容理解的偏差;按字符编码拆分短信可能导致部分内容出现乱码,影响用户使用短信时的体验。随着网络通信和智能终端的发展,人们对超长短信的应用需求日益增长,短信内容长度限制已经严重影响短信业务的推广,如何解决超长短信问题的发送与接收已越来越受到广大研究者的关注。1999年GSM03.40标准已经开始支持长短信协议[1],3GPP标准则进一步对长短信协议进行规范[2]。本文研究超长短信的发送和接收技术,对短信增值业务的拓展和短信应用系统的研究、开发和应用具有重要意义。

1 超长短信的实现原理

超长短信(CSMS: Concatenated Short Messages)是指长度超过140字节(或70汉字)的短信。手机终端发送短信时,按照一条短信进行编辑并发送,接收时也按一条短信整体显示出来。实际上,在电信运营商网络中短信是按多条分别传输,也按照多条短信进行计费。短信在发送时按照一定规范自动拆分成多条,而接收时则合并成一条。实现超长短信的基本原理如图1所示。

(1)发送端。手机终端或SP需要发送超长短信时,自动将该条长短信拆分成多条长度小于140字节(或70汉字)的短信,每条短信分别发送给运营商网络。短信拆分时,按照长短信协议要求,每条短信均添加长短信标识,并逐一编号,在短信内容部分封装长短信协议头部。

(2)运营商网络。对拆分的多条短信分别进行独立传输。由于采用存储转发方式分别对多条短信进行传输,短信到达接收端时顺序与原有的发送顺序可能不一致。

(3)接收端。对接收到的多条短信分别进行存储。根据长短信协议字段标识,判断是否已经接收到所有的分拆短信。若只接收部分短信,则将它们暂时存储,不显示出来。当所有的分拆短信全部接收完成后,再将它们按原有的编号顺序合并成一条完整的长短信并显示给客户。

为了支持超长短信,GSM03.04定义TP_UDHI字段作为超长短信的标识[1],如果该字段为0,则表示普通短信;如果该字段为1,则该短信为长短信中的一条子短信。同时,每条子短信需要设置一个6字节长的长短信协议头,位于短信内容字段(TP_UD)的前6个字节,协议头部分设置了该子短信的序号等信息,用于接收端对这些子短信进行设并重新合并成一条长短信。6个字节长短信协议头格式如表1所示。

表1 6字节长短信协议头格式

在表1中,各个协议字段的具体含义分别表示如下:LH(Length of the Header):协议头的总长度,标识当前字节之后剩余长协议头的长度,对6字节的协议头而言,该字段为05;

IEI(Information Element Idientifier):信息单元标识。GSM03.40规范中定义IEI=00表示随后的这批长短信的标识位(即RN)长度为1[1];

LSH(Length of the Sub-Header):信息单元头长度,表示长短信协议头部分剩下长度,这里为03;

RN(Reference Number):长短信编号,是长短信的唯一标识,取值范围1~255;

MAP(Maximum Amount of Pieces):本超长短信总条数,标识这批长短信一共分成多少条子短信分片,每条分片最长的短信长度是134字节(67字)。

Sequence Number:短信序号,当前短信在这批长短信中的位置,取值为1~MAP。

6字节长短信协议中用于标识长短信编号的RN字段只有1个字节,取值范围从1~255,当需要大量发送超长短信而不能保证接收端能完全接收到所有的子短信时,有可能出现两条具有相同编号的子短信拼接在一起而引起短信内容的异常。3GPP协议定义了7字节的超长短信协议头,格式如表2所示。与6字节协议头不同的是:RN从1个字节扩充为2个字节,一定程度上避免了出现错误合并超长短信的问题。

表2 7字节长短信协议头格式

2 超长短信的发送和接收

根据GSM中对超长短信的定义,本文设计了SP端针对长短信的发送和接收系统,该系统采用6位协议头格式对超长短信(短信内容为汉字)进行封包,下面分别对短信的发送(Mobile Terminate ,MT表示从SP端发送到手机终端)和接收(Mobile Originate, MO表示从手机终端发向SP端)过程进行阐述。

2.1 超长短信MT处理模块

用户将待发送的短信存储在短信数据库的待发送短信表中,由系统定时查询数据库中是否有需要发送的短信。如果有,则交由短信发送模块进行发送,将该记录从待发送表中删除,同时在发送历史表中记录该短信的相关信息(如发送时间、收信人手机号、发送ID和状态等)。超长短信发送处理模块的处理流程如图2所示。

图2 MT长短信发送流程图

由图2可知,对提取的待发送短信数据,首先判断短信内容的长度CSMS_Length,如果短信长度小于70个字,则该短信为普通短信,将TP_UDHI字段置0,并将短信内容直接封装在短信数据包中。如果短信长度大于70个字,则将该长短信拆分为多条子短信分别处理:首先将每条分段短信的TP_UDHI字段设置为1,然后计算短信分片的数量Cnt,计算方法如下:

Cnt=「CSMS_Length/67⎤

(1)

执行如下循环对超长短信进行拆分并封装成多条子短信数据包:

for(int i=1;i<=Cnt;i++){

(1)生成本段长短信分片的编号:RNi=Rand(i)

(2)填充本段长短信分片的协议头:05,00,03,RNi,Cnt,i

(3)填充本段长短信分片的内容:if(i==Cnt)CSMS(67i,CSMS_Length)else CSMS(67i,67i+67}

当组成本长短信的各条分片分别组装成短信数据包后,再由号码判断模块根据接收手机号码判断由哪个运营商的通信协议去处理。电信SMGP[3]、联通SGIP[4]和移动CMPP[5]分别为三家运营商的短消息协议处理模块,对各自手机的短信进行协议处理,交由各行业网关发至用户手机终端,同时返回该短信的发送状态报告(成功或失败原因),短消息协议处理模块将收到的状态信息记录到短信发送记录表中作为计费依据,也可根据状态报告进行错误重传。各条分片短信到达手机终端后根据长短信协议头部分信息自动合并为一条超长短信。

2.2 超长短信MO处理模块

用户主动发起对MO短信或MT短信的回复,通过运营商网络由行业网关传递到短消息协议处理模块,分别由电信SMGP、联通SGIP和移动CMPP进行接收,解析出MO短信数据包的短信内容和TP_UDHI字段后,根据这些信息检测和合并MO超长短信内容,超长短信接收处理模块的处理流程如图3所示。由图3可知,超长短信MO处理模块首先判断TP_UDHI字段的值,若为0,则该MO短信为普通短信,直接将该短信存储在接收短信数据库中。若TP_UDHI字段为1,说明该短信为长短信中的某个分片,需要对该长短信的所有分片信息处理后才能合并成回复该长短信的内容。具体处理过程如下:

(1)从短信内容字段中取出长协议头部分,判断第一个字节的值。若为05,则取出前6个字节作为长短信协议头。若为06,则取出前7个字节。

图3 MO长短信发送流程图

(2)对长短信协议头部分进行解析,将收到相同RN字段的长短信分片内容(剔除长短信协议头部分)缓存,同时设置该长短信接收超时时限。

(3)根据Cnt字段和Seq字段内容,判断该长短信的所有分片是否已接收。若全部分片接收完毕,则根据Seq字段将缓存的长短信分片按照序号重新排列后合并成一条长短信。同时,记录该长短信接收信息。若没有收到所有短信分片,则继续接收。

(4)超过超时时限仍未收到所有长短信分片,则放弃对该长短信的合并处理,并记录出错信息,同时删除缓存的长短信分片。

3 结论

实现超长短信处理是影响短信系统性能的关键。本文对超长短信的原理进行分析,设计SP端的超长短信功能,实现了超长短信发送时进行自动拆分和接收时自动合并。通过短信的自动拆分和合并,使得超长短信在SP端和手机终端之间变得透明,以提升短信的可读性和可用性。

[参 考 文 献]

[1] GSM 03.40 V7.3.0[S].ETSI TC-SMG.

[2] 3GPP TS 23.040 V9.2.0 [EB/OL].(2010-03-10).[2014-04-02].http://www.3gpp.org.

[3] 中国-03移动通信互联网短信网关接口协议(V2.0)[S].中国移动通信,2003.

[4] 中国联合通信公司短消息网关系统接口协议(SGIP) [S].2版. 中国联合通信公司,2001.

[5] 中国电信短信网关接口协议SMGP(V3.0)[S].中国电信,2008.

猜你喜欢

分片字段字节
上下分片與詞的時空佈局
图书馆中文图书编目外包数据质量控制分析
No.8 字节跳动将推出独立出口电商APP
分片光滑边值问题的再生核方法
CDN存量MP4视频播放优化方法
No.10 “字节跳动手机”要来了?
基于模糊二分查找的帧分片算法设计与实现
简谈MC7字节码
CNMARC304字段和314字段责任附注方式解析
无正题名文献著录方法评述