短信概念#
短信是指用户通过手机或其他终端设备发送或者接收的文字或者数字信息,是Short Message Service的简称。一般长度最大为140个英文或数字字符、70个中文字符。
短信主要通过蜂窝无线网络进行传输,一般情况下短信不需要互联网连接即可发送,其通过基站将信息传递到SMS中心(即SMSC)。SMSC将收到的短信转发到接收设备附近的基站。最后基站将信息发送到接收设备。从上可以看出短信主要依靠蜂窝无线网络,不依赖互联网。
短信数据流向框架如下图。

图1-1
数据流向说明:
-
发送端编辑短信,通过无线信号将消息内容发送到基站。
-
基站收到消息内容经过一系列网元处理将其转发到运营商短信服务中心。
-
运营商短信服务中心经过一系列网元处理将数据转发到接收端附近的基站。
-
接收端附近的基站将短信内容发送到接收端。
背景知识#
短信实现方案演进#
2G时代采用比较复杂的CS/PS域架构,SMS(短信)作为上个世纪的产物,一直寄居在2G的CS域架构下。2G/3G时代网络部署的短信网元为SMSC,主要用于短信的存储和转发,在各运营商中数量众多。
到LTE时代,LTE核心网已经没有了短信业务单元,LTE核心网MME单元和2G的MSC服务器单元通过SGs进行建连,进而实现短信功能。
短信功能实现分为三类:
-
CS短信,短信通过2G/3G网络的电路域进行收发,模块注册在4G网络下可以通过CSFB形式回落到2G/3G网络实现SMS功能支持。
-
SMS Over SGs,也叫NAS短信,需要SIM卡支持2G/3G/4G联合注册。这种短信,从UE到基站是通过LTE的NAS消息传送,到达核心网后,核心网通过SGs接口连接2G/3G网络的MSC网元,由MSC转发到目标设备。
-
SMS Over IMS,IMS(VOLTE)短信,SMS消息走LTE网络,需要模组支持VOLTE并且IMS注册成功。
2G/3G 网络架构#
如下图2-1所示,在2G/3G时代,UE设备通过短信收发机将数据最终发送到SMSC,SMSC将收到的信息转发出去,以此完成短信通信。

图2-1
4G 短信网络架构#
如今4G短信网络框架图,如下图2-2所示,UE将短信数据发送到eNodeB,eNodeB将短信数据发送到SMSC,SMSC再将数据发送到接收端。两者的区别在于2G/3G和4G网元结构不同,4G网元以及网络结构在这方面比2G/3G要分类更多些,其通过新建网元IP-SM-GW实现SMS短信收发功能。

