CMPP-中国移动点对点协议

CMPP简介

CMPP的全称是ChinaMobilePeertoPeer,中文名称是中国移动通信互联网短信网关接口协议。为中国移动通信集团公司企业规范。规范中描述了中国移动短信业务中各网元(包括ISMG、GNS和SP)之间的相关消息的类型和定义。规范中定义了以下三方面的内容:(1)信息资源站实体与互联网短信网关之间的接口协议;(2)互联网短信网关之间的接口协议;(3)互联网短信网关与汇接网关之间的接口协议,适用于各SP和ISMG的开发厂商。

 

ONESMSER点评

CMPP接口协议是目前最流行的短信接口之一,在整个短信行业及同行圈子中比较权威,合作对接时多希望对方提供CMPP接口,当然这种情况在2014年及更早时间比较常见,当时由于运营商监管还不是十分严格,可以对外开方大量CMPP接口供第三方公司对接。目前随着消费者对垃圾短信的抵触越来越强烈及针对商业短信立法,(详见通信短信息服务管理规定),CMPP接口很难开放,能开放的几乎都是针对行业应用类短信。

 

CMPP2.0和3.0的区别

说到CMPP,现在有2.0和3.0两个版本,从SP接入到CMPP3.0开始,就是接入了卓望的MISC系统。单从协议上讲CMPP2.0和3.0之间的最大区别是3.0增加了LinkID。然后在Fee_terminal_type,Dest_terminal_type以及Src_terminal_type增加对用户号码的定义,当这些用户号码类型为0:表示真实号码;为1:表示伪码。从增加的这些信息可以看到,第一,LinkID其实是一个临时的定购关系标识,也就是说对于点播类业务,SP的短信系统收到这个LinkID后,才能建立正常的定购关系,而发送的信息必须携带LinkID才可以成功收费,否则就会监权失败,信息发送不出去。这样就从技术上阻止了SP乱发收费信息;第二,用户号码类型,现在传给SP还是普通的手机号码,那么有了这个标识就是以后有可能发送上来的不是用户的手机号码了,而是一个普通的伪码,那么以后SP就不能获得最终用户的手机号码了。CMPP3.0除了协议方面的改进外,还把定购关系从SP方面剥离。以前CMPP2.0的时代,用户的定购关系由SP自行把握,因此很容易出现SP私自捆绑用户收费的现象,现在中国移动上了MISC1.6后,就把所有定购关系都放在运营商,而通过Provision的方式来和SP进行定购用户的同步,并且订购关系以运营商里面的数据为准,这也是从技术上杜绝了SP自己管理的定购关系所出现的问题。

 

CMPP详情信息

编制说明

本规范为中国移动通信集团公司企业规范,规定信息资源站实体与互联网短消息网关的应用层接口协议。本协议版本为1.1版。

 

略缩语
ISMG Internet Short Message Gateway互联网短消息网关
SMPP Short Message Peer to Peer短消息点对点协议
TLS Transport Layer Security传输层安全
SMC Short Message Center短消息中心

 

网络结构

