手机SMS的PDU编码

目前,发送短消息常用Text和PDU(Protocol Data Unit,协议数据单元)模式。使用Text模式收发短信代码简单,实现起来十分容易,但最大的缺点是不能收发中文短信;而PDU模式不仅支持中文短信,也能发送英文短信。PDU模式收发短信可以使用3种编码:7-bit、8-bit和UCS2编码。7-bit编码用于发送普通的ASCII字符,8-bit编码通常用于发送数据消息,UCS2编码用于发送Unicode字符。
 PDU的构成
PDU是由一串由“0-9”及“A-F”组成。表面上看起来就是一组16进制的数所组成的。

 1:一个手机发送的一个PDU串
 0891683108200505F011190D91683105155694F50008FF10008FF044F60597D
   <1>短信中心地址字段:0891 
    08:Address-Lengt(地址长度),短信息中心地址长度为8个字节,是(91)+(683108200505F0)的长度,8个8位字节
 91地址类型:10010001       Bit7:1。始终为1       Bits 6,5,4:Type-of-Number(号码类型):001,代表Internation Number。也即是号码前加“+”。注意:对某些比较特殊的号码,例如手机与小灵通的互通时,这里不能设置为001,而要设置成000,代表号码前没有“+”,否则无法接收。
下面是GSM03.40协议号码类型的解释:
 0 0 0   Unknown
 0 0 1   International number
 0 1 0   National number
 0 1 1   Network specific number
 1 0 0   Subscriber number
 1 0 1   Alphanumeric(coded according to TS03.38 7-bit default alphabet)
 1 1 0   Abbreviated number
 1 1 1   Reserved for extension
 ll not interpret reserved values but will store them as received.
       Bits 3,2,1,0:Numbering-plan-identification(号码鉴别),0000—未知,0001—ISDN/电话号码(E.164/E.163),1111—留作扩展;一般默认为0001,表示电话号码类型的。下面是GSM03.40号码鉴别的解释:
Bits3 2 1 0
0 0 0 0    Unknown
0 0 0 1    ISDN/telephone numbering plan (E.164/E.163)
0 0 1 1    Data numbering plan (X.121)
0 1 0 0    Telex numbering plan
1 0 0 0    National numbering plan
1 0 0 1    Private numbering plan
1 0 1 0    ERMES numbering plan (ETSI DE/PS 3 01-3)
1 1 1 1    Reserved for extension
All other values are reserved.
<2>短信中心号码:683108200805F0
一个字节内反转,8613800280500,如果长度为奇数则需要加“F”补齐。比如号码为:+8613505165495,去掉"+"后在末尾添加F变为:8613505165495F,再将手机号码的奇数位和偶数位的相交换为683105155694F5
<3>FirstOctet字段:1119
     (1)11       包含TP-MTI(2bit),TP-RD(1bit),TP-VPF(2bit),TP-RP(1bit),TP-UDHI(1bit),TP-SRR(1bit)
二进制表示形式:0 0 0 10 0 01
TP-MTI:01 TP-Message-Type-Indicator(消息类型指示符)

     Bit1,0:00—读出(Deliver); 01—提交(Submit)
Bit1,0:01指示为SMS-SUBMIT类型 
下面是GSM03.40的解释:
 bit1 bit0  Message type
 0     0    SMS-DELIVER (in the direction SC to MS)
 0     0    SMS-DELIVER REPORT (in the direction MS to SC)
 1     0    SMS-STATUS-REPORT (in the direction SC to MS)
 1     0    SMS-COMMAND (in the direction MS to SC)
 0     1    SMS-SUBMIT (in the direction MS to SC)
 0     1    SMS-SUBMIT-REPORT (in the direction SC to MS)
 1    1      ReservedTP-RD:0  TP-Reject-Duplicates(是否拒绝相同重复消息)

   Bit2:0—接受复制; 1—拒绝复制
 
 Bit2:0   指示短消息中心接收未转发的具有相同TP-MR的消息。
 Bit 2:
 0    Instruct the SC to accept an SMS-SUBMIT for an SM still held in the  SC which has the same TP-MR and the same TP-DA as a previously submitted SM from the same OA.
 1    Instruct the SC to reject an SMS-SUBMIT for an SM still held in the   SC which has the same TP-MR and the same TP-DA as the  previously submitted SM from the same OA. In this case an  appropriate TP-FCS value will be returned in the SMS-SUBMIT-REPORT.
