PDU格式详解

短信协议与编码详解
本文详细介绍了短信(SMS)的工作原理和技术细节,包括不同编码方式下的字符限制、PDU模式和文本模式的区别、闪信(Flash SMS)的实现机制、以及错误代码的含义等。
SMS是由Etsi所制定的一个规范(GSM 03.40 和 GSM 03.38)。它可以发送最多160个字符,当使用7-bits编码的时候。8-bit编码(最多140个字符)通常无法直接通过手机显示;通常被用来作为数据消息,例如:smart messaging中的图片和铃声)和OTA WAP设置。16-bit信息(最多70个字符)被用来显示Unicode(UCS2)文本信息,可以被大多数的手机所显示。一个以class 0 开头的16-bit的文本信息将在某些手机上作为Flash SMS显示(闪烁的SMS和警告SMS)。
     有两种方式来发送和接收SMS信息:使用文本模式或者使用PDU(protocol description unit) 模式。文本模式(可能某些手机不支持)实际上也是一种PDU编码的一种表现形式。在显示SMS信息,可能使用不同的字符集和不同的编码方式。最常见的选择是"PCCP437", "PCDN", "8859-1", "IRA" 和 "GSM". 这些都通过读取应用程序的at-command中的AT+CSCS指定。如果你想阅读手机上的信息,手机会为你选择一种合适的编码。那么一个可以阅读SMS消息的应用要么使用text模式,要么是PDU模式。如果使用text模式,那么应用将绑定(或限制在)一些可能的编码选择中。在某些情况下是不够的,如果使用PDU模式,那么就可以使用任何编码方式。
