1. 程式人生 > >GSM協議PDU編碼長短信方法

GSM協議PDU編碼長短信方法

手機號 user str oid sci sch 要去 ret enter

1.GSM協議

GSM協議一共有三種方式來發送和接收SMS信息:Block Mode, Text Mode和PDU Mode。Block Mode已是昔日黃花,目前很少用了。Text Mode是純文本方式,可使用不同的字符集,從技術上說也可用於發送中文短消息,但國內手機基本上不支持,主要用於歐美地區。PDU Mode被所有手機支持,可以使用任何字符集,是手機默認的編碼方式,也是我們在網管系統中使用的編碼方式,下面我們來重點介紹一下PDU編碼格式

前提條件:發送PDU編碼的短消息之前需要輸入兩個指令

1.GSM設置為PDU模式

AT+CMGF=0 //設置短信編碼方式 0為PDU模式 1為TEXT模式

2.指定將要發送PDU編碼後的數據長度

AT+CMGS = LEN //LEN為編碼後的數據長度

2.PDU短信編碼格式解析

元素

名稱

長度

描述

備註

SCA

Service Center Address

1-12

短消息服務中心號碼

可為空,用1個字節的00填充

PDU-Type

Protocol Data Unit

1

協議數據單元類型

註意長短信的區別

MR

Message Reference

1

所有成功的短信發送參考數目(0..255)

OA

Originator Address

2-12

發送方地址(手機號碼)

互斥出現

DA

Destination Address

2-12

接收方地址(手機號碼)

PID

Protocol Identifer

1

參數顯示消息中心以何種方式處理消息內容(比如FAX,Voice)

DCS

Data Coding Scheme

1

參數顯示用戶數據編碼方案

SCTS

Service Center Time Stamp

7

消息中心收到消息時的時間戳

發送時無該字段

VP

Validity Period

0,1,7

參數顯示消息有效期

UDL

User Data Lenghth

1

用戶數據長度

UD

User Data

0-140

用戶數據

3.長短信與普通短信

在介紹PDU編碼的各個元素之前,需要簡單介紹一下長短信與普通短信的區別,因為兩者在PDU編碼上有一定的區別。

普通短信UD區長度為140字節,超過140字節就得拆分成多條短信,拆分後的短信經過短信網關、短信中心的存儲轉發後到達終端的順序可能和原發送順序不同,這就使得接收方對於信息內容的理解出現困擾,1996年頒布GSM03.40V4.13.0中定義了長短信(Concatenated Short Message),所謂的長短信就是由一組相互獨立的不超過普通短信長度的子短信組成,在網絡傳輸中被視為多條普通短信,而在終端上被合並顯示。

4.PDU編碼元素詳解

4.1SCA

SCA = length + type + address

SCA服務中心地址由三部分:第一個分表示服務中心地址長度,第二個部分表示服務中心類型,第三個部分表示服務中心地址。

