白话CMPP、SGIP

白话CMPP、SGIP

我们都知道在国内,有3家运营商(中国联通,中国移动,中国电信),而这三家运营商也是各自使用的自己的协议,不过却是大同小异,它们都是基于我们前两篇(白话短信协议白话彩信协议)介绍的短彩信协议,不过是扩展了一些运营商特有信息而已

那接下我我们就挑两个介绍一下,移动的CMPP协议,以及联通的SGIP协议

CMPP协议

CMPP也有多种版本,这里我们以CMPP2.0为例来介绍,CMPP协议中定义了多种消息类型,主要包括连接消息(Connect Message)、提交消息(Submit Message)、送达消息(Deliver Message)、终端消息(Terminate Message)、心跳消息(Active Test Message)

这里我们主要介绍两个较复杂的Submit Message以及Deliver Message,因为这两个消息是和我们短彩信内容相关的,其它的消息类型看名称就能看得出,是一些功能性的消息,我们这里就略过了

CMPP协议也有信息头和信息体

信息头里包含两个信息command_id和sequece_id,它们各占4个字节,我们这里特别解释一下command_id,command_id代表了消息类型,比如0x00000004表示是一个Submit Message, 0x00000005表示一个Deliver Message,其它消息也有一个command_id对应,我们就不一一列举了;sequence_id表示流水号,我们可以先不用关心

我们接着说信息体,先给你列出信息体里包含的信息:msg_id, pk_total, pk_number, registered_delivery, msg_level, service_id, fee_user_type, fee_terminal_id, tp_pid, tp_udhi, msg_fmt, msg_src, fee_type, fee_code, val_id_time, at_time, src_id, dest_terminal_id, msg_length, msg_content, reserve

我们开始的时候提到过,CMPP是基于短信协议扩展的,那这是怎么体现的呢?

老样子,我们先来回顾一下短信协议是什么样子的:

那我们上面那么多信息是放到PDU哪个部分的呢?其实我们上面的信息并不是放到PDU中间的,而是放到PDU前面的,那我们一个CMPP协议组成(这里列举的是Submit Message)就是这样的:

知道了CMPP的样子,我们回过来看一下上面有很多信息,我们先不用关心所有的值,我们来看一下和我们短彩信内容有关的:pk_total, pk_number, tp_pid, tp_udhi, msg_fmt, msg_length, msg_content,其中,msg_content看名称就知道是我们的消息内容了,也就是我们PDU的内容

接着我们来看剩下的值表示什么

pk_total, pk_number:还记得我们讲短信协议的时候有提到,长短信会拆分成多条吗?我们当时讲到,如果是长短信,UDH中会带有短信的分段信息(refNr,totalNumberOfSms,seqNr),我们CMPP协议中也需要指定,其pk_total=totalNumberOfSms,pk_number=seqNr

tp_pid:在短信协议中用来表示上层协议类型,在我们CMPP协议里的的值为0,我们可以先不用关心

tp_udhi:如果我们PDU中UDH有值,该值为1,反之则为0

msg_fmt:我们在讲短信协议时有提到过DCS,用来指示如何处理UD,就是这个值了

msg_length:看名称就知道是PDU的长度

接着我们来看一下Deliver Message

Deliver Message和Submit Message一样,包含的内容少了计费相关的信息:msg_id, dest_id, service_id, tp_pid, tp_udhi, msg_fmt, src_terminal_id, registered_delivery, msg_length, msg_content, reserve,和Submit Message的组成一样,我们这里就不重复了

这里补充一点,我们可以看到,Deliver Message中少了pk_total, pk_number,所以在Deliver Message中,我们的长短信信息就需要从UDH中提取了

好了,Submit Message和Deliver Message中所有和短彩信消息内容相关的信息我们就介绍完了

SGIP协议

SGIP也有多种版本,这里我们以SGIP1.2为例来介绍,SGIP协议中也定义了多种消息类型,主要包括连接消息(Bind Message)、提交消息(Submit Message)、送达消息(Deliver Message)、终端消息(Unbind Message)、报告消息(Report Message)

