GSM協議PDU編碼長短信方法
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服務中心地址由三部分:第一個部分表示服務中心地址長度,第二個部分表示服務中心類型,第三個部分表示服務中心地址。
Length:type和address的長度之和(如果Length為00則不提供後面部分,發送時終端將自動從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固定為6或7,長度為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
00和08都表示長短信,區別在於00是用一個字節表示“參考編號”,而08用兩個字節表示“參考編號”(見IED組成說明)。
b) IEDL信息單元數據長度(Length of Information Element)
一個字節,表示信息單元長度,也就是IED的字節數,不包含本字節IED信息單元數據(Information Element Data)
c) 長短信的IED由3字節組成
即IEI為00或08時的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編碼長短信方法