短信模块开发tpdu格式(一)
短信模块开发tpdu格式(⼀)
1.1. 基本知识
短信模块开发指通过串⼝ at 命令驱动短信猫进⾏短信发送和接收操作。
短信猫操作分为三种模式: block,pdu 和 Text
短信传送有三种编码⽅式: 7 位, 8 位, UniCode
新生儿取名大全
1.1.1.    相关⽂档
Gsm03.38 规范: Alphabets and language-specific information 着重介绍短信发送中对字符集的控制部分
Gsm03.40 规范: Technical realization of the Short Message Service (SMS) Point-to-Point (PP) 详细介绍各种不同短信的不同实现
原本有心爱相随Gsm07.05 规范: Use of Data Terminal Equipment - Data Circuit terminating;Equipment (DTE - DCE) interface for Short Message Service (SMS) and Cell Broadcast Service (CBS) ,介绍 at 的⼀些控制命令。
花呗风控一般多久解除Gsm07.07 规范:着重介绍 at 的短信相关命令,可以说是 at 的 sms 规范。
1.1.
2.    Block 模式
使⽤Block模式需要⼿机⽣产⼚家提供驱动⽀持,现在还没有发现哪个⼚家公布⽀持这种短信发送模式。Block 模式基本已经被 pdu 模式取代。
1.1.3.    Text 模式
Text 模式⽐较简单,但是⽀持的设备不是很全,⽽且对于中⽂似乎有些问题,在⾦笛的⽹站技术资料中似乎提到了⼀句不能实现中⽂。
AT + CGMF=1<CR>
AT + CGMS= “136********” ,129<CR>
>Hello World!<^Z>
1.1.4.    Pdu 模式
pdu 编码主要包括两个主要的部分,⼀是 pdu 短信报头的整体数据格式,分别因为发送信息串和接收信息串⽽有区别,⼆是 pdu 中⽂本部分的编码,分别因为字符集⽽不同。
PDU 串的⽤户信息 (TP-UD) 段最⼤容量是 140 字节,所以在这三种编码⽅式下,可以发送的短消息的最⼤字符数分别是 160 、
韩语歌词140 和 70 。这⾥,将⼀个英⽂字母、⼀个汉字和⼀个数据字节都视为⼀个字符。
1.2. SMS ⽤户数据的编码⽅法
1.2.1.    英⽂ 7 位编码
怎么截屏
这是 gsm 的默认编码⽅式
由于这样的移位,我们可以看到我们能发的最多英⽂字符等于: 140*8/7 = 160 。
1.2.2.    数据 8 位编码
8-bit 编码通常⽤于发送数据消息,⽐如图⽚和铃声等;
1.2.3.    中⽂ pdu 编码
发送中⽂时,必须⽤ UCS2 ( utf-16 )进⾏编码,最多可以发 140/2 = 70 个汉字。
UniCode 编码转换也⽐较简单,以中⽂为例,⼀个中⽂字符是两个字节,直接对⾼位字节和低位字节进⾏⼗六进制转换就可以了。如“欢迎”,UniCode 编码是 6B22 8FCE ,这同时也就是转换的结果,如果发送的串中有英⽂字符,那么在前⾯补全 00 ,以保证⼀个字符对应两个字节。
1.2.4.    Wap-push 中的中⽂编码
做 wap-push 短信的时候有些问题了,开始的时候也按照 Unicode 编码处理,总是失败,后来才发现,有个编码字段设为了 uft-8 ,所以在这种情况下,还是可以出现其他编码⽅式的。
1.3. 短信报头分析
1.3.1.    短信类型
详细请参考 gsm 0438 规范和 gsm0440 规范,⾥⾯有详细的关于各种短消息类型的描述。
在 sms 中到底⽀持多少种类型的短信,短信类型由什么进⾏控制,这是我们在这⾥需要着重介绍的问题。
在传输层来分,⼀共有六⼤短信类型: SMS-DELIVER , SMS-DELIVER-REPORT , SMS-SUBMIT
, SMS-SUBMIT-REPORT , SMS-STATUS-REPORT , SMS-COMMAND ,这六种短信类型,由短信中⼼地址后的第⼀个字节的最低两位控制。
也就是说,每个短信在短信中⼼地址之后的第⼀个字节的最低两位是⾄关重要的。他决定了如何读这条短信(结合是发送的,还是接收的)
bit1bit0Message type
00SMS-DELIVER (in the direction SC to MS)
00SMS-DELIVER REPORT (in the direction MS to SC)
10SMS-STATUS-REPORT (in the direction SC to MS)
10SMS-COMMAND (in the direction MS to SC)
01SMS-SUBMIT (in the direction MS to SC)
01SMS-SUBMIT-REPORT (in the direction SC to MS)
11Reserved
1.3.
2.    地址编码
短信发送中都会涉及到短信地址的问题,他们的编码规则是⼀致的 , 简单来说就是 BCD8421码编码。
如: 08 91 683108501505F 0 ,
08 :地址长度,(号码类型 + 号码长度) /2 的⼗六进制表⽰
91 :号码类型
683108501505F 0 :号码,实际号码应为: 8613805515500 ,号码处理⽅法为 , 如果为 +86 开始 , 将 + 号去掉 , 然后判断是否为偶数 , 不是在末尾补F, 然后将奇数位和偶数位互换
1.3.3.    TP-DCS( 数据编码格式 )
这个字节⽐较特殊,表明整个短信的字符编码,数据内容等信息。详细说明参考 gsm03.38 规范。
1.3.4.    第⼀个字节
Pdu 编码的第⼀个字节⽐较有意思,这个字节会根据六种不同的短信按位有不同的意思,拿句专业⼀点的话来说,叫 bitmask. ⽤图来⼤概描述⼀下,详细参考 gsm0340 的 9.2.3 段。
位数MSG_Deliever MSG_SUBMIT
7TP_RP (回复地址)TP_RP
6TP_UDHI (数据报头)TP_UDHI
5TP_SRI (需要回复)TP_SRR (请求回复)
4
TP_VPF( 时间格式 )
3
2TP_MMS (多条短信标志,1 为⽆, 0 为有)TP_RD( 拒绝重复标志)
1 , 0TP_MTI (短信类型)TP_MTI
常见值04 ,正常收到, 44 ,有报头短信11 ,正常发送, 51,有报头短信
1.3.5.    TP-PID (协议标识)
在这个⾥⾯还有⼀个字节⽐较特殊,就是协议标识。
⼀般都是 00 ,表⽰点到点的标准短信。
1.3.6.    超长短信
参考 gsm0340 的 9.2.3 .24TP_UD 部分,这个部分中间的⼀种情况就是描述超长短信的处理。
长短信关键涉及⼀个数据报头的问题,数据报头由“长度”和多个“数据元素”组成。
1.3.7.    Wap-push 短信
WAP 的推送协议中定义了服务指⽰( SI : Service Indication )和服务加载( SL : Service Load )两项服务,以给⽤户和⽹络运营者更多的选择。服务指⽰是将新信息的指⽰和相关的通⽤资源标识符( URI )推送给⽤户,由⽤户选择是⽴即处理信息还是以后处理。服务加载是将⼀项服务的URI 推送给⽤户,然后客户端⾃动地使⽤ PULL 技术根据该 URI 启动服务。两种服务的区别在于⽤户是否介
⼊推送信息的处理过程。 SL 对推送信息的处理对⽤户来说是透明的,⽽ SI 则在指⽰⽤户的同时,请⽤户对随后的处理做出选择。
起步技巧PUSH 可以将某⼀站点或某⼀业务的链接通过短信发送到⽀持 WAP PUSH 功能的⼿机上,这样⽤户只需要阅读这条短信,打开短信中的链接,就可以直接访问业务了。因此, WAP PUSH 实现了短信和 WAP 业务的结合,节省了⽤户寻业务的时间,⽅便⽤户直接到并使⽤⾃⼰喜欢的业务。
Wap-push 短信的核⼼不同之处就在于:
1、  含有数据报头,也就是 TP_UDHI 位为 1 ,⼀般来说 pdu 的第⼀个字节发送时为 51 ,接收时为 44 。
2、  TP_DSC 字节不同,⼀般为 F5 ,表明字符集为 8 位,短信类型为 Class 1; 详细解释参看 gsm03.38 的第四章

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。