TP-VPF:10   TP-Validity-Period-Format(有效期格式)

Bit4,3::00—不提供(Not present);01—预留;  10—整型(标准),指使用相对格式;11—提供8位字节的一半(Semi-Octet Represented) 
下面是GSM03.40的解释:
bit4 bit3
0   0      TP-VP field not present
1   0      TP-VP field present and integer represented (relative)
0   1      Reserved
1   1      TP-VP field present and semi-octet represented (absolute)
TP-SRR:0    TP-Status-Report-Request
   Bit5:    1:需要报告,0:不需要报告。
Bit 5:
0       A status report is not requested
1       A status report is requested
TP-UDHI:0   TP-User-Data-Header-Indicator(用户数据头标示)   Bit6:   1:含头信息  0:不含头信息,指示这是一个SMS消息,没有用户数据头,EMS(增强消息业务)消息需要设置。图片铃声这些都是包含头部信息的.文本不包含头部信息
Bit  6
0     The TP-UD field contains only the short message
1     The beginning of the TP-UD field contains a Header in addition to the  short message
TP-RP:0     TP-Reply-Path(回复路径)   Bit7:    1:设置回复路径,0:没有设置回复路径。
下面是GSM03.40解释:
Bit 7:
0:  TP-Reply-Path parameter is not set in this SMS-SUBMIT/DELIVER
1:  TP-Reply-Path parameter is set in this SMS-SUBMIT/DELIVER
(2)消息参考值TP-MR (TP-Message-Reference):19如果使用"00" 值代表让电话自己设置消息参考值.
 
  <4> 对方号码字段:0D913105155694F5 
    0D:目标地址数字个数,共13个十进制数(不包括91和‘F’)
    91:地址类型,同短信中心号码设置.
   3105155694F5:目标手机号码。  
  <5>上层协议标识TP-PID(TP-Protocol-Identifier):00
     一般设置为00,表示普通GSM,点对点  <6> 数据编码设置TP-DCS(TP-Data-Coding-Scheme):08
    指示TP-UD的编码方式。08代表Unicode方式。参照GSM03.38协议:
Bit 3,2
00    Default alphabet
01    8 bit
10    UCS2 (16bit) [10]
11    Reserved
  <7>有效期TP-VP(TP-Validity-Period):FF
    FF表示最大。
  <8> 用户数据长度TP-UDL(TP-User-Data-Length):4
      用户数据实际长度。注意不同编码下用户长度定义不同。
   <9>用户数据 :4F60597D     "你好"的Unicode编码
你:0x4F60;好:0x597D
  2:手机接收的PDU串
 0891683108200505F0040D91683105155694F5000850208151754500044F60597D
   <1>短信中心地址字段:0891683108200505F0,即是+8613800250500
 <2>FirstOctet :04        其二进制代码:00000100
    TP-MTI:00
    TP-MMS(TP-More-Message-to-Send):1 短信中心没有更多的消息发送
    TP-SRI: 0
    TP-UDHI:0
    TP-RP:  0
 <3>发送方号码 :0D91683105155694F5   即+8613505165495
 <4>协议标识: 00    TP-DCS 点对点
 <5>编码方式: 08    TP-DCS Unicode编码
   <6>短信中心时间    50208151754500  
     字节反转05/02/18 15:57:45 最后的00代表时区,这里为0
   <7>用户数据长度 :4
 <8>用户数据:4F60597D      
   中文“你好”的Unicode编码 

参考资料:<1>GSM03.40协议
                  <2>短消息PDU字段分析与实现    赵波 王凯写    

posted on 2008-10-18 09:40  一麦  阅读(1105)  评论(0编辑  收藏  举报