短信协议栈如下图:
SM-AL: Short Message Application Layer
SM-TL: Short Message Transfer Layer
SM-RL: Short Message Relay Layer
其它术语请参考《GSM 03.40》相关文档
4、长短信分析
随着手机终端的飞速发展,对长短信的支持越来越灵活,长短信应用也越来越广泛。比如现在很多手机已经支持自动拆分长短信为多条短信发送。在此我们详细研究长短信的编码方式。
在以上章节举例的PDU字段中,需要特别留意几个字段:TP-UDHI, TP-UDL,TP-UD,对于一般非超长的普通短信,TP-UDHI字段是可选的,除非特殊的WAP Push等应用。但是对于超长短信,这个字段必须要设置为1,才能构造成功的超长短信让手机自动合并。
TP-UDHI(TP?User?Data?Header?Indicator)字段在第一个字节的第7 bit位(bit 6),占用一个bit,用来标识该短信是否拥有一个头信息,当TP-UDHI=0时,表示在TP?UD中没有头信息,当TP-UDHI=1时,表示在TP?UD中含有头信息。长短信必须要在TP-UD中构造特殊的头部信息。
短信消息体中的头部信息的结构可参考如下:
FIELD LENGTH
Length of User Data Header 1 octet
Information?Element?Identifier "A" 1 octet
Length of Information?Element "A" 1 octet
Information?Element "A" Data 0 to "n" octets
Information?Element?Identifier "B" 1 octet
Length of Information?Element "B" 1 octet
Information?Element "B" Data 0 to "n" octets
Information?Element?Identifier "X" 1 octet
Length of Information?Element "X" 1 octet
Information?Element "X" Data 0 to "n" octets
头信息的作用有很多,其中之一就是用来标识超长短信(集联短信)。下面用一个实际的例子来说明头信息的含义。
这是一条实际发送的8bit编码超长短信内容(TP_UD)的16进制编码:
05 00 03 1D 02 01 31 31 31 31 31 31 31……
05 : UDHL(User Data Header Length) 头信息长度,表示头信息中剩下数据的长度是5个字节;
00 : Information?Element?Identifier,当它取值为00时,表示此短信是采用8-bit reference的超长短信;
03 : Length of Information?Element,表示剩下数据的长度是3个字节;
1D: Information?Element Data,这里表示超长短信头信息中的reference number值,reference number用来标识一条唯一的超长短信,它通过一个算法来自动生成;
02: Information?Element Data, 这里表示超长短信头信息中的Maximum number值,即一条超长短信一共由几段组成;
01: Information?Element Data, 这里表示超长短信头信息中的Sequence number值,即该条短信属于整个超长短信中的第几段;
以上便是超长短信中头信息的内容,后面的内容即为短消息的内容本身,这里的内容全是数据“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 Msg_Fmt 在CMPP协议规范中定义 信息格式:
0:ASCII串;
3:短信写卡操作;
4:二进制信息;
8:UCS2编码;
15:含GB汉字
SMPP Data_coding (SMPP v3.4协议定义) Bits
7 6 5 4 3 2 1 0 Meaning
0 0 0 0 0 0 0 0 SMSC Default Alphabet
0 0 0 0 0 0 0 1 IA5(CCITT T.50)/ASCII
0 0 0 0 0 0 1 0 Octet unspecified(8-bit binary)
0 0 0 0 0 0 1 1 Latin 1(ISO-8859-1)
0 0 0 0 0 1 0 0 Octet unspecified(8-bit binary)
0 0 0 0 0 1 0 1 JIS (X 0208-1990)
0 0 0 0 0 1 1 0 Cyrllic (ISO-8859-5)
0 0 0 0 0 1 1 1 Latin/Hebrew(ISO-8859-8)
0 0 0 0 1 0 0 0 UCS2
0 0 0 0 1 0 0 1 Pictogram Encoding
0 0 0 0 1 0 1 0 ISO-2022-JP(Music Codes)
0 0 0 0 1 0 1 1 reserved
0 0 0 0 1 1 0 0 reserved
0 0 0 0 1 1 0 1 Extended Kanji JIS
0 0 0 0 1 1 1 0 KS C 5601
0 0 0 0 1 1 1 1 reserved
...
1 0 1 1 1 1 1 1 reserved
1 1 0 0 x x x x GSM MWI control
1 1 0 1 x x x x GSM MWI control
1 1 1 0 x x x x reserved
1 1 1 1 x x x x GSM Messsage class control
GSM PDU TP-DCS 在GSM03.40, GSM03.38规范中定义 具体定义请参考下表Data Coding Scheme(TP-DCS)
6、闪信/免提短信分析
在某些手机上(所有的Nokias,某些Siemens, Ericsson, Motorola 等等..)class 0信息将被显示为一种flash SMS信息。这些信息只要一到达,将立即显示在屏幕上,而不需要按任何按钮。如果数据的编码方式是设置成16-bit unicode (ucs2), 而且信息以"0001"开头,那么它将作为一个闪烁的flash message显示。
Octet Value Description
TP-DCS 18 16 bits (UCS2), message class 0
TP-VP AA Validity period
TP-UDL 0C User Data Length, 12 octets
TP-UD 00 01 00 41 00 6C 00 65 00 72 00 74 User Data, message "Alert"
这个表显示了Flash SMS中的相关信息。
第一个unicode字符("00 01")使能闪烁。这样的消息最长就是69个unicode字符。