SIM900A超長簡訊傳送方法
阿新 • • 發佈:2019-02-07
使用PDU模式,包含UDH頭資訊分割簡訊,使用者資料頭UDH=00表示長簡訊拆分。
貼一個轉來的PDU學習筆記,網上收藏的
關於PDU其實並不難,至於PDU是什麼,不管它,愛是什麼是什麼,我們只要知道怎麼用就可以了。
在網上看了很多關於PDU的帖子or文件,但是說的都不是很詳細。所以結合其他高人的文件,總結了這篇文件,希望通過這篇文件讓不熟悉PDU的人,熟悉PDU,讓瞭解PDU的人,再有提高。
言歸正傳:
========================
我研究的是從簡訊出發研究PDU,至於其他領域,還真不知道有沒有。所以現在我們開始簡單的講解一下一條PDU簡訊。
PDU字串為:
08 91 683108701305F0 11 00 0D 91 3176378290F9 00 00 00 02 C834
08--簡訊息中心地址長度 :這個長度怎麼獲得的呢?其實就是91 683108701305F0的字串長度除以2。不難理解。
91--簡訊息中心號碼型別:91是TON/NPI遵守International/E.164標準,指在號碼前需加‘+’號;此外還有其它數值,但91最常用。但是它是怎麼出來的呢?咱們細看一下:
91--1001 0001
91是通過兩個二進位制碼獲得的。也就是說這兩個二進位制碼有特殊的含義
解析1001: 第一位的1:具體代表什麼意思,我也沒搞明白,有高人知道可以指出。
剩下的001:數值型別(Type of Number):000--未知,001--國際,010--國內,111--留作擴充套件;
解析0001: 號碼鑑別(Numbering plan identification):0000--未知,0001--ISDN/電話號碼(E.164/E.163),1111--留作擴充套件;
683108701305F0 --簡訊息中心號碼。由於位置上略有處理,實際號碼應為:8613800 731500(字母F是指長度減1)。這需要根據運營商作相應的修改。 (前面這三段標誌位就代表了一個簡訊中心,不過有時我們看到這三段直接用“00”代替,它的意義就是直接用SIM卡的簡訊中心,如果關於這點還有疑問的話。那就需要普及一下手機常識了。手機本身有固定的簡訊中心,這是出廠時由手機廠商設定的,不過當插上SIM卡時,手機都有自適應的過程,這是基本都會用SIM卡的簡訊中心代替手機的簡訊中心。所以我們可將SIM卡插進所有手機後,就能發簡訊。如果不能,那說明手機沒有自適應。那就手動設定一下簡訊中心就可以收/發簡訊了。)
11--檔案頭位元組:這個數值的獲得也是通過二進位制數獲得的
11--0001 0001 其實二進位制中的每一位都有自己的意義,我們來具體看看(左邊為第一位):
第一位:應答路徑--TP-RP(TP-Reply-Path):0--不設定;1--設定
第二位:使用者資料頭標識--TP-UDHI(TP-User-Data-Header-Indicator):0--不含任何頭資訊;1--含頭資訊(本簡訊是沒有頭資訊的,下文中會有包含頭資訊的簡訊,到時再具體解析頭資訊UDH)
第三位:狀態報告要求--TP-SPR(TP-Status-Report-Request):0--需要報告;1--不需要報告
第四、五位:有效期格式--TP-VPF(TP-Validity-Period-Format):00--不提供(Not present);10--整型(標準);01--預留;11--提供8位位元組的一半(Semi-Octet Represented)
第六位:拒絕複製--TP-RD(TP-Reject-Duplicates):0--接受複製;1--拒絕複製
第七、八位:資訊型別提示--TP-MTI(TP-Message-Type-Indicator):00--接收(Deliver);01--傳送(Submit)
00--資訊型別 (TP-Message-Reference):這個標誌基本沒啥變化,所以本人也沒過多的研究,如果有高人知道,可以指明一下。
0B--被叫號碼長度。
91--被叫號碼型別
3176378290F9--被叫號碼,經過了位移處理,實際號碼為“13677328099” 這三個欄位通稱目的地址(TP-Destination-Address)。
00--協議標識TP-PID(TP-Protocol-Identifier):這段基本也是千年不變的,不過可以列舉出各個位的含義:
00--0000 0000
第1、2位:
00--如下面定義的分配,我們可以理解為預設形式。其實就是說後邊六位 的定義就是本身的協議規範。
01--參見GSM03.40協議標識完全定義
10--預留
11--為服務中心(SC)特殊用途分配後六位。
第3位:0--不使用遠端網路,只是短訊息裝置之間的協議;1--使用遠端網路。
第4-8位:00000--隱含;00001--電傳;00010--group 3 telefax;00100--語音;00101--歐洲無線資訊系統(ERMES);00110--國內系統;10001--任何基於X.400的公用資訊處理 系統;10010--Email。
00--資料編碼方案TP-DCS(TP-Data-Coding-Scheme):
00--0000 0000:
第1、2位:一般設定為00
第3位:0--文字未壓縮,1--文字用GSM標準壓縮演算法壓縮
第4位:0--表示最後兩位不包含資訊,1--表示最後兩位包含資訊型別資訊
第5、6位:00--預設的字母表,01--8bit,10--USC2(16bit),11--預留
第7、8位:00--Class 0,01--Class 1,10--Class 2(SIM卡特定資訊),11--Class 3。
00--有效期TP-VP(TP-Valid-Period):
VP value: 相應的有效期
00 to 8F : (VP+1)*5 分鐘
90 to A7 : 12小時+(VP-143)*30分鐘
A8 to C4 : (VP-166)*1天
C5 to FF : (VP-192)*1 周
02--使用者資料長度TP-UDL(TP-User-Data-Length):計算方法就是此位元組後字串長度除2,不做過多解釋。
C834--使用者資料TP-UD(TP-User-Data):“Hi”
========================
上述就是一條普通簡訊的PDU形式,下面說說關於有UDH的PDU簡訊是什麼樣子: 還是以剛才那個簡訊為基礎,自己改改就能明白了:
08 91 683108701305F0 51 00 0D 91 3176378290F9 00 00 00 09 06050442664266 C834
有變化的地方已經用藍色標明瞭,其他無變化。所以直接解析藍色欄位即可:
51--檔案頭位元組0101 0001:看了二進位制形式,再結合上面講的,就明白了這裡加了一個UDHI標示,也就是說這條簡訊有使用者頭資訊(UDH-User Data Header),那麼真正的UDH在哪呢?其實就是在使用者資料(TP-UD)中,也就是06050442664266。
09--使用者資料長度TP-UDL(TP-User-Data-Length):這個長度就是UDH+UD的長度除2。很明瞭了。
06050442664266--使用者資料頭UDH:這個地方還是要細說一下的:
06--使用者資料頭長度:不包含自己的。
05--我沒找到具體的中文解釋,但以我個人理解就是UDH的意義(在GSM03.40規範中有明確的說明各個值的含義,列舉一下,可以看看自己感興趣的):
00 Concatenated short messages, 8-bit reference number(長簡訊拆分使用)
01 Special SMS Message Indication
02 Reserved
03 Value not used to avoid misinterpretation as 【LF】 character
04 Application port addressing scheme, 8 bit 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 for future use
C0 - DF SC specific use
E0 - FF Reserved for future use
04--埠長度:不解釋了,自己看一下吧。
4266--目標埠號:不解釋了,自己看一下吧。
4266--源埠號:不解釋了,自己看一下吧。
上邊這段主要是為了告訴大家如何增加一個UDH,以及UDH應該增加到什麼位置上,還有就是增加了UDH,對其他標識位的影響。
========================
順便再提一提長簡訊。為什麼突然轉到長簡訊?很簡單,長簡訊在拆分時會用到UDH。所以一塊說了。
依然以最開的簡訊為例,改裝一下大家就明白長簡訊的拆分規則了:
08 91 683108701305F0 51 00 0D 91 3176378290F9 00 00 00 08 050003000201 C834
08 91 683108701305F0 51 00 0D 91 3176378290F9 00 00 00 08 050003000202 C834
這兩條簡訊大家可以理解為一個長簡訊被拆分成兩條簡訊(不要深究簡訊內容啊)。下面說明一下有變更的地方:
08--使用者資料長度TP-UDL(TP-User-Data-Length):不解釋了。
050003000201--UDH內容:
05--UDHL使用者資料頭長度
00--UDH的意義,可以看剛才列舉出的各個值的意義。
03--剩下簡訊標識的長度,即後面的000201
00--拆分簡訊的唯一標識,也就是說,以後組合簡訊時,要靠這個值識別本條拆分簡訊是屬於哪個長簡訊。取值範圍0~255。
02--表示長簡訊被拆成多少份
01--表示這是第一個拆分簡訊,也就是拆分簡訊的序號。
貼一個轉來的PDU學習筆記,網上收藏的
關於PDU其實並不難,至於PDU是什麼,不管它,愛是什麼是什麼,我們只要知道怎麼用就可以了。
在網上看了很多關於PDU的帖子or文件,但是說的都不是很詳細。所以結合其他高人的文件,總結了這篇文件,希望通過這篇文件讓不熟悉PDU的人,熟悉PDU,讓瞭解PDU的人,再有提高。
言歸正傳:
========================
我研究的是從簡訊出發研究PDU,至於其他領域,還真不知道有沒有。所以現在我們開始簡單的講解一下一條PDU簡訊。
PDU字串為:
08 91 683108701305F0 11 00 0D 91 3176378290F9 00 00 00 02 C834
08--簡訊息中心地址長度
91--簡訊息中心號碼型別:91是TON/NPI遵守International/E.164標準,指在號碼前需加‘+’號;此外還有其它數值,但91最常用。但是它是怎麼出來的呢?咱們細看一下:
91--1001 0001
91是通過兩個二進位制碼獲得的。也就是說這兩個二進位制碼有特殊的含義
解析1001: 第一位的1:具體代表什麼意思,我也沒搞明白,有高人知道可以指出。
剩下的001:數值型別(Type of Number):000--未知,001--國際,010--國內,111--留作擴充套件;
解析0001: 號碼鑑別(Numbering plan identification):0000--未知,0001--ISDN/電話號碼(E.164/E.163),1111--留作擴充套件;
683108701305F0
11--檔案頭位元組:這個數值的獲得也是通過二進位制數獲得的
11--0001 0001 其實二進位制中的每一位都有自己的意義,我們來具體看看(左邊為第一位):
第一位:應答路徑--TP-RP(TP-Reply-Path):0--不設定;1--設定
第二位:使用者資料頭標識--TP-UDHI(TP-User-Data-Header-Indicator):0--不含任何頭資訊;1--含頭資訊(本簡訊是沒有頭資訊的,下文中會有包含頭資訊的簡訊,到時再具體解析頭資訊UDH)
第三位:狀態報告要求--TP-SPR(TP-Status-Report-Request):0--需要報告;1--不需要報告
第四、五位:有效期格式--TP-VPF(TP-Validity-Period-Format):00--不提供(Not present);10--整型(標準);01--預留;11--提供8位位元組的一半(Semi-Octet Represented)
第六位:拒絕複製--TP-RD(TP-Reject-Duplicates):0--接受複製;1--拒絕複製
第七、八位:資訊型別提示--TP-MTI(TP-Message-Type-Indicator):00--接收(Deliver);01--傳送(Submit)
00--資訊型別
0B--被叫號碼長度。
91--被叫號碼型別
3176378290F9--被叫號碼,經過了位移處理,實際號碼為“13677328099” 這三個欄位通稱目的地址(TP-Destination-Address)。
00--協議標識TP-PID(TP-Protocol-Identifier):這段基本也是千年不變的,不過可以列舉出各個位的含義:
00--0000 0000
第1、2位:
00--如下面定義的分配,我們可以理解為預設形式。其實就是說後邊六位 的定義就是本身的協議規範。
01--參見GSM03.40協議標識完全定義
10--預留
11--為服務中心(SC)特殊用途分配後六位。
第3位:0--不使用遠端網路,只是短訊息裝置之間的協議;1--使用遠端網路。
第4-8位:00000--隱含;00001--電傳;00010--group 3 telefax;00100--語音;00101--歐洲無線資訊系統(ERMES);00110--國內系統;10001--任何基於X.400的公用資訊處理 系統;10010--Email。
00--資料編碼方案TP-DCS(TP-Data-Coding-Scheme):
00--0000 0000:
第1、2位:一般設定為00
第3位:0--文字未壓縮,1--文字用GSM標準壓縮演算法壓縮
第4位:0--表示最後兩位不包含資訊,1--表示最後兩位包含資訊型別資訊
第5、6位:00--預設的字母表,01--8bit,10--USC2(16bit),11--預留
第7、8位:00--Class 0,01--Class 1,10--Class 2(SIM卡特定資訊),11--Class 3。
00--有效期TP-VP(TP-Valid-Period):
VP value: 相應的有效期
00 to 8F : (VP+1)*5 分鐘
90 to A7 : 12小時+(VP-143)*30分鐘
A8 to C4 : (VP-166)*1天
C5 to FF : (VP-192)*1 周
02--使用者資料長度TP-UDL(TP-User-Data-Length):計算方法就是此位元組後字串長度除2,不做過多解釋。
C834--使用者資料TP-UD(TP-User-Data):“Hi”
========================
上述就是一條普通簡訊的PDU形式,下面說說關於有UDH的PDU簡訊是什麼樣子: 還是以剛才那個簡訊為基礎,自己改改就能明白了:
08 91 683108701305F0 51 00 0D 91 3176378290F9 00 00 00 09 06050442664266 C834
有變化的地方已經用藍色標明瞭,其他無變化。所以直接解析藍色欄位即可:
51--檔案頭位元組0101 0001:看了二進位制形式,再結合上面講的,就明白了這裡加了一個UDHI標示,也就是說這條簡訊有使用者頭資訊(UDH-User Data Header),那麼真正的UDH在哪呢?其實就是在使用者資料(TP-UD)中,也就是06050442664266。
09--使用者資料長度TP-UDL(TP-User-Data-Length):這個長度就是UDH+UD的長度除2。很明瞭了。
06050442664266--使用者資料頭UDH:這個地方還是要細說一下的:
06--使用者資料頭長度:不包含自己的。
05--我沒找到具體的中文解釋,但以我個人理解就是UDH的意義(在GSM03.40規範中有明確的說明各個值的含義,列舉一下,可以看看自己感興趣的):
00 Concatenated short messages, 8-bit reference number(長簡訊拆分使用)
01 Special SMS Message Indication
02 Reserved
03 Value not used to avoid misinterpretation as 【LF】 character
04 Application port addressing scheme, 8 bit 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 for future use
C0 - DF SC specific use
E0 - FF Reserved for future use
04--埠長度:不解釋了,自己看一下吧。
4266--目標埠號:不解釋了,自己看一下吧。
4266--源埠號:不解釋了,自己看一下吧。
上邊這段主要是為了告訴大家如何增加一個UDH,以及UDH應該增加到什麼位置上,還有就是增加了UDH,對其他標識位的影響。
========================
順便再提一提長簡訊。為什麼突然轉到長簡訊?很簡單,長簡訊在拆分時會用到UDH。所以一塊說了。
依然以最開的簡訊為例,改裝一下大家就明白長簡訊的拆分規則了:
08 91 683108701305F0 51 00 0D 91 3176378290F9 00 00 00 08 050003000201 C834
08 91 683108701305F0 51 00 0D 91 3176378290F9 00 00 00 08 050003000202 C834
這兩條簡訊大家可以理解為一個長簡訊被拆分成兩條簡訊(不要深究簡訊內容啊)。下面說明一下有變更的地方:
08--使用者資料長度TP-UDL(TP-User-Data-Length):不解釋了。
050003000201--UDH內容:
05--UDHL使用者資料頭長度
00--UDH的意義,可以看剛才列舉出的各個值的意義。
03--剩下簡訊標識的長度,即後面的000201
00--拆分簡訊的唯一標識,也就是說,以後組合簡訊時,要靠這個值識別本條拆分簡訊是屬於哪個長簡訊。取值範圍0~255。
02--表示長簡訊被拆成多少份
01--表示這是第一個拆分簡訊,也就是拆分簡訊的序號。