×

PDU编码 GSM协议

GSM协议,短信PDU编解码

woxigouadmin woxigouadmin 发表于2020-06-29 21:00:59 浏览508 评论0

抢沙发发表评论

这个文章的介绍有写地方不太好理解,特别是长短信VP部分可以参考这个文章里面的解析《GSM协议PDU编码长短信方法


开始 PDU 短信编码的解析。 这是我的理解,更多详细资料参考下列标准: 

GSM 03.04    着重介绍短信发送中对字符集的控制部分 

GSM 03.08 

GSM 03.41 

GSM 07.05    介绍 at 的一些控制命令 

GSM 07.07    着重介绍 at 的短信相关命令,可以说是 at 的 sms 规范 元素 名称 长度 描述 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 格式: 

SCA     PDU-Type  MR    DA        PID   DCS    VP      UDL     UD 

1-12         1            1       2-12        1       1      0,1,7      1    0-140 

示例: 

向 15050850677 发送一条短信,内容“Test” 

0011000D91685150800576F70000C404D4F29C0E 

向 15050850677 发送一条短信,内容“你好” 

0011000B815150800576F70008C4044F60597D 

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     0D916851508005    00            00    C4         04       D4F29C0E 

                                                             76F7   

00         11              00      0B815150800576F7 00            08    C4          04       4F60597D 

  

接收方 PDU 格式: 

SCA     PDU-Type   OA     PID    DCS   SCTS  UDL     UD 

1-12     1                2-12      1       1        7       1      0-140 

示例: 

从 15050850677 接收一条短信,内容“Test” 

0891683110402505F0240BA15150800576F700000111208160302304D4F2 9C0E 

从 15050850677 接收一条短信,内容“你好” 

0891683110402505F0240BA15150800576F7000801112081600423044F60 597D 

SCA                      PDUType    OA                            PID DCS       SCTS            UDL     UD 

1-12                         1              2-12                           1     1             7                1      0-140 

08916831104025    24          0BA151508005            00    00    01112081603    04  D4F29C

05F0                                                      76F7                                            023                   0E 

08916831104025   24           0BA151508005            00    08    01112081600    04   4F6059

05F0                                                      76F7                                           423                   7D   

 

SCA:短消息服务中心地址格式 

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

示例:0891683110402505F0 

Lenghth         Type                Address 

08                     91                  683110402505F0

Lenghth:服务中心地址长度 指示 Type+Address 部分位组长度(例中: 91683110402505F0 中位组 8 个:08)

如果 Lenghth 部分为“00”则不提供后面部分,发送时终端将自动从 SIM 卡中读取并填充 

SCA 

Type:短信中心地址的类型(81:指国内的号码 91:指国际的号码  91 最常用) 

91H=10010001B 具体意义如下表: 

BIT No.    7      6        5         4             3       2      1     0   

               1     类型   类型    类型   号码鉴别  同3    同   同3 

  

类型:000-未知  001-国际  010-国内  111-留作扩展 

号码鉴:0000-未知  0001-ISDN/电话号码(E.164/E.163)  1111-留作扩展 

SCA 示例: 

短信中心                       PDU 编码 

+8613010452500         0891683110402505F0 

13010452500                07813110402505F0 

123456                          0481214365 

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

  

PDU Type:是发送和接受短信的 PDU 中的第一个 8 位位组 

发送方:例 11h=00010001b 

Bit No.         7       6        5        4          3         2        1         0 

                  RP    UDHI    SRR   VPF       VPF    RD     MTI      MTI 

                  0         0         0         1          0        0        0          1 

接收方:例 24h=00100100b 

Bit No.         7       6         5          4        3          2         1          0 

                  RP    UDHI   SRI                             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) 不太理解 有待于再查资料 

  

MR:信息参考 不太理解 置为 00 即可 

  

DA/OA:接收方与发送方地址 

DA 与 OA 编码方式是一样的 2-12 个 8 位位组 

例:0D91685150800576F7 

           Lenghth            Type            Address 

            0D                       91             685150800576F7 

Lenghth:地址长度 指 8615050850677 的长度。与 SCA 中不一样! 

Type:地址类型  指示国内(81) 还是国际(91) 

示例: 

号码                             PDU编码 

+8615050850677        0D91685150800576F7 

15050850677              0B815150800576F7 

123456                        0681214365 

  

PID:协议标识(Protocol Identifier) 

对于标准情况下的 MS-to-SC 短消息传送,只需设置 PID 为 00 

  

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

Bit No.    7   6   5   4   3   2   1   0 描述 

示例:     0   0   0   0   0   0   0   0  00h 7bit 数据编码 默认字符集  

               1   1   1   1   0   1   1   0 F6h 8bit 数据编码 Class1 

               0   0   0   0   1   0   0   0 08h USC2(16bit)双字节字符集 

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 

示例: 

DCS            字符集               信息 Class 

00                7-bit                  No Class 

F0                7-bit                  Class 0(Immediate Display) 

F1                7-bit                  Class 1(Mobile Equipment-specific) 

F2                7-bit                  Class 2(SIM specific Message) 

F3                7-bit                  Class 3(Terminate Equipment-specific) 

F4                8-bit                  Class 0(Immediate Display) 

F5                8-bit                  Class 1(Mobile Equipment-specific) 

F6                8-bit                  Class 2(SIM specific Message) 

F7                8-bit                  Class 3(Terminate Equipment-specific) 

08               16-bit No           Class 18 16-bit Class 0(Immediate Display) 

  

VP:信息有效期(Validity Period) 

第一种情况(相对的):VPF=10  VP=AAH(四天) 

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

    年       月        日        时         分        秒       时区 

    03       80       02        90        54       33       20 

           表示:03-08-20 09:45:33 

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 位编码 

示例:Test 

             T:01010100  e:01100101  s:01110011  t:01110100

      去最高位 0,变为 7 位              

             T:1010100  e:1100101  s:1110011  t:1110100 

      后面低位移至前面形成 8 位编码

             Test:11010100111100101001110000001110 

             UD:D4F29C0E   UDL:04 

中文编码:取 USC2 编码  高低字节交换即可 

注:AT+CMGS=<Len><cr>中 Len 为出 SCA 外 8 位组的个数 


下面可以不看,这是个人根据文章拆解的

第一条0891683108200309F06005A15995F90008025072907271230F060804E4000303002E003200393002

SCA     089168 3108200309F0   13800230900  短信中心 1-12位

PDUType 60   1位

OA      05 A1 5995F9    05是长度 A1是类型通道 2-12位 号码是95599

   

PI       00     1位  协议标识 MS-to-SC 短消息传送,只需设置 PID 为 00

DCS     08     1位  00是7位,F6是8位,08是USC2(16bit)

SCTS    02507290727123  7位 服务中心时间戳 “02-50-72 90:72:71+23” “20-05-27 09:27:09+32”

UDL     0F     1位

VP      060804E4000303  0或1或7位,本例是7位,因为是长短信

UD      002E003200393002   内容0-140位

 

第二条短信

089168 3108200309F0 64 05 A1 5935F3 00 08 02601021603223 51 0608041CE90202