短信PDU协议简介

关于PDU其实并不难,至于PDU是什么,不管它,爱是什么是什么,我们只要知道怎么用就可以了。

在网上看了很多关于PDU的帖子or文档,但是说的都不是很详细。所以结合其他高人的文档,总结了这篇文档,希望通过这篇文档让不熟悉PDU的人,熟悉PDU,让了解PDU的人,再有提高。

言归正传:

========================

我研究的是从短信出发研究PDU,至于其他领域,还真不知道有没有。所以现在我们开始简单的讲解一下一条PDU短信。

PDU字符串为:

  08 91 683108701305F0 11 00 0D 91 3176378290F9 00 00 00 02 C834

 

08—短信息中心地址长度:这个长度怎么获得的呢?其实就是91 683108701305F0的字符串长度除以2。不难理解。

 

91—短信息中心号码类型:91是TON/NPI遵守International/E.164标准,指在号码前需加‘+’号;此外还有其它数值,但91最常用。但是它是怎么出来的呢?咱们细看一下:

91—1001 0001

91是通过两个二进制码获得的。也就是说这两个二进制码有特殊的含义

解析1001:

       第一位的1:具体代表什么意思,我也没搞明白,有高人知道可以指出。

剩下的001:数值类型(Type of Number):000—未知,001—国际,010—国内,111—留作扩展;

        解析0001:号码鉴别(Numbering plan identification):0000—未知,0001—ISDN/电话号码(E.164/E.163),1111—留作扩展;

 

    683108701305F0—短信息中心号码。由于位置上略有处理,实际号码应为:8613800 731500(字母F是指长度减1)。这需要根据运营商作相应的修改。

 

(前面这三段标志位就代表了一个短信中心,不过有时我们看到这三段直接用“00”代替,它的意义就是直接用SIM卡的短信中心,如果关于这点还有疑问的话。那就需要普及一下手机常识了。手机本身有固定的短信中心,这是出厂时由手机厂商设定的,不过当插上SIM卡时,手机都有自适应的过程,这是基本都会用SIM卡的短信中心代替手机的短信中心。所以我们可将SIM卡插进所有手机后,就能发短信。如果不能,那说明手机没有自适应。那就手动设置一下短信中心就可以收/发短信了。)

 

11—文件头字节:这个数值的获得也是通过二进制数获得的

11—0001 0001

其实二进制中的每一位都有自己的意义,我们来具体看看(左边为第一位):

第一位:应答路径—TP-RP(TP-Reply-Path):0—不设置; 1—设置

  第二位:用户数据头标识—TP-UDHI(TP-User-Data-Header-Indicator):0—不含任何头信息; 1—含头信息(本短信是没有头信息的,下文中会有包含头信息的短信,到时再具体解析头信息UDH)

  第三位:状态报告要求—TP-SPR(TP-Status-Report-Request):0—需要报告; 1—不需要报告

  第四、五位:有效期格式—TP-VPF(TP-Validity-Period-Format):00—不提供(Not present); 10—整型(标准);01—预留; 11—提供8位字节的一半(Semi-Octet Represented)

  第六位:拒绝复制—TP-RD(TP-Reject-Duplicates):0—接受复制; 1—拒绝复制

  第七、八位:信息类型提示—TP-MTI(TP-Message-Type-Indicator):00—接收(Deliver); 01—发送(Submit)

 

