短消息编码浅析

【说明】 本文转载自:http://bbs.c114.net/thread-408438-1-1.html

短消息编码浅析

前言 对于短消息,我们每个人都不陌生,关于短消息的资料也是琳琅满目,在近两个月的数据卡功能测试中,短消息的测试在绝大多数的版本中都会涉及,所以在此,主要将短消息的基本概念,短消息的结构,并结合短消息测试时常用的AT指令内容以及在短消息方面碰到的问题做些简单介绍(本文主要介绍的是WCDMA网络下最常用的PDU格式的短消息模式)

为了更好的了解短消息方面问题我们主要要了解三类短消息:发送短消息,接收短消息以及短消息状态报告其他一些短消息在网络侧的传输是和我们测试没有任何关系的 一、短消息基础知识 1.1短消息概念 GSM中唯一不要求建立端-端业务路径的业务就是短消息,即使移动台已处于完全电路

通信情况下仍可进行短消息传输     短消息通信仅限于一个消息,换言之,一个消息的传输就构成了一次通信。因此,业务是非对称的,一般认为移动起始短消息传输与移动终接短报文传输是两回事。这并不阻碍实时对话,但系统认为不同的消息彼此独立,消息的传输总是由处于GSM外部的短消息服务中心(SMSC)进行中继,消息有目的地或起源地,但只与用户和SMSC有关,而与其他GSM基础设施无关 1.2短消息组成要素 SMS由几个与提交或接收相关的服务要素组成,如:有效期(在将短消息成功送达用户前SMSC需要保证的储存时间),优先性此外,短消息还提供提交消息的时间、告诉移动台是否还有更多消息要发送,以及还有多少条消息要发送等

   短消息不可到达

   短消息不可到达的情况有三种:

*第一种情形是当被SMS网关查询时,移动台不在服务区域未获得服务授权或有未成功发送报文正等待告警,HLR就会立即知道不能发送;

*第二种情形是,MSC/VLR已收到报文但不能传送的情况此时,它先向SMS网关发送一故障指示,作为MAP/H FORWARD SHORT MESSAGE报文的应答;然后,网关一方面会向SMSC发送否定报告,另一方面向HLR发送MAP/C SET MESSAGE WAITING DATA报文,在收到报文确认后进行表格更新该事件会储存在VLR和HLR内的用户记录中;

*第三种情况是MSC/VLR向用户发送有效报文后发现不可送达 1.3短信(SMS)的解释分类以及原理 1.短信的基本属性:

      SMS根据其收发源,可以分为两种MO和MT短信:

*MO(Mobile Originate)短信,即终端发起的

*MT(Mobile Terminated)短信,即终端接收的。

      备注: 终端是相对网络设备而言,可以理解为手机,在网络中称为SME(短消息实体);

       因此,如果是SP发送给手机的一条短信,则称为MT短信,反之则称为MO短信

      目前,发送短消息常用Text和PDU(Protocol Data Unit,协议数据单元)模式使用Text模式收发短信代码简单,实现起来十分容易,但最大的缺点是不能收发中文短信;而PDU模式不仅支持中文短信,也能发送英文短信PDU模式收发短信可以使用3种编码:7-bit、8-bit和UCS2编码

2. 移动网络中的短信流程

在移动网络中,短信流程可以分为三种:

一种为点对点短信,即我们用手机给别人发送一条短信时,一般为点对点模式,如下图示:

图1-3-1

另一种为SP服务短信,可以是用户发送给SP服务商的,也可以是SP服务端发送给用户的,如下图示:

图1-3-2

在上图中,当用户发送出一条短信后,这样短信会被发送到对应的SP商的服务器,SP端的程序会根据用户发送的号码和发送的内容决定给用户回复什么样的信息;当然,也决定了计费的费率

上图中,红线圈的部分,就是SP程序员工作的地方,对于短信SP服务商的程序员而言,开发的任务主要有两个:第一是开发维护升级与移动ISMG平台相连的通讯网关,即SP侧短信网关,SP侧短信网关的核收任务是通过保证高效、稳定的socket通信收发短信;再就是对应的短信的业务处理流程,如答题、天气预报查询;当然,从业务的角度而言,核心的要求是让用户用的方便和计费的精准控制