因特网SC业务中心即ISMG记录了全网的SMC的位置,要求ICP的功能实体向ISMG发CMPP_SUBMIT消息,由ISMG将消息转发到某SMC上。同时,SMC也可向ISMG发送短消息,由ISMG发送给相应的ICP。维护管理中心对ISMG进行管理。
1. CMPP功能
CMPP用以建立短消息中心和ICP之间的通路,业务和信息的提供由ICP完成。可以为实现移动数据增值业务提供服务,例如以下业务:Email通知、语音信箱通知、Internet发短消息、移动台发Email、催费通知、自动综合业务信息台(信息点播业务,主要有:天气预报、股票信息、航班信息等)。
以下以Email通知业务为例,讲述信息的流程:某因特网的用户向ICP的EmailServer发送一封Email。ICP的POP3SERVER激活过滤进程,如果该用户申请了Email通知业务,则过滤进程将用户登记的手机号码取出,将Email的标题取出,绑定在CMPP_SUBMIT消息中,发送给ISMG。ISMG将检查CMPP_SUBMIT消息中“接收业务的手机号码”字段,则在ISMG中查询该手机用户归属的SMC的地址,然后发送给SMC。ISMG得到确认消息后,将消息转换成CMPP_SUBMIT_REP,发回给ICP。SMC收到该消息后,对该消息进行处理,并向ISMG发送确认消息。
由上述流程可见,对于ICP来讲,要做的工作主要集中在第二步,即在EMAILSERVER中做一个过滤程序,实现上述功能即可。
从协议上说,ICP只要具备CMPP中实现的接口,就可以实现对应于控制层的功能,至于对于具体的ICP功能实体,比如EmailServer、WebServer等,尚需做一些应用层的工作。
2. 接口
CMPP协议以TCP/IP作为底层通信承载。在有较高的安全性需要时,可选用TLS层进行安全传输。
3. 消息流程
ICP与ISMG之间进行信息交互时,可以采用长连接方式,也可以采用短连接方式。所谓长连接,指在一个连接上可以连续发送多个数据包,然后断开连接,在连接保持期间,如果没有数据包发送,需要双方发链路检测包。短连接是指通讯双方有数据交互时,就建立一个连接,数据发送完成后,则断开此连接,即每次连接只完成一项业务的发送。
4. 长消息
ICP与ISMG以Client—Server方式建立TCP连接,用于双方信息的相互提交。TCP/IP连接建立后,由Client发起建立应用层的连接,这时如果ICP或ISMG认为需要建立TLS连接,则在传输的数据包中置TLS字段,从而在双方建立TLS连接。
在应用层连接建立后的数据传输过程中,如果ICP或ISMG需要向对端发送加密信息,也可建立TLS连接,这时只需要置相应的消息体中Tls_available(是否使用TLS层)属性字段,且应的本条消息的消息体中的其他属性不发送。
消息采用并发方式发送,加以流量控制,即接收方在应答前一次收到的消息多于10条将予以拒绝。

 

消息类型
1) CMPP_Connect请求应用层连接
2) CMPP_Terminate终止应用层连接
3) CMPP_Terminate_REP终止应用层连接应答
4) CMPP_Deliver_REP下发短信应答
5) CMPP_Submit提交短信
6) CMPP_Query发送短信状态查询
7) CMPP_Cancel删除短信
8) CMPP_Active_Test激活测试
9) CMPP_Active_Test_REP激活测试应答
ISMG向ICP发送的消息类型包括:
1) CMPP_Connect_REP请求连接应答
2) CMPP_Deliver短信下发
3) CMPP_Submit_REP提交短信应答
4) CMPP_Query_REP短信状态查询结果
5) CMPP_Cancel_REP删除短信应答
6) CMPP_Active_Test_REP激活测试应答
7) CMPP_Active_Test激活测试
8) CMPP_Terminate终止应用层连接
9) CMPP_Terminate_Rep终止应用层连接应答
ISMG之间发送的消息类型包括:
1) CMPP_Fwd消息前转
2) CMPP_Fwd_REP消息前转应答
3) CMPP_Route路由请求
4) CMPP_Route_REP路由请求应答

 

1. 短消息
ISMG与ICP之间的通讯采用TCP/IP协议,双方互为client和server端。发送与接收单独进行,每项业务建立一个连接,通讯采用应答方式,应答与请求在同一个连接中完成。由于系统采用互为客户端/服务器模式,操作以客户端驱动方式发起连接请求,完成一次操作后关闭此连接。传输过程中,如果ICP或ISMG认为需要建立TLS连接,则在传输的数据包中置TLS字段,并建立双方的TLS连接。
连接中对ICP的认证采用阶段性认证方式,当ICP首次与IMSG交换信息时,ICP首先发送身份认证包,IMSG对ICP进行身份认证后,记录ICP的IP地址等相关信息,在以后的数据交互时,IMSG把ICP的IP地址作为认证条件,即对没有注册的ICP的相关信息不予处理。当ICP想断开此逻辑上的应用层连接时,发送断开连接请求包,ISMG接受断开连接请求后,清除掉与此ICP相关的信息,即对MO到此ICP或ICP的MT信息均不予处理,但保存MO的信息,直到ICP再次与ISMG建立逻辑上的应用层连接,即身份认证。也允许ISMG发起断开ICP的连接请求。

 

2. 消息定义
CMPP连接端口号定义为7890。字节采用在网络中通用的网络序,超时时长间隔采用斐波那契数列,重发次数动态可调,最好不少于3次。

基本数据类型:
Integer:无符号整数
C-OctetString:变长字符串,以空字符表示字符串结束
OctetString:定长字符串,位数不足时,右补空

 

