白话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
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
用Vearch搭建一个图片搜索服务
什么是图片搜索 古时候人们对图片的处理能力非常有限,图片搜索可能是图片的文件名,摘要,或者长度宽度,或者路径等进行文本搜索,巴特现代社会人们更喜欢用以图搜图来替代这种说法,基本上各大搜索引擎都支持这种搜索方式。如下图 什么是Vearch Vearch 是一个分布式向量搜索系统,可以用来计算向量相似度或用于机器学习领域,支持十亿级别秒级的向量索引, 如:图像识别, 视频识别或自然语言处理各个领域。 本系统基于 Faiss 实现, 提供了快速的向量检索功能。提供类似 Elasticsearch 的 Restful API 可以方便的对数据及表结构进行管理查询等工作。 代码在这里:码云仓库 手把手教学 环境要求。计算机 + docker + python3 安装docker 如果你不会安装,自行百度,这个不在本文的讨论范围,如果学了也不会安装docker,点右上角关闭。(Linux,mac左上角),为了方便我们不以虚拟路径代替。使用真实路径描述安装过程。读者可以根据自己的情况修改工作路径,后不多做陈述。 编译&启动Vearch # 创建目录 mkdir -p /home/vearch...
- 下一篇
vue两种常见缓存策略的数据交互处理方案
1 缓存形式说明 vue常使用的两种缓存策略,一种为vue的router中使用keep-alive,一种为使用vuex的store.两者对比见表格: 缓存策略 router中使用keep-alive vuex的store 用法 个人博客 官方博客 优点 1.比较灵活;<br>2.基本不需学习 1.方便统一管理数据;<br>2.多个router之间传输数据十分方便; 缺点 1.多个router之间数据传输较困难;<br>2.统一管理数据困难且效率低; 1.页面内部与input等内容交互时不方便,像v-model这样的语法糖需要拆开;<br>2.需要一定的学习过程和良好的设计理念; 适用场合 刚开始使用vue的新手(只需配置即可) 更高效管理通用数据的情况;<br>建议通过模块化使vuex的耦合性降到最低; 3 数据交互处理 以部门模块和需要选择部门的用户模块为例进行说明. 此处的数据交互问题包含两个问题: 在本地操作,当前模块的数据改变时(如增加部门),影响到另一模块的数据引用(此时再增加用户时选择的部门,如果只是单纯被缓存,则...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7设置SWAP分区,小内存服务器的救世主
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Mario游戏-低调大师作品
- 2048小游戏-低调大师作品
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程