00—信息类型(TP-Message-Reference:这个标志基本没啥变化,所以本人也没过                          多的研究,如果有高人知道,可以指明一下。

 

0B—被叫号码长度。

91—被叫号码类型

3176378290F9—被叫号码,经过了位移处理,实际号码为“13677328099”

这三个字段通称目的地址(TP-Destination-Address)。

 

00—协议标识TP-PIDTP-Protocol-Identifier:这段基本也是千年不变的,不过可以列举出各个位的含义:

00—0000 0000

第1、2位:00—如下面定义的分配,我们可以理解为默认形式。其实就是说后边六位

的定义就是本身的协议规范。

01—参见GSM03.40协议标识完全定义

10—预留

11—为服务中心(SC)特殊用途分配后六位。

第3位:0—不使用远程网络,只是短消息设备之间的协议;1—使用远程网络。

第4-8位:00000—隐含;00001—电传;00010—group 3 telefax;00100—语音;00101—欧洲无线信息系统(ERMES);00110—国内系统;10001—任何基于X.400的公用信息处理 系统;10010—Email。

 

00—数据编码方案TP-DCSTP-Data-Coding-Scheme

00—0000 0000:

第1、2位:一般设置为00

第3位:0—文本未压缩,1—文本用GSM标准压缩算法压缩

第4位:0—表示最后两位不包含信息,1—表示最后两位包含信息类型信息

第5、6位:00—默认的字母表,01—8bit,10—USC2(16bit),11—预留

第7、8位:00—Class 0,01—Class 1,10—Class 2(SIM卡特定信息),11—Class 3。

 

00—有效期TP-VPTP-Valid-Period

VP value: 相应的有效期

  00 to 8F : (VP+1)*5 分钟

  90 to A7 : 12小时+(VP-143)*30分钟

  A8 to C4 : (VP-166)*1天

C5 to FF : (VP-192)*1 周

 

       02—用户数据长度TP-UDLTP-User-Data-Length:计算方法就是此字节后字符串长度除2,不做过多解释。

       C834—用户数据TP-UDTP-User-Data:“Hi”

 

========================

上述就是一条普通短信的PDU形式,下面说说关于有UDH的PDU短信是什么样子:

还是以刚才那个短信为基础,自己改改就能明白了:

08 91 683108701305F0 51 00 0D 91 3176378290F9 00 00 00 09 06050442664266 C834

有变化的地方已经用蓝色标明了,其他无变化。所以直接解析蓝色字段即可:

51—文件头字节0101 0001:看了二进制形式,再结合上面讲的,就明白了这里加了一个UDHI标示,也就是说这条短信有用户头信息(UDH-User Data Header),那么真正的UDH在哪呢?其实就是在用户数据(TP-UD)中,也就是06050442664266

09—用户数据长度TP-UDLTP-User-Data-Length:这个长度就是UDH+UD的长度除2。很明了了。

06050442664266—用户数据头UDH:这个地方还是要细说一下的:

       06—用户数据头长度:不包含自己的。

    05—我没找到具体的中文解释,但以我个人理解就是UDH的意义(在GSM03.40规范中有明确的说明各个值的含义,列举一下,可以看看自己感兴趣的):

00 Concatenated short messages, 8-bit reference number(长短信拆分使用)

01 Special SMS Message Indication

02 Reserved

03 Value not used to avoid misinterpretation as <LF> character

04 Application port addressing scheme, 8 bit 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 for future use

C0 - DF SC specific use

E0 - FF Reserved for future use

 

04—端口长度:不解释了,自己看一下吧。

4266—目标端口号:不解释了,自己看一下吧。

4266—源端口号:不解释了,自己看一下吧。

 

上边这段主要是为了告诉大家如何增加一个UDH,以及UDH应该增加到什么位置上,还有就是增加了UDH,对其他标识位的影响。

========================

顺便再提一提长短信。为什么突然转到长短信?很简单,长短信在拆分时会用到UDH。所以一块说了。

依然以最开的短信为例,改装一下大家就明白长短信的拆分规则了:

08 91 683108701305F0 51 00 0D 91 3176378290F9 00 00 00 08 050003000201 C834

          08 91 683108701305F0 51 00 0D 91 3176378290F9 00 00 00 08 050003000202 C834

 

这两条短信大家可以理解为一个长短信被拆分成两条短信(不要深究短信内容啊)。

 

下面说明一下有变更的地方:

08—用户数据长度TP-UDLTP-User-Data-Length:不解释了。

 

050003000201UDH内容

05UDHL用户数据头长度

00UDH的意义,可以看刚才列举出的各个值的意义。

03—剩下短信标识的长度

00—拆分短信的唯一标识,也就是说,以后组合短信时,要靠这个值识别本条拆分短信是属于哪个长短信。取值范围0~255

02—表示长短信被拆成多少份

01—表示这是第一个拆分短信,也就是拆分短信的序号。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值