首页 >> 大全

GSM短信编码与协议分析

2023-08-02 大全 31 作者:考证青年

1 短信基本原理

由ESTI制订的SMS规范中,一共有三种方式来发送和接收SMS信息:Block Mode, Text Mode和PDU Mode。Block Mode已很少使用。Text Mode是纯文本方式,可使用不同的字符集,从技术上说也可用于发送中文短消息,但国内手机基本上不支持,主要用于欧美地区。PDU Mode被所有手机支持,可以使用任何字符集,这也是手机默认的编码方式。 PDU串表面上是一串ASCII码,由‘ 0’-‘9’、 ‘A’-‘F’这些数字和字母组成。它们是8位字节的十六进制数,或者BCD码十进制数。PDU串不仅包含可显示的消息本身,还包含很多其它信息,如SMS服务中心号码、目标号码、回复号码、编码方式和服务时间等。在PDU Mode中,可以采用三种编码方式来对发送的内容进行编码,它们是7-bit、8-bit和UCS2编码。7-bit编码用于发送普通的ASCII字符,它将一串7-bit的字符(最高位为0)编码成8-bit的数据,每8个字符可“压缩”成7个。我们通常在短信中所说的ASCII编码方式,实际上是指7-bit编码,而7-bit编码方式不仅能表示普通的ASCII字符,还可以表示一些特殊字符,因此7-bit编码和ASCII编码实际上是两个完全不同的概念,它们仅仅在一些普通的ASCII字符上编码相同;8-bit编码通常用于发送数据消息,比如图片和铃声等;而UCS2编码用于发送字符。PDU串的用户信息(TP-UD)段最大容量是140字节,所以在这三种编码方式下,可以发送的短消息的最大字符数分别是160、140和70。这里,将一个英文字母、一个汉字和一个数据字节都视为一个字符。

2 短信协议栈

GSM定义的短信基本架构如下图:

GSM短信编码与协议分析(1)

短信协议栈如下图:

GSM短信编码与协议分析(1)

SM-AL: Short Layer

SM-TL: Short Layer

SM-RL: Short Relay Layer

其它术语请参考《GSM 03.40》相关文档

3、短信PDU格式

参考上图,我们着重讨论在SM-TL层的PDU结构。在SM-TL层,定义了以下六种PDU类型: SMS-:从SC到MS传递短信 SMS-- SMS-:从MS到SC传递短信 SMS-- SMS-- SMS- 不同的PDU类型,定义了不同的字段要求,比如SMS-定义了TP-MTI, TP-MMS, TP-RP, TP-UDHI, TP-OA, TP-PID, TP-DCS, TP-SCTS, TP-UDL, TP-UD,这些字段有些只占用一个位,有些占用多个位或一个字节或多个字节。图示布局如下:

GSM短信编码与协议分析(2)

4、长短信分析

随着手机终端的飞速发展,对长短信的支持越来越灵活,长短信应用也越来越广泛。比如现在很多手机已经支持自动拆分长短信为多条短信发送。在此我们详细研究长短信的编码方式。

在以上章节举例的PDU字段中,需要特别留意几个字段:TP-UDHI, TP-UDL,TP-UD,对于一般非超长的普通短信,TP-UDHI字段是可选的,除非特殊的WAP Push等应用。但是对于超长短信,这个字段必须要设置为1,才能构造成功的超长短信让手机自动合并。

TP-UDHI(TP?User?Data??)字段在第一个字节的第7 bit位(bit 6),占用一个bit,用来标识该短信是否拥有一个头信息,当TP-UDHI=0时,表示在TP?UD中没有头信息,当TP-UDHI=1时,表示在TP?UD中含有头信息。长短信必须要在TP-UD中构造特殊的头部信息。

短信消息体中的头部信息的结构可参考如下:

FIELD

of User Data 1 octet

?? "A" 1 octet

of ? "A" 1 octet

? "A" Data 0 to "n"

?? "B" 1 octet

of ? "B" 1 octet

? "B" Data 0 to "n"

?? "X" 1 octet

of ? "X" 1 octet

? "X" Data 0 to "n"

头信息的作用有很多,其中之一就是用来标识超长短信(集联短信)。下面用一个实际的例子来说明头信息的含义。

