發送短信的信令流程(引用自論壇牛人的回覆)html
一樣也是以前搞不懂爲何信令中MS會發cp-data和rp-data兩條信令,一條不就夠了麼,看這哥們的回覆才知道是不一樣層的打印,可是對發送的打印仍是稍微有點奇怪的,回覆的話須要兩個ack,這個也能對分層更深的理解,cp層根本就不知道rp層的數據,而rp層中才有短信接收方的地址,因此收到cp層的ack根本不能說明短信是否發送成功了。另外rp-ack是嵌套在網絡回覆的cp-data中的,這點也值得注意。下面就是牛人的解釋了:網絡
首先RRC層會檢查是否存在RRC鏈接,若是已經存在,則直接使用,若是沒有,則首先發起一個RRC鏈接創建過程。
- RRC鏈接創建完成後,高層經過CM SERVICE 過程創建MM鏈接,接收到網絡側發送的CM SERVICE ACCEPT後,就能夠開始短消息數據的發送過程了。
- 短消息的協議實體包括三層,因此響應有幾個步驟:首先UE發出的CP-DATA包括RP-DATA和協議頭,RP-DATA也是包括RP頭(主要是Originator Address和Destination Address)和用戶數據部分,它的用戶數據部分是TP-DATA,TP-DATA的用戶部分就是實際的短消息內容了,TP-DATA的數據頭部分就包括一些編碼方式等信息。
- 網絡側收到此消息後,首先CP層迴應CP-ACK,接着RP層也須要響應,RP-ACK消息嵌套在CP-DATA的用戶數據部分發送,UE須要收到這兩個ACK後才能確認網絡側正確收到了發送的短消息,而後再響應CP-ACK,至此,整個發送短消息過程結束,若是後續沒有其它過程,網絡側就能夠釋放RRC鏈接了。
精簡後單條短信的提交流程以下:
MS MSC
|SMSTP:SMS Submit type(MS -> SC)CalledNumber:xxxx; |1.這是UE發出的CP-DATA(包括協議頭和RP-DATA)
|—————————————————————————->|其中RP-DATA又包括RP頭源目的地址和TP-DATA用戶數據
| |TP-DATA又包括數據頭編碼方式和短信內容
| |
| SMSCP: CP-ACK|2.網絡側首先CP層回CP-ACK,這個由MSC回給UE
|<-—————————————————————————|
| SMSTP:SMS Deliver type(SC -> MS)|3.接着RP層也要回RP-ACK,它嵌套在CP-DATA的用戶數據
|<-—————————————————————————|部分發送。SMSTP:SMS Deliver Type實際是一條CP-DATA
| |消息,這是MSC將短信轉到SMSC後,SMSC回的消息。所以不一樣
| MM:CM service accept;|層都要回消息。
|<-—————————————————————————|
|SMSCP: CP-ACK |4. UE須要收到這兩個ACK(CP-ACK,RP-ACK)後才能確認網
|—————————————————————————->|絡側正確收到了發送的短信,再響應CP-ACK,整個發送過程
結束
實例分析:編碼
AT部分能夠參考一篇博客:http://blog.sina.com.cn/s/blog_5c52ae1b0100qrk8.htmlhtm
AT> AT+CMGS=22, "000100068166790600080c5f0053e39c7c6c6454af6211"blog
rp-data: 00 46 00 08 91 68 31 08 70 96 05 f0 // 16 01 46 06 81 //66 79 06 //00 08 //0c// 5f 00 53 e3 9c 7c 6c 64 54 af 62 11
RP-USER-DATA address TP-User-Data-Lengthget
cp-data:39 01 23 00 46 00 08 91 68 31 08 70 96 05 f0 16 01 46 06 81 66 79 06 00 08 0c 5f 00 53 e3 9c 7c 6c 64 54 af 62 11博客