和CMPP一样,我们也是主要介绍Submit Message以及Deliver Message,那我们来看协议的信息头和信息体

信息头里也包含两个信息command_id和sequece_number,command_id占4个字节,command_id同样代表了消息类型,比如0x00000003表示是一个Submit Message, 0x00000004表示一个Deliver Message,其它消息也有一个command_id对应,我们也就不一一列举了;sequece_number和CMPP不同,sequece_number也表示流水号,不过占用12个字节,我们也先不用关心

我们接着说信息体,同样列出信息体里包含的信息:sp_number, charge_number, user_number, crop_id, service_type, fee_type, fee_value, given_type, agent_flag, more_late_to_mt_flag, priority, expire_time, schedule_time, report_flag, tp_pid, tp_udhi, message_coding, message_type, message_length, message_content, reserve

同样我们还是看一下SGIP协议组成(这里也是Submit Message)是什么样子:

我们来看一下和我们短彩信内容有关的:tp_pid, tp_udhi, message_coding, message_length, message_content

相比于CMPP,SGIP没有pk_total, pk_number,所以我们长短信信息只在UDH中,tp_pid, tp_udhi同CMPP一样,message_coding同CMPP的msg_fmt一样,message_length, message_content同样与CMPP一样

可以看出,SGIP和CMPP大同小异,当然,它们的编码顺序上会有些先后不同,这里就不详细介绍了

同样,接着我们再来看一下Deliver Message

Deliver Message和Submit Message一样,包含的信息:sp_number, user_number, tp_pid, tp_udhi, message_coding, msg_length, msg_content, reserve,和Submit Message的组成一样,我们这里也就不重复了

这里我们没有解释所有的值,也没没有具体列出每个字段占用的字节和编码方式,因为这些相比于短彩信的编码会简单很多,并且我们主要是目的是介绍CMPP、SGIP包含的信息,以及了解其与短信协议的关系。

当然,如果你对详细的编码有兴趣,可以到SMSSP查看

后面的内容我们就会介绍基于netty的短彩信网关SMSSP
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CMPP模拟器主要是模拟使用中国移动CMPP协议(版本1.x~3.x)的各种网关。此类型网关只使用一个收发连接(短信接收和发送在一个链接上进行)。 模拟器要求使用JDK1.4以上的Java运行环境,请确认相关环境已经安装妥当。如果还没有安装Java环境,请访问java.sun.com下载最新J2SE的SDK。 此模拟器已经使用了全新的核心设计,主要针对应用程序的稳定性、可靠性、效率以及配置、管理和监控方面做了很大的调整。基本界面风格和应用功能上没什么变化。 1.建立Socket连接与登陆 使用自己的CMPP客户端程序,与7890端口建立Socket连接。然后按照CMPP协议发送登陆数据包。模拟器会按照协议处理相关连接和登陆过程。 2.发送短信息 正确建立连接和登陆以后,可以按照CMPP协议的Submit过程提交相关数据并得到应答。模拟器在接收到数据以后,会进行解析并按照协议要求进行应答和回复。相关的处理信息会记录在日志文件中。 3.接收短信息 正确建立连接和登陆以后,在同一连接上等待模拟器的Deliver数据包即可,并且要求客户端按照协议给予应答。模拟器会对相关过程记录在日志信息当中。 4.模拟MT以及状态报告过程 发送submit时,请将registered_delivery设置为1即可。 模拟器收到相关数据包以后,会通过submit_response应答给出message_id;随后模拟出deliver数据包给出状态报告,其中registered_delivery为1。 5.模拟MO过程 发送submit时,请将registered_delivery设置为0即可。 模拟器收到相关数据包以后,会通过deliver请求发送模拟的MO。其中deliver的相关数据全部来自接收到的submit数据。包括来源号码、目标号码、业务代码以及信息内容。 6.模拟压力测试 如果需要进行模拟的完整压力测试过程,只需要以最大速度重复步骤5即可。 模拟器的监控 模拟器有一个基于Web监控后台,系统启动的时候同时启动。缺省端口建立在8081上。监控的URL地址、用户名和密码可以在配置文件中找到。 http://localhost:8081 forest_luo root
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值