最后一种就是小区广播,主要是由运营商网络侧向小区内的所有用户发送的短消息。经常用于一些活动的推荐等

3.短消息编码

编码主要有7位编码, 8位编码,UCS2编码三种编码方式

7位编码

每个字节只使用低七位,每八个字节为一组,去掉最高位,重新编码为七个字节,因

此,7位编码实际上是可以表示到160个字节但7位编码只能发送0x00 – 0x7F范围内的字符,它一般在发送英文短信时使用

8位编码:

8-bit编码通常用于发送数据消息,比如图片和铃声等

UCS2编码:

常用于中文或中英文混合内容发送,只能发送70个字符(因为一个UC2占两个字节)

由于国内一般的编辑器等多以GB编码居多,因此,如果要发送中文,需要先将中文转换为UC2编码再进行发送

在手机上,通常的做法是如果全部为英文及半角字符,则以7位编码发送,如果内含有中文,则全部编码为UC2发送.

目前,也出现了一些其他的编码方式,如混合编码方式,这些编码方式根据汉字的内码每个字节都是在0XA1以上的取值范转的特点来制定的,有兴趣的可以参考其他资料 常见短消息结构 2.1发送短消息

Address-Length
[td]SMSC地址信息的长度,2个8位位组
Type-of-Address
[td]SMSC地址格式,一般占1个8位位组
Address-Value

[td]短消息中心

TP- First-Octet
[td]基本参数发送,TP-VP用相对格式,一般占1个8位位组
TP-MR
[td]消息编号,1个8位位组
TP-DA
[td]接收方地址
TP-PID
[td]协议标识,一般占1个8位位组
TP-DCS
[td]短信类型,编码方式,一般占1个8位位组
TP-VP
[td]有效期,一般占1个8位位组
TP-UDL
[td]用户数据长度,一般占1个8位位组
TP-UD
[td]用户数据

首先,发送短消息发送的短消息LOG主要分为三个部分:短消息中心号码,目的号码以及短消息内容(这里的内容包含了协议标识,短信类型,编码方式,内容长度和内容编码)

对于正确的设置,LOG中短消息中心主要是0891************这一部分。08表示短消息中心号码一共占据了8*2=16个16进制数(这里每2个16进制数表示一项功能,也就是8个2进制数,所以这2个16进制数也被叫做8位位组这里的08就表示这里有8个8位位组)。91主要表示的是号码类型。这里的2进制格式如下图所示:

图2-1-1.号码类型

在这里91化成2进制数为1 001 0001 。对照上图,此处表示为国际电话号码ISDN/telephone plan91后边的12位即是目的地址。这里和我们正常输入号码顺序是不一样的,如果我们要输入+8 61 59 00 29 05 00(或者68 51 09 20 09 05 F0)那么这里显示的应该是8+ 16 95 00 92 50 00(若这里号码出现了奇数那么一般用F来补齐,使之保持偶数状态)

短消息中心号码之后即是目的号码模块这里一般是11**0B81**********F*。这里11位代表的是发送的不带状态报告的短消息。(由于这里比较难说明我就介绍几个比较常用的值,若感兴趣可以去参看3GPP协议23.04031——单条带状态报告;71——级联带状态报告;51——级联不带状态报告)。后边的**表示的是消息编号(我是这么认为的,这个值从00-FF之间取值)0B表示的是后边目的号码的长度,也就是11位。这里和短消息中心号码那里是不一样的81表示的是号码类型。**********F*是目的地号码。这里因为号码是奇数位,而同时由于8位位组的要求,所以这里用F补齐,使之为偶数个。

最后就是短消息内容部分了首先第一个8位位组一般皆为00,协议里边称之为协议标识。第2个8位位组是短消息的类型和编码方式TP-DCS下面以8位位组模式对其进行分析,一般情况下bit7,bit6处的值均为0。bit5的值表示的短消息内容是否压缩压缩取1,不压缩取0,这里一般取0。Bit4位表示的是CLASS类型功能是否开启。取0不开启,取1开启。一般我们发送的短消息都不是CLASS类型短消息所以这里取0下面介绍bit0-bit3。

Bit 3          Bit2           Character set:0       0            GSM 7 bit default alphabet0            1            8 bit data1            0            UCS2 (16bit) [10]1            1            Reserved

