3GPP PDU短信协议解析

本文主要对3GPP PDU短信协议进行了梳理,详细讲解具体格式的使用说明。

发送短信的格式有TEXT和PDU两种,TEXT仅能支持英文字符的发送,不能发送中文短信,PDU格式短信支持7BIT、8BIT、UCS2三种内容编码格式。
7-bit编码用于发送普通的ASCII字符,即英文短信,最多可发送160字符。8- bit编码通常用于发送数据消息。UCS2编码用于发送Unicode字符,可发送中文字符,最多发送70字符。

下表为PDU短信收发格式中各个字段说明

元素 名称 长度 描述
SCA Service Center Address 1-12 短消息服务中心号码
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 用户数据

发送PDU
Eg:
向手机号码15819043134发送一条短信,内容为“hello”
0011000D91685118093431F40000C405E8329BFD06

向手机号码15819043134发送一条短信,内容为“你好”
0011000B815118093431F40008C404C4E3BAC3
下表为发送格式内容说明

SCA PDU-Type MR DA PID DCS VP UDL UD
1-12 1 1 2-12 1 1 0/1/7 1 0-140
00 11 00 0D91685118093431F4 00 00 C4 05 E8329BFD06
00 11 00 0B815118093431F4 00 08 C4 04 C4E3BAC3

接收PDU
Eg:
从15819043134接收一条短信,内容“hello”
0891683110402505F0240BA15118093431F400000111208160302305E8329BFD06

从15819043134接收一条短信,内容“你好”
0891683110402505F0240BA15118093431F400080111208160042304C4E3BAC3
下表为发送格式内容说明

SCA PDU-Type OA PID DCS SCTS UDL UD
1-12 1 2-12 1 1 7 1 0-140
0891683110402505F0 24 0BA15150800576F7 00 00 01112081603023 05 E8329BFD06
0891683110402505F0 24 0BA15150800576F7 00 08 01112081600423 04 C4E3BAC3

接下来就几个比较重要字段进行详细讲解

SCA:短消息服务中心地址格式
服务中心地址包含三个部分:1-12个8位位组 第一个位组指示服务中心地址长度,第二个位组指示服务中心类型,第三个位组为服务中心地址。

Type:短信中心地址的类型(81:指国内的号码 91:指国际的号码 91最常用(资料里都说是这样,但根据后面的表格:国内应该是A1,81是未知!!))91H=10010001B 具体意义如下表

bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
1 类型 类型 类型 号码鉴别 号码鉴别 号码鉴别 号码鉴别

类型:000-未知 001-国际 010-国内 111-留作扩展
号码鉴别:0000-未知 0001-ISDN/电话号码(E.164/E.163) 1111-留作扩展
SCA eg:

短信中心 PDU编码
+8613010452500 0891683110402505F0
13913812345 07813119832143F5

注:AT指令中 AT+CMGS= Len不包含此段位组的长度

PDU Type:是发送和接受短信的PDU中的第一个8位位组
Eg: 发送方:例 11h=00010001b

bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
RP UDHI SRR VPF VPF RD MTI MTI
0 0 0 1 0 0 0 1

Eg: 接收方:例 24h=00100100b

bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
RP UDHI SRI VPF VPF MMS MTI MTI
0 0 1 0 0 1 0 0

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),此值仅被SMSC设置
0-在SMSC中有更多的信息等待MS
1-在SMSC中没有更多的信息等待MS

MTI:信息类型指示(Message Type Indicator)
目前不清楚

DA/OA:接收方与发送方地址2-12个8位位组
Eg:0D91685118093431F4

Lenghth Type Address
0D 91 685118093431F4

PID:协议标识(Protocol Identifier)
对于标准情况下的MS-to-SC短消息传送,只需设置PID为00

DCS:数据编码方案(DataCoding Scheme)

bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 描述
0 0 0 0 0 0 0 0 7bit
0 0 0 0 0 1 0 0 8bit
0 0 0 0 1 0 0 0 UCS2

Bit No.7与Bit No.6:
一般设置为00

Bit No.5:
0-文本未压缩
1-文本用GSM标准压缩算法压缩

Bit No.4:
0-指示Bit No.1 Bit No.0为保留位,不含信息类型信息
1-指示Bit No.1 Bit No.0含信息类型信息

Bit No.3与Bit No.2:
00-默认的字符集,每字符占7bit,此时最大可发送160字符
01-8bit,此时最大可发送140字符
10-USC2(16bit),发送双字节字符集
11-预留

Bit N0.1与Bit No.0:
00-Class 0,短消息直接显示在屏幕上
01-Class 1,
10-Class 2(SIM卡特定信息),
11-Class 3

VP:信息有效期(Validity Period)
第一种情况(相对的):VPF=10
VP=AAH(四天)

第二种情况(绝对的):VPF=11

时区
91 40 41 01 31 65 80

表示:19-04-14 10:31:56

VP段以整形或半个8位位组形式提供

第一种情况,VP为一个8位组,给定有效期的长度
从消息被SMSC接收开始计算

VP 相应的有效期
00-8F (VP+1)*5分钟 从5分钟间隔到12小时
90-A7 12小时+(VF-143)*30分钟
A8-C4 (VP-166)*1天
C5-FF (VP-192)*1周

第二种情况,VP为七个8位组,给定有效期终止的绝对时间 时间形式与SCTS形式一致

SCTS:服务中心时间戳(Service Center Time Stamp)
占用7个8位组,格式和VP第二种情况一致,请参考其中的表格
UDL:用户数据长度(User Data Lenghth)
UDL以整形形式提供,指示后面用户数据段的长度(UD的8位组的个数)
UD:用户数据(User Data)

英文编码:7bit编码,去掉字节最高位,依次将下一字节的低几位移至上一字节的高几位形成新的8位编码

Eg:Test
T:01010100 e:01100101 s:01110011 t:01110100
去最高位0,变为7位
T:1010100 e:1100101 s:1110011 t:1110100
后面低位移至前面高位形成8位编码
Test:11010100 11110010 10011100 00001110
UD:D4F29C0E UDL:04
中文编码:取USC2编码 高低字节交换即可

注意:7bit编码的UDL部分计算的是编码前的字符串长度,而不是编码后的8位组个数!
注:AT+CMGS=中Len为出SCA外8位组的个数

发布了33 篇原创文章 · 获赞 7 · 访问量 8357

猜你喜欢

转载自blog.csdn.net/muchong123/article/details/89290429