今天再次复习一下GSM协议特别是长短信,顺便收藏下
1.GSM协议
GSM协议一共有三种方式来发送和接收SMS信息:Block Mode, Text Mode和PDU Mode。Block Mode已是昔日黄花,目前很少用了。Text Mode是纯文本方式,可使用不同的字符集,从技术上说也可用于发送中文短消息,但国内手机基本上不支持,主要用于欧美地区。PDU Mode被所有手机支持,可以使用任何字符集,是手机默认的编码方式,也是我们在网管系统中使用的编码方式,下面我们来重点介绍一下PDU编码格式。
前提条件:发送PDU编码的短消息之前需要输入两个指令
1.将GSM设置为PDU模式
AT+CMGF=0 //设置短信编码方式 0为PDU模式 1为TEXT模式
2.指定将要发送PDU编码后的数据长度
AT+CMGS = LEN //LEN为编码后的数据长度
2.PDU短信编码格式解析
元素 | 名称 | 长度 | 描述 | 备注 |
SCA | Service Center Address | 1-12 | 短消息服务中心号码 | 可为空,用1个字节的00填充 |
PDU-Type | Protocol Data Unit | 1 | 协议数据单元类型 | 注意长短信的区别 |
MR | Message Reference | 1 | 所有成功的短信发送参考数目(0..255) | |
OA | Originator Address | 2-12 | 发送方地址(手机号码) | 互斥出现 |
DA | Destination Address | 2-12 | 接收方地址(手机号码) | |
PID | Protocol Identifer | 1 | 参数显示消息中心以何种方式处理消息内容(比如FAX,Voice) | |
DCS | Data Coding Scheme | 1 | 参数显示用户数据编码方案 | |
SCTS | Service Center Time Stamp | 7 | 消息中心收到消息时的时间戳 | 发送时无该字段 |
VP | Validity Period | 0,1,7 | 参数显示消息有效期 | |
UDL | User Data Lenghth | 1 | 用户数据长度 | |
UD | User Data | 0-140 | 用户数据 |
3.长短信与普通短信
在介绍PDU编码的各个元素之前,需要简单介绍一下长短信与普通短信的区别,因为两者在PDU编码上有一定的区别。
普通短信UD区长度为140字节,超过140字节就得拆分成多条短信,拆分后的短信经过短信网关、短信中心的存储转发后到达终端的顺序可能和原发送顺序不同,这就使得接收方对于信息内容的理解出现困扰,1996年颁布GSM03.40V4.13.0中定义了长短信(Concatenated Short Message),所谓的长短信就是由一组相互独立的不超过普通短信长度的子短信组成,在网络传输中被视为多条普通短信,而在终端上被合并显示。
4.PDU编码元素详解
4.1SCA
SCA = length + type + address
SCA服务中心地址由三部分:第一个部分表示服务中心地址长度,第二个部分表示服务中心类型,第三个部分表示服务中心地址。
Length:type和address的长度之和(如果Length为00则不提供后面部分,发送时终端将自动从SIM卡中读取并填充SCA)
Type:短信中心地址的类型(81:国内 91:国际 常用91)
Address:服务中心地址(对原地址做奇偶对调,如果原地址长度为奇位数,则末尾补F后做奇偶对调)
SCA示例
短信中心 | PDU编码 |
+8613010452500 | 0891683110402505F0 |
13010452500 | 07813110402505F0 |
123456 | 0481214365 |
PDU编码组成部分如下
Lenghth | Type | Address |
08 | 91 | 683110402505F0 |
07 | 81 | 3110402505F0 |
04 | 81 | 214365 |
注意:SCA的长度不包含在“PDU编码后的数据总长度”,即AT+CMGS = LEN中的LEN当中
4.2PDU-Type
协议数据单元类型是用1个字节表示的8个位图,具体含义如下
Bit No. | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
发送方 | RP | UDHI | SRR | VPF | VPF | RD | MTI | MTI |
接收方 | SRI | \ | \ | MMS |
其中,长短信与普通短信有区别的位,用粗体表示。
RP:应答路径 0-未设置 1-设置
UDHI:用户数据头标识(User Data Header Indicator)0-用户数据(UD)部分不包含头信息1-用户数据(UD)开始部分包含用户头信息
SRR:请求状态报告(Status Report Request), 0-不需要报告 1-需要报告
SRI:状态报告指示(Status Report Indication)
注:此值仅被短消息服务中心设置 0-状态报告将不会返回给短消息实体(SME) 1-状态报告将返回给短消息实体(SME)
VPF:有效期格式(Validity Period Format) 00-VP段没有提供(长度为0) 01-保留 10-VP段以整型形式提供(相对的) 11-VP段以8位位组的一半形式提供(绝对的)
RD:拒绝复本(Reject Duplicate) 0-通知短消息服务中心(SMSC)接受一个消息(SMS-SUBMIT),即该消息是先前已提交过的,并还存在与SMSC中未发送出去。MS重复的条件是:消息参考(MR)、接收方地址(DA)及发送方地址(OA)相同 1-通知SMSC拒绝一个重复的SMS
MMS:有更多的消息需要发送(More Message to Send)
0-在SMSC中有更多的信息等待MS1-在SMSC中没有更多的信息等待MS
MTI:信息类型指示(Message Type Indicator) 待查 可填0
以上可知
PDU-Type | 普通短信 | 长短信 |
UDHI标识位 | 0 | 1 |
MMS标识位 | 1 | 最后一条为1其余为0 |
4.3UDL用户数据长度
普通短信 | 长短信 | |
UDL | 短信内容长度 | UDH用户数据头长度+SM拆分后短信内容长度 |
4.4UD用户数据
普通短信 | 长短信 | |
UD | 全部为短信内容 | UDH用户数据头+SM拆分后短信内容 |
5长短信UD
工程上我们需要判断待发送的短信内容长度,所以长短信的UD编码是一定用的到的,普通短信相对简单,下面重点介绍一下长短信的UD组成。
长短信UD用户数据(User Data)格式
UD = UDH + SM
5.1UDH用户数据头
长短信的UDH固定为6或7,长度为6的常用。
示例如下:
UDHL | IEI | IEDL | IED | ||
Reference No. | Maximum No. | Current No. | |||
05 | 00 | 03 | C6 | 02 | 01 |
看不懂?莫慌,下文对详细介绍每个字节。
UDH = UDHL + IE
UDHL | IE | ||
IE”A” | …… | IE”N” |
1) UDHL用户数据头长度(User Data Header Length)
一个字节,表示用户数据头的字节数,不包含本字节,UDHL+1=整个用户数据头长度
2) IE用户数据头信息单元(Information Element)
IE中可以包含IE”A”、IE”B”、……、IE” N”等多个信息单元,每个信息单元又分为
IEI | IEDL | IED |
a) IEI信息单元标识(Information Element Identifier)
00:Concatenated short messages
01:Special SMS Message Indication
02:Reserved
03:Value not used to avoidmisinterpretation as <LF> character
04:Application port addressing scheme,8bit address
05:Application port addressing scheme,16 bit address
06:SMSC Control Parameters
07:UDH Source Indicator
08:Concatenated short message [16-bit reference number]
09:Wireless Control Message Protocol
0A-6F:Reserved for future use
70-7F:SIM Toolkit Security Headers
80- 9F:SME to SME specific use
A0– BF:Reserved forfuture use
C0– DF:SC specificuse
E0– FF:Reserved forfuture use
00和08都表示长短信,区别在于00是用一个字节表示“参考编号”,而08用两个字节表示“参考编号”(见IED组成说明)。
b) IEDL信息单元数据长度(Length of Information Element)
一个字节,表示信息单元长度,也就是IED的字节数,不包含本字节IED信息单元数据(Information Element Data)
c) 长短信的IED由3字节组成
即IEI为00或08时的IED如下
第一字节:参考编号(Reference Number),参考编号相同的为同一长短信
第二字节:总条数(Maximum number),长短信拆分后的总条数
第三字节:当前短信序号,当前短信是长短信中的第几条
现在再看开头的UDH示例就能看懂了吧,附上一个总长度为7个字节的长短信UDH示例:
UDHL | IEI | IEDL | IED | ||
Reference No. | Maximum No. | Current No. | |||
06 | 08 | 03 | C6 C6 | 02 | 01 |
5.2SM短消息
SM Short Message用户短信内容文本有三种编码方式
编码(无压缩) | 单条字短信长度(字节) | 特点 |
7-bit | 153 | 只能发送ASCII字符 |
8-bit | 140-UDHL = 134 | 流数据(图信号等) |
16-bit USC2 | (140-UDHL)/2 = 67 | Unicode字符(中文常用) |
在压缩模式下单条子短信长度最多134字节,其中包含压缩头(Compression Header)、压缩尾(Compression Footer)在内。
SM内容格式化的编码方式这里就不再赘述了,最后,有两个临界值需要注意一下:判断是否拆分短信的长度是140字节或70个编码后的Unicode字符;而判断拆分为多少条的长度是67(需要去除UDHL)。