CMPP和SMPP协议的区别

CMPP和SMPP协议的区别

并非同类型协议

CMPP和SMPP都是短信协议中的一种,但它们不是同一类型的协议。SMPP和ESME和SMC (短信中心)之间的协议,而CMPP是SP和中国移动ISMG之间的通讯协议。

以下是CMPP 3.0文档中的图示。

与CMPP对应的协议有,联通的SGIP协议,中国电信的SMGP协议,网通的CNGP协议。作为SP,只需要了解CMPP,不需要了解SMPP。

最新版本和兼容

SMPP协议是一个国际标准,有SMS论坛制定,官方网址为https://www.360docs.net/doc/d418641465.html,,截至2006年7月2日,最新版本是5.0。曾经流行的版本是3.3、3.4。SMPP协议向后兼容的。

CMPP 最新版本似乎是3.0。现在(2006年7月),大多数还是使用CMPP 2.0。CMPP协议没有做到向后兼容,3.0的文档本身也没有讲到兼容的问题,甚至认为,协议制定者压根没想过要兼容。CMPP 3.0没做到向后兼容导致了一个问题,就是SP无法平滑升级。

PDU格式

PDU是协议数据单元的缩写,SMPP和CMPP都使用最先一个4位的长度标志整个PDU的长度。

SMPP是一个国际标准,不同的SMC的是实现可能要增加特定参数,为了具备更好的扩展性,SMPP 3.4以上版本,增加了可选参数,在5.0中,可选参数叫做TLVTable。

CMPP是中国移动定义的其内部ISMG(互联网短信网关)之间、ISMG与SP之间的通讯标准,涉及一些具体的计费信息,但没有可选参数。

在SMPP中,消息头包括4部分:PDU长度、Command_Id、Command_Status、Sequence_Id。其中Command_Status字段,只在回应消息中使用,存在冗余。

CMPP中,消息头部包括3部分:PDU长度、Command_Id、Sequence_Id。个人认为,CMPP 中的消息头,不包括Command_Status,似乎更好一些。

消息传输模式

SMPP和CMPP都支持异步传输,CMPP中,建议异步传输的窗口大小为16。

CMPP使用一个连接发送短信息和接收短信息。

SMPP支持多种的连接,其中TX类型的连接,只能发送短信息,RX类型的连接只能接收短信息,TRX类型的连接支持接收和发送短信息。

SMPP 3.4中,消息传输模式分三中:Store And Forward、Datagram、Forward。分别用在大吞吐量、可靠性保证等不同的应用场合。

CMPP没有规定其消息传输的模式,根据实际使用的情况看来,华为的网关的消息传输模式类似SMPP协议中规定的Datagram模式

基于CMPP3.0的企业短信网关API设计

摘要CMPP(中国移动点对点协议)规定了移动梦网短信业务开展过程中各网元(包括ISMG、GNS和SP)之间的消息类型和定义,本文讲述基于CMPP3.0标准的企业短信网关设计,支持CONNECT,SUBMIT,DELIVER,QUERY,CANCEL,TERMINA TE消息。

关键词短信短信网关CMPP SP ISMG

1 引言

随着短信息业务的快速发展,短信息已经成为手机用户最经常使用的业务之一。除了大量使用的手机用户到手机用户的点对点短信业务之外,从信息平台到手机用户的短信信息服

务业务也在快速发展,该业务已经成为广大用户及时方便地获取信息的一种手段。在广大服务提供商(SP)的支持下,用户可以采用短信点播或网站定制的方式得到大量有用信息,SP也能通过提供有偿信息服务而获得收益。

然而手机用户和SP的交互必须通过基于CMPP的短信网关。CMPP(China Mobile Peer to Peer)中国移动点对点协议,目前为3.0版本,是中国移动通信集团公司发布,规定了移动梦网短信业务开展过程中各网元(包括ISMG、GNS和SP)之间的消息类型和定义,规定了以下三方面的内容:1)业务提供商与互联网短信网关之间的接口协议;2)互联网短信网关之间的接口协议;3)互联网短信网关与汇接网关之间的接口协议。

文章组织如下:第2节分析介绍了CMPP3.0;第3节分析设计企业短信网关API;第4节给出了SP的发展趋势,最后对全文进行总结。

2 CMPP3.0

2.1网络结构

互联网短信网关(ISMG)是业务提供商(SP)与移动网内短信中心之间的中介实体,互联网短信网关一方面负责接收SP发送给移动用户的信息和提交给短信中心。另一方面,移动用户点播SP业务的信息将由短信中心通过互联网短信网关发给SP。另外,为了减轻短信中心的信令负荷,互联网短信网关还应根据路由原则将SP提交的信息转发到相应的互联网短信网关。互联网短信网关通过向汇接网关(GNS)查询的方式获得网关间的转发路由信息。

