Android短信相关(理论部分)

1 PDU编码协议

1.1 PDU编码规则

目前,发送短信消息常用Text和PDU(Protocol Data Unit,协议数据单元)模式。使用Text模式收发短信代码简单,实现起来容易,但最大的缺点是不能收发中文短信;而PDU模式不仅支持中文短信,也能发送英文短信。PDU模式收发短信可以使用3种编码:7-bit、8-bit和UCS2编码。7-bit编码用于发送普通的ASCII字符,8bit编码通常用于发送数据消息,UCS2编码用于发送Unicode字符。一般的PDU编码由A B C D E F G H I J K L M十三项组成。

A:短信息中心地址长度,2位十六进制数(1字节)
B:短信息中心号码类型,2位十六进制数。

91是TON/NP,遵守International/E.164标准,指在号码前需加“+”号;此外还>有其它数值,但91最常用。

91 1 0 0 1 0 0 0 1
BIT No. 7 6 5 4 3 2 1 0

7:1
6 5 4 :数值类型
3 2 1 0:号码鉴别
数值类型:000-未知,001-国际,010-国内,111-留作扩展;
号码鉴别:0000-未知,0001-ISDN/电话号码(E.164/E.163),1111-留作扩展

C:短信息中心号码,B+C的长度将由A中的数据决定。
D:文件头字节,2位十六进制数。

接收

No 7 6 5 4 3 2 1 0
Name TP-RP TP-UDHI TP-SPI - - TP-MMS TP-MTI TP-MTI

应答路径TP-RP(TP-Reply-Path):0-不设置;1-设置
用户数据头标识TP-UDHL(TP-User-Data-Header-Indicator):0-不含任何头>信息;1-含头信息
状态报告要求TP-SRR(TP-Status-Report-Request):0-需要报告;1-不需要>报告
状态报告标识-TP-SPI:0-不需要状态返回到移动设备;1-需要。默认为0
有效期格式TP-VPF(TP-Validity-Period-Format):00-不提供;10-整型(标准);01-预留;11-提供8位字节的一半
拒绝复制TP-RD:0-接受复制;1-拒绝复制
短消息服务中心短消息等待移动台TP-MMS:1-有;0-无
信息类型提示TP-MTI(TP-Message-Type_Indicator):00-读出;01-提交

E:信息类型,2位16进制数
F:被叫号码长度,2位16进制数
G:被叫号码类型,2位16进制数,取值同B
H:被叫号码,长度由F中的数据决定
I:协议标识,2位16进制数。

BIT No 7 6 5 4 3 2 1 0
Bit No.7与Bit No.6:
00-如下面定义的分配Bit No.0-Bit No.5;
01-参见GSM03.40协议标识完全定义;
10-预留
11-为服务中心(SC)特殊用途分配Bit No.0-Bit No.5。
一般将这两位置为00

Bit No.5
0-不使用远程网络,只是短消息设备之间的协议
1-使用远程网络

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

J:数据编码方案,2位16进制数

Bit No 7 6 5 4 3 2 1 0
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-默认的字母表
01-8bit
10-USC2
11-预留

Bit No.1与Bit No.0:
00-Class 0:短信息直接显示到用户终端
01-Class 1:短信息存储在SIM卡上
10-Class 2(Sim卡特定信息):短信息必须存储在SIM卡上,禁止直接传输到终端
11-Class 3:短信息存储在用户设备上

K:有效期,2位16进制数

如31808061349523,
31:13年
80:08月
80:08日
61:16时
34:43分
95:59秒
23:时区

L:用户数据长度,2位16进制数
M:用户数据,其长度由L中的数据决定

1.2 PDU编码协议示例

例1 发送:SMSC号码是+8613800250500,对方号码是13693092030,消息内容是“Hello!”。从手机发出的PDU串可以是08 91 68 31 08 20 05 05 F0 11 00 0D 91 68 31 96 03 29 30 F0 00 00 00 06 C8 32 9B FD 0E 01对照规范,具体分析如下:

分段 含义 说明
08 SMSC地址信息的长度 共8个字节(包括91)
91 SMSC地址格式(TON/NPI) 国际格式号码(在前面加“+”)
68 31 08 20 05 05 F0 SMSC地址 8613800250500,补“F”凑成偶数个
11 基本参数(TP-MTI/VFP) TP-VP用相对格式
00 消息基准值(TP-MR) 0
0D 目标地址数字个数 共13个10进制数(不包括91和“F”)
91 目标地址格式(TON/NPI) 用国际格式号码(在前面加“+”)
68 31 96 03 29 30 F0 目标地址(TP-DA) 8613693092030,补“F”凑成偶数个
00 协议标识(TP-PID) 普通GSM类型,点到点方式
00 用户信息编码方式(TP-DCS) 7-bit编码
00 有效期(TP-VP) 5分钟
06 用户信息长度(TP-UDL) 实际长度6个字节
C8 32 9B FD 0E 01 用户信息(TP-UD) "Hello!"

例2 接收:SMSC号码是+8613800250500,对方号码是13693092030,消息内容是“你好!”。手机接收到的PDU串可以是08 91 68 31 08 20 05 05 F0 84 0D 91 68 31 96 03 29 30 F0 00 08 30 30 21 80 63 54 80 06 4F 60 59 7D 00 21对照规范,具体分析:

分段 含义 说明
08 地址信息的长度 共8个字节(包括91)
91 SMSC地址格式(TON/NPI) 国际格式号码(在前面加“+”)
68 31 08 20 05 05 F0 SMSC地址 8613800250500,补“F”凑成偶数个
84 基本参数(TP-MTI/VFP) 接收,无更多消息,有回复地址
0D 目标地址数字个数 共13个10进制数(不包括91和“F”)
91 回复地址格式(TON/NPI) 用国际格式号码(在前面加“+”)
68 31 96 03 29 30 F0 回复地址(TP-RA) 8613693092030,补“F”凑成偶数个
00 协议标识(TP-PID) 普通GSM类型,点到点方式
08 用户信息编码方式(TP-DCS) UCS2编码
30 30 21 80 63 54 80 时间戳(TP-SCTS) 2003-03-12 08:36:45 +8时区
06 用户信息长度(TP-UDL) 实际长度6个字节
4F 60 59 7D 00 21 用户信息(TP-UD) "你好!"

若基本参数的最高位(TP-RP)为0,则没有回复地址的三个段。从Internet上发出的短消息常常是这种情形,则PDU如下所示:

pdu = 0891683108200505F004000830302180635480064F60597D0021

注意号码和时间的表示方法,不是按正常顺序顺着来的,而且要以“F”将奇数补成偶数。

在PDU模型中,可以采用三种编码方式来对发送的内容进行编码,它们是7-bit,8-bit和UCS2编码。7-bit编码用于发送普通的ASCII字符,它将一串7bit的字符(最高位为0)编码成8-bit的数据,每8个字符可以压缩成7个;8-bit编码通常用于发送数据消息,比如图片和铃声灯;而UCS2编码用于发送Unicode字符。PDU串的用户信息(TP-UD)段最大容量时140字节,所以在这三种编码方式下,可以发送的短消息的最大字符分别是160,140,和70.这里,将一个英文字母,一个汉字和一个数据字节都视为一个字符。

需要注意的是,PDU串的用户信息长度(TP-UDL),在各种编码方式下意义有所不同。7-bit编码时,指原始短消息的字符个数,而不是编码后的字节数。8-bit编码时,就是字节数。UCS2编码时,也是字节数等于原始短消息字符数的2倍。如果用户信息(TP-UD)中存在一个头(基本参数的TP-UDHI为1),在所有编码方式下,用户信息长度(TP-UDL)都等于头长度与编码后字节数之和。如果采用GSM03.42所建议的压缩算法(TP-DCS的高3位为001),则该长度也是压缩编码后字节数或头长度与压缩编码后字节数之和。

1.3 7-bit编码

7-bit编码实际上是一种压缩编码,因为ASCII码(不包括扩展的ASCII)其值都是小于0x80的,也就是说其最高位为0,那么最高位信息也就是说没有意义的,可以被忽略。而7-bit编码也正是关注到了这一点,利用最高位也来存储数据,其编码时一次将下7位编码的后几位逐次移到前面,形成了新的8位编码。
上述例1里面C8 32 9B FD 0E 01用的是7-bit编码,编码步骤如下

H e l l o !
1001000 1100101 1101100 1101100 1101111 100001
11001000 110010 1101100 1101100 1101111 100001
11001000 00110010 11011 1101100 1101111 100001
11001000 00110010 10011011 1101 1101111 100001
11001000 00110010 10011011 11111101 110 100001
11001000 00110010 10011011 11111101 00001110 1
11001000 00110010 10011011 11111101 00001110 00000001

解码过程如下

C8 32 9B FD 0E 01
11001000 00110010 10011011 11111101 00001110 00000001
1001000 1100101 1101100 1101100 1101111 0100001

1.4 UCS-2编码

UCS-2编码发送的是Unicode字符,中文字符的Unicode编码为2个字节。上述例2接收的信息就是Unicode编码,“你好!”中文字符的Unicode编码为:4F60 597D 0021

2 PDU协议数据单元详细介绍

PDU相当于一个数据包,它由构成消息(SMS)的信息组成。作为一种数据单元,它必须包含源/目的地址、保护(有效)时间、数据格式、协议类型和正文,正文长度可达140字节,它们都以16进制表示。PDU结构根据短消息由移动终端发起或以移动终端为目的而不同。

3 subId、slotId、SubscriptionInfo、SubscriptionManager

  • subId
    是数据库telephony.db的表siminfo的主键递增项,其中telephony.db在“/data/user_de/0/com.android.providers.telephony/databases”下。该值从1开始,每插入一个新卡,subId的值就会加1,插入双卡后数据库中就会有subId值为1和2的两条数据条目,拔卡插卡交换卡槽后,数据库并不会增加新项,只有插入一张新的SIM卡才会增加一条id为3的数据条目。

  • slotId
    slotId指的是卡槽Id,一般手机都只有两个卡槽,卡槽1的slotId值为0,卡槽2的slotId的值为1,依次类推。

  • Subscription
    每张SIM卡都对应一个Subscription,用谁家的Sim卡就相当于订阅(Subscription)谁家的业务。SubscriptionInfo包含了Sim卡的相关信息,如ICCID、MNC、MCC等,多张SIM卡就有多个SubscriptionInfo。一张SIM卡,里面有ICCID,也有IMSI。ICCID是卡的标识,IMSI是用户的标识。

ICCID:Integrate circuit card identity,集成电路卡识别码,ICCID为IC卡的唯一识别号码,共有20位数字组成。分别介绍如下:前6位运营商代码:中国移动的为:898600;中国联通的为:898601;中国电信:898603

IMSI:International Mobile SubscriberIdentification Number,国际移动用户识别码,是区别移动用户的标志,储存在SIM卡中,可用于区别移动用户的有效信息。其总长度不超过15位,同样使用0-9的数字。

MCC:是移动用户所属国家代号,占3位数字,中国的MCC规定为460

MNC:是移动网号码,最多由两位数字组成,用于识别移动用户所归属的移动通信网

MSIN:是移动用户识别码,用以识别某一移动通信网中的移动用户。例如开头是46000是中国移动用户,46001是联通用户,46003是电信用户

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343

推荐阅读更多精彩内容