Bit 1            Bit 0          Message Class0            0             Class 00            1            Class 1   Default meaning: ME-specific.1            0            Class 2   (U)SIM specific message1            1            Class 3   Default meaning: TE specific (see 3GPP TS 27.005 [8])

若对这里感兴趣可以参看3GPP协议23.038。一般情况下,我们这里的取值也就是00,04,或者08分别代表的是7比特编码方式(英语),8比特编码方式(法语)和16比特编码方式(汉字)。第3个8位位组表示的是短消息有效期

TP-VP value
[td]
Validity period value
0 to 143 [td](TP-VP + 1) x 5 minutes (i.e. 5 minutes intervals up to 12 hours)
144 to 167 [td]12 hours + ((TP-VP -143) x 30 minutes)
168 to 196 [td](TP-VP – 166) x 1 day
197 to 255 [td](TP-VP – 192) x 1 week

表2-1-1.短消息有效期

上表的TP-VP也就是这里这个8位位组所换算成的十进制数所对应的值。一般有效期12小时,这里是8F;一天这里是A7;一周这里是AD,最长这里是FF。

第4个8位位组是短消息内容部分的长度,之后的部分也就是短消息内容的编码了

举例:

08918+16950092500011000B815109200922F90000A7023119

08918+169500925000   短消息中心号码

11000B815109200922F9 目的地号码

0000A7023119  7比特编码普通短消息,有效期是一天,内容长度2个8位位组,3119即是内容编码 2.2接收短消息

Address-Length [td]SMSC地址信息的长度,8个八位位组
Type-of-Address [td]SMSC地址格式用国际格式号码(在前面加‘+’)
Address-Value [td]短消息中心
TP- First-Octet (PDUType) [td]基本参数发送,TP-VP用相对格式
TP-MR [td]消息编号,1个8位位组
TP-Originating-Address [td]发送方地址
TP-PID [td]协议标识,一般情况下这里是00
TP-Data-Coding-Scheme [td]短信类型,编码方式,1个8位位组
TP-Service-Centre-Time-Stamp [td]SC收到本条消息的时间,一般为7个8位位组
TP-UDL
[td]用户数据长度
TP-UD [td]用户数据

接收的短消息LOG和发送的差不多,第一个模块是短消息中心模块,如同发送短消息的中心号码解析发送方地址几乎和发送短消息模块的相同,唯一的不同处就是第一个8位位组的取值是不同的若没有短消息状态报告需求,这里取值是04,若有短消息状态报告需求,这里取值是24。接收短信内容模块的第一个8位位组是00,表示的是协议标识;第2个8位位组表示短信类型和编码方式,具体内容如同发送的短消息模块解析;第3个到第9个8位位组是短消息网络侧发送该短信的时间;第10个8位位组标示的是短消息内容长度;之后就是短消息内容编码

0891685109200905F0040B91685109200922F9000090403241129223023119

0891685109200905F0 短消息中心号码

040B91685109200922F9 发送方号码

000090403241129223023119  7比特编码方式,普通短消息,到达SC的时间是09/04/23 14:21:29,内容长度2个8位位组,内容为3119

2.3短消息状态报告

Address-Length [td]SMSC地址信息的长度,8个八位位组
Type-of-Address [td]SMSC地址格式用国际格式号码(在前面加‘+’)
Address-Value [td]短消息中心
TP- First-Octet (PDUType) [td]基本参数发送,TP-VP用相对格式
TP-MR [td]消息编号
TP-Recipient-Address [td]接收到SUBMIT或COMMAND的地址
TP-Service-Centre-Time-Stamp [td]SC收到信息的时间
TP-Discharge-Time [td]与TP-Status相关的时间
TP-Status [td]指示短信当前的状态

下面介绍状态报告模块状态报告的第一个模块也是短消息中心地址,分析同上。第2个模块是目的地址,他与上边2类短信LOG的不同是第一个8位位组的取值是06,标示此条短消息为状态报告第2个8位位组标示的是要求状态报告的短消息编号。短消息内容部分的第1个到第7个8位位组表示的是短消息到达网络侧的时间,第8个到第14个表示的是短消息成功发送的时间

 

此条目发表在未分类分类目录,贴了标签。将固定链接加入收藏夹。