消息

1.消息结构
项目说明
MessageHeader消息头(所有消息公共包头)
MessageBody消息体
2.消息头格式(MessageHeader)
字段名字节数类型描述
Total_Length4Integer消息总长度(含消息头及消息体)
Command_ID4Integer命令或响应类型
Sequence_ID4Integer消息流水号,顺序累加,步长为1,循环使用
3.消息体格式(MessageBody)
1.CMPP_Connect请求连接
字段名字节数属性描述
Source_Addr6OctetStringICP_ID
AuthenticatorICP16OctetStringICP认证码[1]
Reverse8OctetString保留项(暂不用)
2.CMPP_Connect_REP请求连接应答
字段名字节数属性描述
Status1Integer状态(0:正确,1:消息结构错,2:非法ICP_ID,3:ICP认证错4~:其他错误)

AuthenticatorISMG16OctetStringISMG认证码[2]
Tls_available1Integer是否使用TLS协议层
3.CMPP_Terminate终止连接
消息体为空。
4.CMPP_Terminate_Rep终止连接响应
消息体为空。
5.CMPP_Submit发送短信
字段名字节数属性描述
Msg_id4Integer信息标识:1~FFFFFFFFH,顺序累加,步长为1,循环使用.
Pk_total1Integer相同Msg_id的消息总条数
Pk_number1Integer相同Msg_id的消息序号
Msg_level1Integer信息级别
Service_id10OctetString业务类型
Tls_available1Integer是否使用TLS协议层
Msg_Fmt1Integer信息格式0:ASCII串3:短信写卡操作4:二进制信息
8:UCS2编码15:含GB汉字
Msg_src6OctetString信息内容来源(ICP_ID)
FeeType1Integer资费类别
FeeCode1Integer资费代码
Valid_Time1或17C-OctetString存活有效期(字节数为1时:不指定存活期,置为NULL)
At_Time1或17C-OctetString定时发送的时间(字节数为1时:不指定发送时间,置为NULL)
Src_terminal_id21OctetString源终端标识(没有可以为空)
DestUsr_tl1Integer接收消息的用户数量(小于100个用户)
Dest_terminal_id21*DestUsr_tlOctetString接收业务的手机号码
Msg_Length1Integer消息长度(1-70或140)
Msg_ContentMsg_lengthC-OctetString消息内容
Reserve8OctetString保留
6.CMPP_Submit_REP发送短信响应(出错要求ICP全部重发Msg_Id信息)
字段名字节数属性描述
Msg_Id4Integer消息标识
Tls_available1Integer是否使用TLS协议层
Result1Integer结果0:正确1:消息结构错2:命令字错3:消息序号重复
4:消息长度错5:资费代码错6:超过最大信息长
7:业务代码错8:流量控制错9~:其他错误
信息级别

信息级别从1--9,“9”最高,“0”最低
资费代码

具体定义为:
“00”:免费
“99”:包月
“98”:封顶
“01”--“10”:0.01元--0.10元
“11”--“50”:以0.05元递增
“51”--“80”:以0.10元递增
“81”--“97”:保留
[1] 用于鉴别ICP。其值通过单向MD5hash计算得出,表示如下:
AuthenticatorICP=MD5(Source_Addr+9zeroint+ConnectType+sharedsecret)
Sharedsecret由中国移动与ICP事先商定。
[2] 用于鉴别ISMG。其值通过单向MD5hash计算得出,表示如下:
AuthenticatorISMG=MD5(Status+AuthenticatorICP+Tls_available+sharedsecret)
Sharedsecret由中国移动与ICP事先商定,AuthenticatorICP为ICP发送给ISMG的上一条消息CMPP_Request_Connect中的值。
[3] 当Query_Type为0时,此项无效;当Query_Type为1时,此项填写业务代码Service_id.

 

扩展阅读

中国移动CMPP协议错误码, 根据出现频率排序

中国移动IA、DB、IC类短信网关错误代码表

中国移动ID类短信网关错误代码表

中国移动MA、MB、MC类短信网关错误代码表

中国移动MK类短信网关错误代码表

本文由 短信运营者 作者:onesmser 发表,其版权均为 短信运营者 所有,文章内容系作者个人观点,不代表 短信运营者 对观点赞同或支持。如需转载,请注明文章来源。

1

更多文章

发表评论