这是一条实际发送的8bit编码超长短信内容(TP_UD)的16进制编码:

05 00 03 1D 02 01 31 31 31 31 31 31 31……

05 : UDHL(User Data ) 头信息长度,表示头信息中剩下数据的长度是5个字节;

00 : ??,当它取值为00时,表示此短信是采用8-bit 的超长短信;

03 : of ?,表示剩下数据的长度是3个字节;

1D: ? Data,这里表示超长短信头信息中的 值, 用来标识一条唯一的超长短信,它通过一个算法来自动生成;

02: ? Data, 这里表示超长短信头信息中的 值,即一条超长短信一共由几段组成;

01: ? Data, 这里表示超长短信头信息中的 值,即该条短信属于整个超长短信中的第几段;

以上便是超长短信中头信息的内容,后面的内容即为短消息的内容本身,这里的内容全是数据“1” 。

需要注意的是,PDU串的用户信息长度(TP-UDL),在各种编码方式下意义有所不同。7-bit编码时,指原始短消息的字符个数,而不是编码后的字节数。8-bit编码时,就是字节数。UCS2编码时,也是字节数,等于原始短消息的字符数的两倍。如果用户信息(TP-UD)中存在一个头(基本参数的TP-UDHI为1),在所有编码方式下,用户信息长度(TP-UDL)都等于头长度与编码后字节数之和。如果采用GSM 03.42所建议的压缩算法(TP-DCS的高3位为001),则该长度也是压缩编码后字节数或头长度与压缩编码后字节数之和。

5、移动短信协议分析

中国移动关于短信的应用协议包括:CMPP/SMPP,这些应用层的协议最终传递到手机终端,均需要进行协议的映射或转换。以下着重探讨短信在各种协议下的编码对应关系。

格式编码字段字段说明

在CMPP协议规范中定义信息格式:

0:ASCII串;

3:短信写卡操作;

4:二进制信息;

8:UCS2编码;

15:含GB汉字

(SMPP v3.4协议定义)Bits

7 6 5 4 3 2 1 0

0 0 0 0 0 0 0 0 SMSC

0 0 0 0 0 0 0 1 IA5(CCITT T.50)/ASCII

0 0 0 0 0 0 1 0 Octet (8-bit )

0 0 0 0 0 0 1 1 Latin 1(ISO-8859-1)

0 0 0 0 0 1 0 0 Octet (8-bit )

0 0 0 0 0 1 0 1 JIS (X 0208-1990)

0 0 0 0 0 1 1 0 (ISO-8859-5)

0 0 0 0 0 1 1 1 Latin/(ISO-8859-8)

0 0 0 0 1 0 0 0 UCS2

0 0 0 0 1 0 0 1

0 0 0 0 1 0 1 0 ISO-2022-JP(Music Codes)

0 0 0 0 1 0 1 1

0 0 0 0 1 1 0 0

0 0 0 0 1 1 0 1 Kanji JIS

0 0 0 0 1 1 1 0 KS C 5601

0 0 0 0 1 1 1 1

...

1 0 1 1 1 1 1 1

1 1 0 0 x x x x GSM MWI

1 1 0 1 x x x x GSM MWI

1 1 1 0 x x x x

1 1 1 1 x x x x GSM class

GSM PDUTP-DCS在GSM03.40, GSM03.38规范中定义具体定义请参考下表Data (TP-DCS)

6、闪信/免提短信分析

在某些手机上(所有的,某些, , 等等..)class 0信息将被显示为一种flash SMS信息。这些信息只要一到达,将立即显示在屏幕上,而不需要按任何按钮。如果数据的编码方式是设置成16-bit (ucs2), 而且信息以"0001"开头,那么它将作为一个闪烁的flash 显示。

Octet Value

TP-DCS 18 16 bits (UCS2), class 0

TP-VP AA

TP-UDL 0C User Data , 12

TP-UD 00 01 00 41 00 6C 00 65 00 72 00 74 User Data, "Alert"

这个表显示了Flash SMS中的相关信息。

第一个字符("00 01")使能闪烁。这样的消息最长就是69个字符。

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了