图2-2
短信相关介绍#
目前发送短信消息分为:TEXT模式、块模式和PDU模式。
- TEXT模式即常用的文本模式。
- PDU即数据单元模式。
- 块模式现在很少用。QuecPython目前不支持此种模式。
短信编码方式#
短信编码方式有:GSM 编码方式,IRA 8bit编码方式,UCS2编码方式。
-
GSM 编码7个比特位表示一个短信内容的字符数据。
-
UCS2为16个比特位表示一个短信内容的字符数据。
-
IRA为8个比特位表示一个短信内容的字符数据。
由于单条短信底层最多支持140个字节,每个字节8bit。由此可知计算单条短信可发送最大字符数据公式如下:
短信内容最大字符数 = 140 * 8 / E(E - 多少个比特位表示一个字符数据)
从上述可知:
GSM 编码方式E = 7,短信内容最大字节数 = 140 * 8 / 7 = 160
IRA 编码方式E = 8,短信内容最大字节数 = 140 * 8 / 8 = 140
UCS2编码方式E = 16,短信内容最大字节数 = 140 * 8 / 16 = 70
由于QuecPython未开放IRA编码方式,目前仅支持GSM,UCS2编码方式,以下只介绍GSM编码短信和UCS2编码短信。
GSM短信编码#
GSM编码也叫GSM 7-bit编码,利用7个bit来表示一个字符,键盘键入字符为标准的ASCII码,ASCII码是8比特数据。在实际发送数据时,只有GSM编码对应的字符值和ASCII编码对应的字符值是相同的才能正确的接收数据,否则会造成发送和接收的数据不一致的情况。GSM编码对应的数值不是ASCII码对高位简单的舍弃,需要自行进行鉴别。GSM 7 bit编码表参考3GPP TS 03.38。
UCS2短信编码#
UCS2编码用于发送Unicode字符,一条短信最多可发送70字符。UCS2编码可用于发送中文、英文等各种国家的字符。对于字符数值和UCS2编码对应值有标准的编码规定,可自行查询资料。
短信的分类#
短信可以分为TEXT短信,PDU短信和块短信。TEXT简单易实现,但在某些场景中并不能满足需求。PDU短信,实现比较复杂,需要转码,但基本能满足绝大部分场景需求 。块短信已经很少用,QuecPython目前不支持此种模式,以下不再介绍此模式。
TEXT 短信#
QuecPython接口发送TEXT短信不需要将TEXT短信内容再进行拆解组合进行发送,只需直接写入发送内容即可,短信内容超过140个字节,QuecPython模组将自动将其转为长短信分为多条短信进行发送(表3-1标注最大字节数超过140个字节的型号)。
在实际发送短信时,键入的数据均为ASCII码,而ASCII码是8比特位字符数据,GSM编码是7比特位字符数据,GSM编码将ASCII码中的一些控制字符表示成了有实际意义的字符数据。在TEXT模式下,GSM编码数据需要保证7比特位的数据数值和ASCII码表中的数值完全一致,才可通过TEXT方式发送短信数据,否则将导致接收端和发送端数据不一致。
PDU 短信#
QuecPython接口发送PDU短信不再需要将短信内容转成PDU码,底层已完成字段转码,只需直接写入发送内容即可,短信内容超过140个字节,QuecPython模组将自动将其转为长短信分为多条短信进行发送(表3-1标注支持最大短信条数大于1的情况下)。
PDU(Protocol Data Uint,协议数据单元)模式,需将短信内容转换成PDU数据才能进行发送。QuecPython接口已进行了封装,在实际的使用过程中,只需将短信内容直接写入。当调用接口时会自动将短信内容转换成PDU码进行发送,并自动添加短信头部设置。
PDU串分类及结构#
对于短信功能,PDU类型分为以下几类:
-
SMS-DELIVER 短信递送
短信中心发送到移动终端设备
-
SMS-DELIVER-REPORT 短信-交付-报告
移动终端设备发送到短信中心
-
SMS-SUBMIT 短信提交
移动终端设备发送到短信中心
-
SMS-SUBMITE-REPORT 短信-提交-报告
短信中心发送到移动终端设备
-
SMS-STATUS-REPORT 短信状态报告
短信中心发送到移动终端设备
-
SMS-COMMOAND 短信通讯和
移动终端设备发送到短信中心
-
其他种类
保留使用
对于移动终端设备,着重介绍SMS-SUBMIT和SMS-DELIVER。其结构如下:

图2-3
SMS-SUBMIT和SMS-DELIVER类型PDU串格式公有部分介绍,参考3GPP TS 03.40 第9章。比较重要的DCS涉及到短信压缩、短信类型(共四种类型,规定ME对各类型短信采取的策略),短信编码类型(GSM/UCS2)等设置请参考GSM 03.38 第4章。
以下介绍简单介绍SMS-SUBMIT,SMS-DELIVER两种类型,详细内容参考3GPP TS 03.40 协议文档。
SUBMIT-PDU#
下图为发送PDU数据格式,可以按照如下格式组装数据,各个字段数值含义均可参考3GPP TS 03.40 协议文档,对于长短信UD包含用户数据包问题,可以参考图2-7中Long SMS (UD),QuecPython底层已经处理,无需关注。

图2-4
PDU TYPE#
PDU类型对于SMS-SUBMIT,结构图如下:

图2-5
- TP-MTI,2bit
- 表示短信PDU类型,如SMS-SUBMIT、SMS-DELIVER等。
- TP-RD,1bit
- 指示短信中心在处理SMS-SUBMIT类型数据时TP-MR和TP-DA相同的情况下,是接收还是拒绝。
- TP-VPF,2bit
- 有效期格式
- TP-RP,1bit
- 标记是否设置回复路径
- TP-UDHI,1bit
- 标记UD是否包含报文头,对于UD,长短信包含报文头,单条短信只包含用户数据。
- TP-SRR,1bit
- 标记是否需要状态报告
VP#
VP表示短信在短信中心的有效时间。

图2-6
DELIVER-PDU#
下图为接收到PDU数据格式,可以按照如下格式解析数据,各个字段数值表示可以参考3GPP TS 03.40协议文档。

图2-7
PDU TYPE#
PDU类型对于SMS-DELIVER,结构图如下:

图2-8
- TP-MTI,2bit
- 同上
- TP-MMS,1bit
- 是否等待更多的短信消息
- TP-RP,1bit
- 同上
- TP-UDHI,1bit
- 同上
- TP-SRI,1bit
- 设置是否回复短信状态。
SCTS#
- 短信中心时间戳,其内容格式参考 3GPP TS 03.40协议文档。
172

被折叠的 条评论
为什么被折叠?



