发送短信的信令流程(引用自论坛牛人的回复)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博客