Lengthtype和address的長度之和(如果Length00則不提供後面部分,發送時終端將自動從SIM卡中讀取並填充SCA

Type:短信中心地址的類型(81:國內 91:國際 常用91)

Address:服務中心地址(對原地址做奇偶對調,如果原地址長度為奇位數,則末尾補F後做奇偶對調)

SCA示例

短信中心

PDU編碼

+8613010452500

0891683110402505F0

13010452500

07813110402505F0

123456

0481214365

PDU編碼組成部分如下

Lenghth

Type

Address

08

91

683110402505F0

07

81

3110402505F0

04

81

214365

註意:SCA的長度不包含在“PDU編碼後的數據總長度”,即AT+CMGS = LEN中的LEN當中

4.2PDU-Type

協議數據單元類型是用1個字節表示的8個位圖,具體含義如下

Bit No.

7

6

5

4

3

2

1

0

發送方

RP

UDHI

SRR

VPF

VPF

RD

MTI

MTI

接收方

SRI

\

\

MMS

其中,長短信與普通短信有區別的位,用粗體表示。

RP:應答路徑 0-未設置 1-設置

UDHI:用戶數據頭標識(User Data Header Indicator)0-用戶數據(UD)部分不包含頭信息1-用戶數據(UD)開始部分包含用戶頭信息

SRR:請求狀態報告(Status Report Request), 0-不需要報告 1-需要報告

SRI:狀態報告指示(Status Report Indication)

註:此值僅被短消息服務中心設置 0-狀態報告將不會返回給短消息實體(SME) 1-狀態報告將返回給短消息實體(SME)

VPF:有效期格式(Validity Period Format) 00-VP段沒有提供(長度為0) 01-保留 10-VP段以整型形式提供(相對的) 11-VP段以8位位組的一半形式提供(絕對的)

RD:拒絕復本(Reject Duplicate) 0-通知短消息服務中心(SMSC)接受一個消息(SMS-SUBMIT),即該消息是先前已提交過的,並還存在與SMSC中未發送出去。MS重復的條件是:消息參考(MR)、接收方地址(DA)及發送方地址(OA)相同 1-通知SMSC拒絕一個重復的SMS

MMS:有更多的消息需要發送(More Message to Send)

0-在SMSC中有更多的信息等待MS1-在SMSC中沒有更多的信息等待MS

MTI:信息類型指示(Message Type Indicator) 待查 可填0

以上可知

PDU-Type

普通短信

長短信

UDHI標識位

0

1

MMS標識位

1

最後一條為1其余為0

4.3UDL用戶數據長度

普通短信

長短信

UDL

短信內容長度

UDH用戶數據頭長度+SM拆分後短信內容長度

4.4UD用戶數據

普通短信

長短信

UD

全部為短信內容

UDH用戶數據頭+SM拆分後短信內容

5長短信UD

工程上我們需要判斷待發送的短信內容長度,所以長短信的UD編碼是一定用的到的,普通短信相對簡單,下面重點介紹一下長短信的UD組成。

長短信UD用戶數據(User Data)格式

UD = UDH + SM

5.1UDH用戶數據頭

長短信的UDH固定為67,長度為6的常用。

示例如下:

UDHL

IEI

IEDL

IED

Reference No.

Maximum No.

Current

No.

05

00

03

C6

02

01

看不懂?莫慌,下文對詳細介紹每個字節。

UDH = UDHL + IE

UDHL

IE

IE”A”

……

IE”N”

1) UDHL用戶數據頭長度(User Data Header Length)

一個字節,表示用戶數據頭的字節數,不包含本字節,UDHL+1=整個用戶數據頭長度

2) IE用戶數據頭信息單元(Information Element)

IE中可以包含IE”A”、IE”B”、……、IE” N”等多個信息單元,每個信息單元又分為

IEI

IEDL

IED

a) IEI信息單元標識(Information Element Identifier)

00:Concatenated short messages

01:Special SMS Message Indication

02:Reserved

03:Value not used to avoidmisinterpretation as <LF> character

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

C0– DF:SC specificuse

E0– FF:Reserved forfuture use

0008都表示長短信,區別在於00是用一個字節表示“參考編號”,而08用兩個字節表示“參考編號”(IED組成說明)。

b) IEDL信息單元數據長度(Length of Information Element)

一個字節,表示信息單元長度,也就是IED的字節數,不包含本字節IED信息單元數據(Information Element Data)

c) 長短信的IED由3字節組成

IEI0008時的IED如下

第一字節:參考編號(Reference Number),參考編號相同的為同一長短信

第二字節:總條數(Maximum number),長短信拆分後的總條數

第三字節:當前短信序號,當前短信是長短信中的第幾條

現在再看開頭的UDH示例就能看懂了吧,附上一個總長度為7個字節的長短信UDH示例:

UDHL

IEI

IEDL

IED

Reference No.

Maximum No.

Current

No.

06

08

03

C6 C6

02

01

5.2SM短消息

SM Short Message用戶短信內容文本有三種編碼方式

編碼(無壓縮)

單條字短信長度(字節)

特點

7-bit

153

只能發送ASCII字符

8-bit

140-UDHL = 134

流數據(圖信號等)

16-bit USC2

(140-UDHL)/2 = 67

Unicode字符(中文常用)

在壓縮模式下單條子短信長度最多134字節,其中包含壓縮頭(Compression Header)、壓縮尾(Compression Footer)在內。

SM內容格式化的編碼方式這裏就不再贅述了,最後,有兩個臨界值需要註意一下:判斷是否拆分短信的長度是140字節或70個編碼後的Unicode字符;而判斷拆分為多少條的長度是67(需要去除UDHL)。

GSM協議PDU編碼長短信方法