另外,ISMG还必须与数据业务管理平台DSMP进行连接,在业务流程中对用户、业务以及定购关系等进行鉴权并对业务进行批价。

CMPP协议主要提供以下两类业务操作:

(1)短信发送(Short Message Mobile Originate,SM MO)

(2)短信接收(Short Message Mobile Terminated,SM MT)

2.2 CMPP协议栈

CMPP协议以TCP/IP作为底层通信承载

2.3 通讯方式

各网元之间共有两种连接方式:长连接和短连接。所谓长连接,指在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,如果没有数据包发送,需要双方发链路检测包以维持此连接。短连接是指通信双方有数据交互时,就建立一个TCP连接,数据发送完成后,则断开此TCP连接,即每次TCP连接只完成一对CMPP消息的发送。

现阶段,要求ISMG之间必须采用长连接的通信方式,建议SP与ISMG之间采用长连接的通信方式。

2.4 CMPP涉及的端口号

端口号

应用

7890

长连接(SP与网关间)

7900

短连接(SP与网关间)

7930

长连接(网关之间)

9168

短连接(短信网关与汇接网关之间)

2.5交互过程中的应答方式

在SP与ISMG之间、SMSC与ISMG之间及ISMG之间的交互过程中均采用异步方式,即任一个网元在收到请求消息后应立即回送响应消息。

3 企业短信网关设计

企业短信网关API必须实现CMPP3.0中业务提供商(SP)与互联网短信网关(ISMG)间的消息定义所规定的七个操作。

⑴ SP请求连接到ISMG(CMPP_CONNECT)操作

CMPP_CONNECT操作的目的是SP向ISMG注册作为一个合法SP身份,若注册成功后即建立了应用层的连接,此后SP可以通过此ISMG接收和发送短信。ISMG以

CMPP_CONNECT_RESP消息响应SP的请求。

⑵ SP或ISMG请求拆除连接(CMPP_TERMINA TE)操作

CMPP_TERMINA TE操作的目的是SP或ISMG基于某些原因决定拆除当前的应用层连接而发起的操作。此操作完成后SP与ISMG之间的应用层连接被释放,此后SP若再要与ISMG 通信时应发起CMPP_CONNECT操作。

ISMG或SP以CMPP_TERMINA TE_RESP消息响应请求。

⑶ SP向ISMG提交短信(CMPP_SUBMIT)操作

CMPP_SUBMIT操作的目的是SP在与ISMG建立应用层连接后向ISMG提交短信。

ISMG以CMPP_SUBMIT_RESP消息响应。

⑷ SP向ISMG查询发送短信状态(CMPP_QUERY)操作

CMPP_QUERY操作的目的是SP向ISMG查询某时间的业务统计情况,可以按总数或按业务代码查询。ISMG以CMPP_QUERY_RESP应答。

⑸ ISMG向SP送交短信(CMPP_DELIVER)操作

CMPP_DELIVER操作的目的是ISMG把从短信中心或其它ISMG转发来的短信送交SP,SP以CMPP_DELIVER_RESP消息回应。

⑹ SP向ISMG发起删除短信(CMPP_CANCEL)操作

CMPP_CANCEL操作的目的是SP通过此操作可以将已经提交给ISMG的短信删除,ISMG将以CMPP_CANCEL_RESP回应删除操作的结果。

⑺链路检测(CMPP_ACTIVE_TEST)操作

本操作仅适用于通信双方采用长连接通信方式时用于保持连接。

以下为CMPPAPI实现的java部分代码

public final class CMPPAPI

{

…….

public CMPPAPI()

{

….. //初始化,完成SP请求连接到ISMG(CMPP_CONNECT)操作

}

public int CMPPSendSingle(…)

{

…..//发送短信,完成SP向ISMG提交短信(CMPP_SUBMIT)操作

}

public int CMPPSendBatch(…)

{

…..//群发短信

}

public int CMPPQuery(…)

{

…..//查询短信流量,完成SP向ISMG发起删除短信(CMPP_CANCEL)操作

}

public int CMPPDeliver(…)

{

…..//接受短信,完成ISMG向SP送交短信(CMPP_DELIVER)操作

}

public int CMPPCancel(..)

{

…..//取消短信,完成SP向ISMG发起删除短信(CMPP_CANCEL)操作

}

public int CMPPActiveTest(..)

{

…// 检查ISMG短信网关是否提供服务,链路检测(CMPP_ACTIVE_TEST)操作}

public int CMPPAnalyzeStatusReport(..)

{

…..//分析状态报告内容

}

}

相关文档
最新文档