手機(jī)短信的PDU編碼和解碼(2009-10-28 23:10:36)
共有三種方式來發(fā)送和接收SMS信息:Block Mode, Text Mode和PDU Mode。其中PDU Mode被所有手機(jī)支持,可以使用任何字符集,這也是手機(jī)默認(rèn)的編碼方式。
發(fā) 送短消息常用Text和PDU(Protocol Data Unit,協(xié)議數(shù)據(jù)單元)模式。使用Text模式收發(fā)短信代碼簡(jiǎn)單,實(shí)現(xiàn)起來十分容易,但最大的缺點(diǎn)是不能收發(fā)中文短信;而PDU模式不僅支持中文短信,也能發(fā)送英文短信。PDU模式收發(fā)短信可以使用3種編碼:7-bit、8-bit和UCS2編碼。7-bit編碼用于發(fā)送普通的ASCII字符,它將一串 7-bit的字符(最高位為0)編碼成8-bit的數(shù)據(jù),每8個(gè)字符可“壓縮”成7個(gè);8-bit編碼通常用于發(fā)送數(shù)據(jù)消息,比如圖片和鈴聲等;而 UCS2編碼用于發(fā)送Unicode字符。在這三種編碼方式下,PDU串的用戶信息(TP-UD)段最大容量(可以發(fā)送的短消息的最大字符數(shù))分別是 160、140和70。這里,將一個(gè)英文字母、一個(gè)漢字和一個(gè)數(shù)據(jù)字節(jié)都視為一個(gè)字符。
PDU串的用戶信息長度(TP-UDL),在各種編碼方式下意義有所不同。7-bit編碼時(shí),指原始短消息的字符個(gè)數(shù),而不是編碼后的字節(jié)數(shù)。8-bit編碼時(shí),就是字節(jié)數(shù)。UCS2編碼時(shí),也是字節(jié)數(shù),等于原始短消息的字符數(shù)的兩倍。如果用戶信息(TP-UD)中存在一個(gè)頭(基本參數(shù)的TP-UDHI為1),在所有編碼方式下,用戶信息長度(TP-UDL)都等于頭長度與編碼后字節(jié)數(shù)之和。如果采用GSM 03.42所建議的壓縮算法(TP-DCS的高3位為001),則該長度也是壓縮編碼后字節(jié)數(shù)或頭長度與壓縮編碼后字節(jié)數(shù)之和。
PDU 相當(dāng)于一個(gè)數(shù)據(jù)包,它由構(gòu)成消息(SMS)的信息組成。作為一種數(shù)據(jù)單元,它必須包含源/目的地址、保護(hù)(有效)時(shí)間、數(shù)據(jù)格式、協(xié)議類型和正文,正文長度可達(dá)140字節(jié),它們都以十六進(jìn)制表示。PDU結(jié)構(gòu)根據(jù)短消息由移動(dòng)終端發(fā)起或以移動(dòng)終端為目的而不同。每條消息可以發(fā)送140個(gè)字節(jié),由于本系統(tǒng)中最長的數(shù)據(jù)串沒有超過140個(gè)字節(jié),因此數(shù)據(jù)均可以用一條消息來發(fā)送。
一般的PDU編碼由A B C D E F G H I J K L M十三項(xiàng)組成。
A:短信息中心地址長度,2位十六進(jìn)制數(shù)(1字節(jié))。
B:短信息中心號(hào)碼類型,2位十六進(jìn)制數(shù)。
C:短信息中心號(hào)碼,B+C的長度將由A中的數(shù)據(jù)決定。
D:文件頭字節(jié),2位十六進(jìn)制數(shù)。
E:信息類型,2位十六進(jìn)制數(shù)。
F:被叫號(hào)碼長度,2位十六進(jìn)制數(shù)。
G:被叫號(hào)碼類型,2位十六進(jìn)制數(shù),取值同B。
H:被叫號(hào)碼,長度由F中的數(shù)據(jù)決定。
I:協(xié)議標(biāo)識(shí),2位十六進(jìn)制數(shù)。
J:數(shù)據(jù)編碼方案,2位十六進(jìn)制數(shù)。
K:有效期,2位十六進(jìn)制數(shù)。
L:用戶數(shù)據(jù)長度,2位十六進(jìn)制數(shù)。
M:用戶數(shù)據(jù),其長度由L中的數(shù)據(jù)決定。J中設(shè)定采用UCS2編碼,這里是中英文的Unicode字符。
PDU編碼協(xié)議簡(jiǎn)單說明
例1 發(fā)送:SMSC號(hào)碼是+8613800250500,對(duì)方號(hào)碼是13693092030,消息內(nèi)容是“Hello!”。從手機(jī)發(fā)出的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
對(duì)照規(guī)范,具體分析:
分段 含義 說明
08 SMSC地址信息的長度 共8個(gè)八位字節(jié)(包括91)
91 SMSC地址格式(TON/NPI) 用國際格式號(hào)碼(在前面加‘+’)
68 31 08 20 05 05 F0 SMSC地址 8613800250500,補(bǔ)‘F’湊成偶數(shù)個(gè)
11 基本參數(shù)(TP-MTI/VFP) 發(fā)送,TP-VP用相對(duì)格式
00 消息基準(zhǔn)值(TP-MR) 0
0D 目標(biāo)地址數(shù)字個(gè)數(shù) 共13個(gè)十進(jìn)制數(shù)(不包括91和‘F’)
91 目標(biāo)地址格式(TON/NPI) 用國際格式號(hào)碼(在前面加‘+’)
68 31 96 03 29 30 F0 目標(biāo)地址(TP-DA) 8613693092030,補(bǔ)‘F’湊成偶數(shù)個(gè)
00 協(xié)議標(biāo)識(shí)(TP-PID) 是普通GSM類型,點(diǎn)到點(diǎn)方式
00 用戶信息編碼方式(TP-DCS) 7-bit編碼
00 有效期(TP-VP) 5分鐘
06 用戶信息長度(TP-UDL) 實(shí)際長度6個(gè)字節(jié)
C8 32 9B FD 0E 01 用戶信息(TP-UD) “Hello!”
例2 接收:SMSC號(hào)碼是+8613800250500,對(duì)方號(hào)碼是13693092030,消息內(nèi)容是“你好!”。手機(jī)接收到的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
對(duì)照規(guī)范,具體分析:
分段 含義 說明
08 地址信息的長度 個(gè)八位字節(jié)(包括91)
91 SMSC地址格式(TON/NPI) 用國際格式號(hào)碼(在前面加‘+’)
68 31 08 20 05 05 F0 SMSC地址 8613800250500,補(bǔ)‘F’湊成偶數(shù)個(gè)
84 基本參數(shù)(TP-MTI/MMS/RP) 接收,無更多消息,有回復(fù)地址
0D 回復(fù)地址數(shù)字個(gè)數(shù) 共13個(gè)十進(jìn)制數(shù)(不包括91和‘F’)
91 回復(fù)地址格式(TON/NPI) 用國際格式號(hào)碼(在前面加‘+’)
68 31 96 03 29 30 F0 回復(fù)地址(TP-RA) 8613693092030,補(bǔ)‘F’湊成偶數(shù)個(gè)
00 協(xié)議標(biāo)識(shí)(TP-PID) 是普通GSM類型,點(diǎn)到點(diǎn)方式
08 用戶信息編碼方式(TP-DCS) UCS2編碼
30 30 21 80 63 54 80 時(shí)間戳(TP-SCTS) 2003-3-12 08:36:45 +8時(shí)區(qū)
06 用戶信息長度(TP-UDL) 實(shí)際長度6個(gè)字節(jié)
4F 60 59 7D 00 21 用戶信息(TP-UD) “你好!”
詳細(xì)解析:
0891683108200505F011190D91683105155694F50008FF10008FF044F60597D
<1>短信中心地址字段:0891
08:Address-Lengt(地址長度),短信息中心地址長度為8個(gè)字節(jié),是(91)+(683108200505F0)的長度,8個(gè)8位字節(jié)
91 地址類型:10010001 Bit7:1。始終為1 Bits 6,5,4:Type-of-Number(號(hào)碼類型):001,代表Internation Number。也即是號(hào)碼前加“+”。注意:對(duì)某些比較特殊的號(hào)碼,例如手機(jī)與小靈通的互通時(shí),這里不能設(shè)置為001,而要設(shè)置成000,代表號(hào)碼前沒有 “+”,否則無法接收。
下面是GSM03.40協(xié)議號(hào)碼類型的解釋:
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(號(hào)碼鑒別),0000—未知,0001—ISDN/電話號(hào)碼 (E.164/E.163),1111—留作擴(kuò)展;一般默認(rèn)為0001,表示電話號(hào)碼類型的。下面是GSM03.40號(hào)碼鑒別的解釋:
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>短信中心號(hào)碼:683108200805F0
一個(gè)字節(jié)內(nèi)反轉(zhuǎn),8613800280500,如果長度為奇數(shù)則需要加“F”補(bǔ)齊。比如號(hào)碼為:+8613505165495,去掉"+"后在末尾添加F變?yōu)椋?613505165495F,再將手機(jī)號(hào)碼的奇數(shù)位和偶數(shù)位的相交換為683105155694F5
<3>FirstOctet字段:1119
(1)11 包含TP-MTI(2bit),TP-RD(1bit),TP-VPF(2bit),TP-RP(1bit),TP-UDHI(1bit),TP-SRR(1bit)
二進(jìn)制表示形式: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(是否拒絕相同重復(fù)消息)
Bit2:0—接受復(fù)制; 1—拒絕復(fù)制
Bit2:0 指示短消息中心接收未轉(zhuǎn)發(fā)的具有相同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—預(yù)留; 10—整型(標(biāo)準(zhǔn)),指使用相對(duì)格式;11—提供8位字節(jié)的一半(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:需要報(bào)告,0:不需要報(bào)告。
Bit 5:
0 A status report is not requested
1 A status report is requested
TP -UDHI:0 TP-User-Data-Header-Indicator(用戶數(shù)據(jù)頭標(biāo)示) Bit6: 1:含頭信息 0:不含頭信息,指示這是一個(gè)SMS消息,沒有用戶數(shù)據(jù)頭,EMS(增強(qiáng)消息業(yè)務(wù))消息需要設(shè)置。圖片鈴聲這些都是包含頭部信息的.文本不包含頭部信息
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(回復(fù)路徑) Bit7: 1:設(shè)置回復(fù)路徑,0:沒有設(shè)置回復(fù)路徑。
下面是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" 值代表讓電話自己設(shè)置消息參考值.
<4> 對(duì)方號(hào)碼字段:0D913105155694F5
0D:目標(biāo)地址數(shù)字個(gè)數(shù),共13個(gè)十進(jìn)制數(shù)(不包括91和‘F’)
91:地址類型,同短信中心號(hào)碼設(shè)置.