白话CMPP、SGIP

白话CMPP、SGIP

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

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

CMPP协议

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

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

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

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

咱们接着说信息体,先给你列出信息体里包含的信息: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, reservecdn

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

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

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

知道了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
相关文章
相关标签/搜索