接收
  •      PDU串不仅仅 包含了消息,而且还有很多发送者的元信息,他的SMS服务中心,时间标志等等。这些都是以8位字节的16进制数,或者半8位字节的十进制数。以下的字符书我从Nokia 6110 收到的信息,当从www.mtn.co.za发送的串是"hellohello"的时候。

    07917238010010F5040BC87238880900F100009930925161958003C16010

         这个八位串包含了三个部分:第一个8位表示SMSC信息的长度("07"),SMSC的信息 ("917238010010F5"),和SMS_DELIVER部分(GSM 03.40中指定)。

    注意: 有些手机(例如:Ericssson 888?)头三个部分(被着色)在PDU模式下被省略。

    8位描述
    07SMSC信息的长度。(在这个例子里是7个八位)
    91SMSC的地址类型 (91意味着国际格式的电话号码)
    72 38 01 00 10 F5服务中心号码(半八位的十进制数)电话号码是一个奇数(11),因此加入F来保证8位。这个服务中心的号码是"+27381000015"
    04SMS_DELIVER的第一个8位。
    0B地址长度。发送号码的长度(0B hex = 11 dec)
    C8发送号码的地址类型
    72 38 88 09 00 F1发送号码(半八位的十进制数),有一个F结尾。
    00TP-PID.协议标识
    00TP-DCS 编码方式
    99 30 92 51 61 95 80TP-SCTS.时间邮戳(半8位)
    0ATP-UDL.用户数据长度,信息的长度。TP-DCS域表明是7-bit格式的数据。因此长度在这里是一个10个7-bits。如果TP-DCS被设置成8-bit或者Unicode,那么长度就应该是9个八位长度。
    E8329BFD4697D9EC37TP-UD. 7-bit编码的信息。

         所有的8位都是16进制编码,除了服务中心号码,发送号码和时间邮戳;他们都是十进制的半8位编码。在PDU串的结尾部分包含了一些16进制的8-bits数据,但他们实际7-bits数据。
         十进制的半8位只需要将高位和地位交换就可以得到实际的数值。例如:"72 38 88 09 00 F1" 到 "27 83 88 90 00 1F"。因为电话号码是一个奇数,没有办法组成8位编码,所以使用F来补齐。在解析时间邮戳的时候("99 03 29 15 16 59 08"),前6位代表日期,后6位代表时间,最后2位是时区。

  • Flash SMS

         在某些手机上(所有的Nokias,某些Siemens, Ericsson, Motorola 等等..)class 0信息将被显示为一种flash SMS信息。这些信息只要一到达,将立即显示在屏幕上,而不需要按任何按钮。如果数据的编码方式是设置成16-bit unicode (ucs2), 而且信息以"0001"开头,那么它将作为一个闪烁的flash message显示。

    OctetValueDescription
    TP-DCS1816 bits (UCS2), message class 0
    TP-VPAAValidity period
    TP-UDL0CUser Data Length, 12 octets
    TP-UD00 01 00 41 00 6C 00 65 00 72 00 74User Data, message "Alert"

         这个表显示了Flash SMS中的相关信息。
         第一个unicode字符("00 01")使能闪烁。这样的消息最长就是69个unicode字符。

  • Nokia ICON

         这是一个OTA (On The Air) bitmap.
         这个文件是从Nokia论坛下载而来。在"Smart Messaging"连接中。

     

    PDU
    type

    44

    RP:0 (no reply path)
    UDHI:1 (UD begins with a header)
    SRI:0 (no status report will be returned)
    MMS:1 (no more messages)
    MTI:00 (SMS-deliver)
    OA

    0B
    91
    6302752852F1

    length:11 digit
    type: international,E.164/E.163
    number: 36 20 5782251
    PID

    00

    PDU content: short message
    DCS

    F611110110

    data coding: 8 bit
    message class: 1
    SCTS

    991012
    114343
    40

    date: 99/01/21
    time: 11:34:34
    timezone: GMT+1
    UDL

    89

    137 octets
    UDUDH

    06
    05
    04
    1583
    1583

    length of header: 6 octets
    information element type: NBS port addressing
    information element length: 4 octets
    destination port: CLI icon
    source port: CLI icon
    O
    T
    A

    b
    i
    t
    m
    a
    p
    h
    d
    r

    00

    48
    0E
    01

    infofield: last octet, no compression,
       no palette, 8 bit, 0 animated icons
    width: 72 pixel
    height: 14 pixel
    depth: 1 ?
    i
    m
    a
    g
    e

    d
    a
    t
    a

    3FF00110005B0001E8
    7FF802A801A500021C
    3FF80C470101000408
    7FF808010081001C04
    3FF008150081001304
    7E10183F0058803A84
    7DF030490064802C9C
    7E501855002D80473C
    3AD0082A8058404218
    39B005010060C04930
    105005BE0042203220
    1A1007620046600C40
    09E001BB003B900840
    042000960001080EA0

  • 7Bit编码

         "hellohello"包含了10个字符,他们必须一个个将用7-bits来代表。

    hellohello
    104101108108111104101108108111
    1101000110010111011001101100110111111010001100101110110011011001101111
    1101000 
    1100101
    1101100
    1101100
    1101111
    1101000
    1100101
     1101100
    1101100 
    1101111

         首先将字符转换为7位的二进制,然后,将后面字符的位调用到前面,补齐前面的差别。例如:h翻译成1101000,e翻译成1100101,显然h的二进制编码不足八位,那么就将e的最后一位补足到h的前面。那么就成了11101000(E8)。剩余地编码看下表:

    11101000
    00110010
    10011011
    11111101
    01000110
    10010111
    11011001
      
    11101100
    110111
    E8329BFD4697D9
      
    EC37

         那么就变成了9个八进制数 E8 32 9B FD 46 97 D9 EC 37。

  • 错误信息

    错误编码意义
    0-127GSM 04.11 Annex E-2 values
    128-255GSM 03.40 section 9.2.3.22 values
    300Phone failure
    301SMS service of phone reserved
    302Operation not allowed
    303Operation not supported
    304Invalid PDU mode parameter
    305Invalid text mode parameter
    310SIM not inserted
    311SIM PIN necessary
    312PH-SIM PIN necessary
    313SIM failure
    314SIM busy
    315SIM wrong
    320Memory failure
    321Invalid memory index
    322Memory full
    330SMSC (message service center) address unknown
    331No network service
    332Network timeout
    500Unknown error
    512Manufacturer specific
     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值