接口協議(CMPP)
V1.1
中國移動通信集團公司
2000/11/29
--------------------------------------------------------------------------------
編制說明
本規範為中國移動通信集團公司企業規範,規定信息資源站實體與互聯網短消息網關的應用層接口協議。本協議版本為1.1版。
略縮語
ISMG Internet Short Message Gateway 互聯網短消息網關
SMPP Short Message Peer to Peer 短消息點對點協議
CMPP China Mobile Peer to Peer 中國移動點對點協議
TLS Transport Layer Security 傳輸層安全
SMC Short Message Center 短消息中心
網絡結構
因特網SC業務中心即ISMG記錄了全網的SMC的位置,要求ICP的功能實體向ISMG發CMPP_SUBMIT消息,由ISMG將消息轉發到某SMC上。同時,SMC也可向ISMG發送短消息,由ISMG發送給相應的ICP。
維護管理中心對ISMG進行管理。
CMPP功能
CMPP用以建立短消息中心和ICP之間的通路,業務和信息的提供由ICP完成。可以為實現移動數據增值業務提供服務,例如以下業務:Email通知、語音信箱通知、Internet發短消息、移動臺發Email、催費通知、自動綜合業務信息臺(信息點播業務,主要有:天氣預報、股票信息、航班信息等)。
以下以Email通知業務為例,講述信息的流程:某因特網的用戶向ICP的Email Server發送壹封Email。ICP的POP3 SERVER激活過濾進程,如果該用戶申請了Email通知業務,則過濾進程將用戶登記的手機號碼取出,將Email的標題取出,綁定在CMPP_SUBMIT消息中,發送給ISMG。ISMG將檢查CMPP_SUBMIT消息中“接收業務的手機號碼”字段,則在ISMG中查詢該手機用戶歸屬的SMC的地址,然後發送給SMC。ISMG得到確認消息後,將消息轉換成CMPP_SUBMIT_REP,發回給ICP。SMC收到該消息後,對該消息進行處理,並向ISMG發送確認消息,
由上述流程可見,對於ICP來講,要做的工作主要集中在第二步,即在EMAIL SERVER中做壹個過濾程序,實現上述功能即可。
從協議上說,ICP只要具備CMPP中實現的接口,就可以實現對應於控制層的功能,至於對於具體的ICP功能實體,比如Email Server、Web Server等,尚需做壹些應用層的工作。
接口
CMPP協議以TCP/IP作為底層通信承載。在有較高的安全性需要時,可選用TLS層進行安全傳輸。
消息流程
ICP與ISMG之間進行信息交互時,可以采用長連接方式,也可以采用短連接方式。所謂長連接,指在壹個連接上可以連續發送多個數據包,然後斷開連接,在連接保持期間,如果沒有數據包發送,需要雙方發鏈路檢測包。短連接是指通訊雙方有數據交互時,就建立壹個連接,數據發送完成後,則斷開此連接,即每次連接只完成壹項業務的發送。
長消息
ICP與ISMG以Client—Server方式建立TCP連接,用於雙方信息的相互提交。TCP/IP連接建立後,由Client發起建立應用層的連接,這時如果ICP或ISMG認為需要建立TLS連接,則在傳輸的數據包中置TLS字段,從而在雙方建立TLS連接。
在應用層連接建立後的數據傳輸過程中,如果ICP或ISMG需要向對端發送加密信息,也可建立TLS連接,這時只需要置相應的消息體中Tls_available(是否使用TLS層)屬性字段,且應的本條消息的消息體中的其他屬性不發送。
消息采用並發方式發送,加以流量控制,窗口大小可調,暫定為10條消息,即接收方在應答前壹次收到的消息多於10條將予以拒絕。
ICP向ISMG發送的消息類型包括:
1) CMPP_Connect 請求應用層連接
2) CMPP_Terminate 終止應用層連接
3) CMPP_Terminate_REP 終止應用層連接應答
4) CMPP_Deliver_REP 下發短信應答
5) CMPP_Submit 提交短信
6) CMPP_Query 發送短信狀態查詢
7) CMPP_Cancel 刪除短信
8) CMPP_Active_Test 激活測試
9) CMPP_Active_Test_REP 激活測試應答
ISMG向ICP發送的消息類型包括:
1) CMPP_Connect_REP 請求連接應答
2) CMPP_Deliver 短信下發
3) CMPP_Submit_REP 提交短信應答
4) CMPP_Query_REP 短信狀態查詢結果
5) CMPP_Cancel_REP 刪除短信應答
6) CMPP_Active_Test_REP 激活測試應答
7) CMPP_Active_Test 激活測試
8) CMPP_Terminate 終止應用層連接
9) CMPP_Terminate_Rep 終止應用層連接應答
ISMG之間發送的消息類型包括:
1) CMPP_Fwd 消息前轉
2) CMPP_Fwd_REP 消息前轉應答
3) CMPP_Route 路由請求
4) CMPP_Route_REP 路由請求應答
壹次操作流程
短消息
ISMG與ICP之間的通訊采用TCP/IP協議,雙方互為client和server端。發送與接收單獨進行,每項業務建立壹個連接,通訊采用應答方式,應答與請求在同壹個連接中完成。由於系統采用互為客戶端/服務器模式,操作以客戶端驅動方式發起連接請求,完成壹次操作後關閉此連接。傳輸過程中,如果ICP或ISMG認為需要建立TLS連接,則在傳輸的數據包中置TLS字段,並建立雙方的TLS連接。
連接中對ICP的認證采用階段性認證方式,當ICP首次與IMSG交換信息時,ICP首先發送身份認證包,IMSG對ICP進行身份認證後,記錄ICP的IP地址等相關信息,在以後的數據交互時,IMSG把ICP的IP地址作為認證條件,即對沒有註冊的ICP的相關信息不予處理。當ICP想斷開此邏輯上的應用層連接時,發送斷開連接請求包,ISMG接受斷開連接請求後,清除掉與此ICP相關的信息,即對MO到此ICP或ICP的MT信息均不予處理,但保存MO的信息,直到ICP再次與ISMG建立邏輯上的應用層連接,即身份認證。也允許ISMG發起斷開ICP的連接請求。
消息采用並發方式發送,並加以流量控制,窗口大小可調,暫定為10條消息,即接收方在應答前壹次收到的消息多於10條將予以拒絕。
ICP向ISMG發送的消息類型包括:
1) CMPP_Connect 請求應用層連接
2) CMPP_Terminate 終止應用層連接
3) CMPP_Terminate_REP 終止應用層連接應答
4) CMPP_Deliver_REP 下發短信應答
5) CMPP_Submit 提交短信
6) CMPP_Query 發送短信狀態查詢
7) CMPP_Cancel 刪除短信
ISMG向ICP發送的消息類型包括:
1) CMPP_Connect_REP 請求連接應答
2) CMPP_Deliver 短信下發
3) CMPP_Submit_REP 提交短信應答
4) CMPP_Query_REP 短信狀態查詢結果
5) CMPP_Cancel_REP 刪除短信應答
6) CMPP_Terminate 終止應用層連接
7) CMPP_Terminate_Rep 終止應用層連接應答
ISMG之間發送的消息類型包括:
1) CMPP_Fwd 消息前轉
2) CMPP_Fwd_REP 消息前轉應答
3) CMPP_Route 路由請求
4) CMPP_Route_REP 路由請求應答
壹次操作流程(MO和MT)
消息定義
CMPP連接端口號定義為7890。字節采用在網絡中通用的網絡序,超時時長間隔采用斐波那契數列,重發次數動態可調,最好不少於3次。
基本數據類型:
Integer
無符號整數
C-Octet String
變長字符串,以空字符表示字符串結束
Octet String
定長字符串,位數不足時,右補空
7.1消息結構
項目
說明
Message Header
消息頭(所有消息公***包頭)
Message Body
消息體
7.2 消息頭格式(Message Header)
字段名
字節數
類型
描述
Total_Length
4
Integer
消息總長度(含消息頭及消息體)
Command_ID
4
Integer
命令或響應類型
Sequence_ID
4
Integer
消息流水號,順序累加,步長為1,循環使用
7.3 消息體格式(Message Body)
1. CMPP_Connect 請求連接
字段名
字節數
屬性
描述
Source_Addr
6
Octet String
ICP_ID
AuthenticatorICP
16
Octet String
ICP認證碼[1]
Reverse
8
Octet String
保留項(暫不用)
2. CMPP_Connect_REP 請求連接應答
字段名
字節數
屬性
描述
Status
1
Integer
狀態
0:正確
1:消息結構錯
2:非法ICP_ID
3:ICP認證錯
4~ :其他錯誤
AuthenticatorISMG
16
Octet String
ISMG認證碼[2]
Tls_available
1
Integer
是否使用TLS協議層
3. CMPP_Terminate 終止連接
消息體為空。
4. CMPP_Terminate_Rep 終止連接響應
消息體為空。
5.CMPP_Submit 發送短信
字段名
字節數
屬性
描述
Msg_id
4
Integer
信息標識
1~FFFFFFFFH
順序累加,步長為1,循環使用.
Pk_total
1
Integer
相同Msg_id的消息總條數
Pk_number
1
Integer
相同Msg_id的消息序號
Msg_level
1
Integer
信息級別
Service_id
10
Octet String
業務類型
Tls_available
1
Integer
是否使用TLS協議層
Msg_Fmt
1
Integer
信息格式
0:ASCII串
3:短信寫卡操作
4:二進制信息
8:UCS2編碼
15:含GB漢字
Msg_src
6
Octet String
信息內容來源(ICP_ID)
FeeType
1
Integer
資費類別
FeeCode
1
Integer
資費代碼
Valid_Time
1或17
C-Octet String
存活有效期(字節數為1時:不指定存活期,置為NULL)
At_Time
1或17
C-Octet String
定時發送的時間(字節數為1時:不指定發送時間,置為NULL)
Src_terminal_id
21
Octet String
源終端標識(沒有可以為空)
DestUsr_tl
1
Integer
接收消息的用戶數量(小於100個用戶)
Dest_terminal_id
21*DestUsr_tl
Octet String
接收業務的手機號碼
Msg_Length
1
Integer
消息長度(1-70或140)
Msg_Content
Msg_length
C-Octet String
消息內容
Reserve
8
Octet String
保留
6.CMPP_Submit_REP 發送短信響應(出錯要求ICP全部重發Msg_Id信息)
字段名
字節數
屬性
描述
Msg_Id
4
Integer
消息標識
Tls_available
1
Integer
是否使用TLS協議層
Result
1
Integer
結果
0:正確
1:消息結構錯
2:命令字錯
3:消息序號重復
4:消息長度錯
5:資費代碼錯
6:超過最大信息長
7:業務代碼錯
8: 流量控制錯
9~ :其他錯誤
7.CMPP_Query 發送短信狀態查詢(查詢Time屬性指定的日期的統計信息)
字段名
字節數
屬性
描述
Tls_available
1
Integer
是否使用TLS協議層
Time
8
Octet String
時間(精確至日)
Query_Type
1
Integer
查詢類別
0:總數查詢
1:按業務代碼查詢
Query_Code
10
Octet String
查詢碼[3](業務類型)
Reserve
8
Octet String
保留
8.CMPP_Query_REP 短信狀態查詢結果
字段名
字節數
屬性
描述
Tls_available
1
Integer
是否使用TLS協議層
Time
8
Octet String
時間(精確至日)
Query_Type
1
Integer
查詢類別
0:總數查詢
1:按業務代碼查詢
Query_Code
10
Octet String
查詢碼
MT_TLMsg
4
Integer 從ICP接收信息總數
MT_TLusr
4
Integer
從ICP接收用戶總數
MT_Scs
4
Integer
成功轉發數量
MT_WT
4
Integer
待轉發數量
MT_FL
4
Integer
轉發失敗數量
MO_Scs
4
Integer
向ICP成功送達數量
MO_WT
4
Integer
向ICP待送達數量
MO_FL
4
Integer
向ICP送達失敗數量
9. CMPP_Deliver
字段名
字節數
屬性
描述
Msg_Id
4
Integer
消息標識
Msg_Level
1
Integer
信息級別
Tls_available
1
Integer
是否使用TLS協議層
Service_id
10
Octet String
業務類型
Msg_Fmt
1
Integer
信息格式
0:ASCII串
4:二進制信息
8:UCS2編碼
Srcterminal_id
21
Octet String
源終端標識
Msg_Length
1
Integer
消息長度
Msg_Content
Msg_length
C-Octet String
消息內容
Reserve
8
Octet String
保留項(以後為ICP提供已提交給手機用戶的確認信息)
10.CMPP_Deliver_REP 下發短信響應
字段名
字節數
屬性
描述
Msg_Id
4
Integer
消息標識
Tls_available
1
Integer
是否使用TLS協議層
Result
1
Integer
結果
0:正確
1:消息結構錯
2:命令字錯
3:消息序號重復
4:消息長度錯
5:資費代碼錯
6:超過最大信息長
7:業務代碼錯
8: 流量控制錯
9~ :其他錯誤
11.CMPP_Cancel 刪除短信
字段名
字節數
屬性
描述
Msg_Id
4
Integer
消息標識
Tls_available
1
Integer
是否使用TLS協議層
12.CMPP_Cancel_REP 刪除短信響應
字段名
字節數
屬性
描述
Tls_available
1
Integer
是否使用TLS協議層
Success_Id
1
Integer
成功標識(0:成功; 1:失敗)
13.CMPP_Active_Test 激活測試
字段名
字節數
屬性
描述
Tls_available
1
Integer
是否使用TLS協議層
14.CMPP_Active_Test_REP 激活測試響應
字段名
字節數
屬性
描述
Tls_available
1
Integer
是否使用TLS協議層
Success_Id
1
Integer
成功標識(0--成功)
15. CMPP_Fwd 短信前轉
字段名
字節數
屬性
描述
Source_ Id
4
Octet String
源網關的代碼
Dest_Id
4
Octet String
目的網關代碼
NodesCount
1
Integer
經過的網關數量
Tls_available
1
Integer
是否使用TLS協議層
Msg_id
4
Interger
信息標識
Pk_total
1
Integer
相同Msg_id的消息總條數
Pk_number
1
Integer
相同Msg_id的消息序號
Msg_level
1
Integer
信息級別
Service_id
10
Octet String
業務類型
Msg_Fmt
1
Integer
信息格式
0:ASCII串
4:二進制信息
8:UCS2編碼
15:含GB漢字
Srcterminal_id
21
Octet String
源終端標識(沒有可以為空)
DestUsr_tl
1
Integer
接收消息的用戶數量
Dest_terminal_id
21*DestUsr_tl
C-Octet String
接收業務的手機號碼
Msg_src
6
Octet String
信息內容來源
FeeCode
2
Octet String
資費代碼
Valid_Time
1or17
C-Octet String
有效期(字節數為1時:不指定發送時間,置為NULL)
At_Time
1or17
C-Octet String
定時發送的時間(字節數為1時:不指定發送時間,置為NULL)
Msg_Length
1
Integet
消息長度
Msg_Content
Msg_length
C-Octet String
消息內容
Reserve
8
M
保留
16. CMPP_Fwd _REP 短信前轉響應
字段名
字節數
屬性
描述
Msg_Id
4
Integer
消息標識
Pk_total
1
Integer
相同Msg_id的消息總條數
Pk_number
1
Integer
相同Msg_id的消息序號
Tls_available
1
Integer
是否使用TLS協議層
Result
1
Integer
結果
0:正確
1:消息結構錯
2:命令字錯
3:消息序號重復
4:消息長度錯
5:資費代碼錯
6:超過最大信息長
7:業務代碼錯
8: 流量控制錯
9: 前轉判斷錯(此ICP不應發往本ISMG)
10~ :其他錯誤
17. CMPP_Route 路由請求
字段名
字節數
屬性
描述
New_Gate
1
Integer
0:普通網關;1:新增加網關
Request_Total
2
Integer
0:請求壹條;1:請求多條路由表數據(如果後面字段為空,請求路由表全部)
Service_Type
10
Octet String
請求的業務類型
Service_Code
4
Integer
請求的業務代碼
ICP_ID
6
Octet String
ICP的接入代碼(如果置Service_Type字段,此字段為空)
18. CMPP_Route_REP 路由請求應答
字段名
字節數
屬性
描述
Request_Number
2
Integer
返回的路由表數據條數,此字段值如果大於1,下面5個字段重復出現
Service_Type
10
Octet string
業務類型
Service_Code_Start
4
Integer
業務代碼起始標誌
Service_Code_End
4
Integer
業務代碼結束標誌
ICP_ID
6
Octet String
ICP的接入代碼(如果置Service_Type字段,此字段為空)
ISMG_ID
4
Octet String
對應上述條件的網關代碼
……
8.編號
8.1 ISMG_ID
地點
編號(ISMG_ID暫用區號標識)
說明
北京
(010)
斯特奇
江西
(0791)
清華深訊
廣州
(020)
清華深訊
天津
(022)
其他待定
8.2 ICP編號
ICP名稱
編號(ISMG_ID)
說明
新浪
(待定)
搜狐
(待定)
待定)
8.3 Command_ID
命令字名稱
Command_ID值
說明
CMPP_Connect
0x00000001
請求連接
CMPP_Connect_REP
0x80000001
請求連接應答
CMPP_Terminate
0x00000002
終止連接
CMPP_Terminate_REP
0x80000002
終止連接應答
CMPP_Submit
0x00000004
提交短信
CMPP_Submit_REP
0x80000004
提交短信應答
CMPP_Deliver
0x00000005
短信下發
CMPP_Deliver_REP
0x80000005
下發短信應答
CMPP_Query
0x00000006
發送短信狀態查詢
CMPP_Query_REP
0x80000006
發送短信狀態查詢應答
CMPP_Cancel
0x00000007
刪除短信
CMPP_Cancel_REP
0x80000007
刪除短信應答
CMPP_Active_Test
0x00000008
激活測試
CMPP_Active_Test_REP
0x80000008
激活測試應答
CMPP_Fwd
0x00000009
消息前轉
CMPP_Fwd_REP
0x80000009
消息前轉應答
CMPP_Route
0x00000003
路由請求
CMPP_Route_REP
0x80000003
路由請求應答
8.4 FeeType & FeeCode 資費類別和資費代碼(待定)
壹、信息級別
信息級別從1--9,“9”最高,“0”最低
二、資費代碼
具體定義為:
“00”: 免費
“99”: 包月
“98”: 封頂
“01”--“10”:0.01元--0.10元
“11”--“50”:以0.05元遞增
“51”--“80”:以0.10元遞增
“81”--“97”:保留
[1]用於鑒別ICP。其值通過單向MD5 hash計算得出,表示如下:
AuthenticatorICP =MD5(Source_Addr+9 zero int+ConnectType+shared secret)
Shared secret 由中國移動與ICP事先商定。
[2]用於鑒別ISMG。其值通過單向MD5 hash計算得出,表示如下:
AuthenticatorISMG =MD5(Status+AuthenticatorICP+ Tls_available+shared secret)
Shared secret 由中國移動與ICP事先商定,AuthenticatorICP為ICP發送給ISMG的上壹條消息CMPP_Request_Connect中的值。
[3]當Query_Type為0時,此項無效;當Query_Type為1時,此項填寫業務代碼Service_id.