Posted on 2006-07-14 17:34
哈迪尤 阅读(2184)
评论(0) 编辑 收藏 所属分类:
工作
在温少的日志(
http://jobs.cnblogs.com/)中看到他的一篇文章,平时我只接触cmpp协议,乘机补一下smpp 。
CMPP和SMPP都是短信协议中的一种,但它们不是同一类型的协议。SMPP和ESME和SMC(短信中心)之间的协议,而CMPP是SP
和中国移动ISMG之间的通讯协议。
名词解释:
SMPP :Short Message Peer to Peer 短消息点对点协议
SMSC :Short Message Service Center 短消息中心
ESME :External Short Message Entity 扩展短消息实体
PLMN:Public Land Mobile Network 公共陆地移动网
SS : Secretary System 秘书台
AS: Auto System 自动台
ESME在本规范中指的是通过本规范规定的协议与SMSC通信,请求特定的短消息服务的功能实体。
SS指人工话务接入并受理短消息服务请求的系统。
AS指利用交互式语音技术受理短消息服务请求的系统。
SS(秘书台)和AS(自动台)是典型的ESME。
SMSC和ESME之间的传输网络可以是基于X.25, 或TCP/IP。
smpp和cmpp比较:
SMPP是一个国际标准,不同的SMC的是实现可能要增加特定参数,为了具备更好的扩展性,SMPP 3.4以上版本,增加了可选参数,在5.0中,
可选参数叫做TLVTable。
CMPP是中国移动定义的其内部ISMG之间、ISMG与SP之间的通讯标准,涉及一些具体的计费信息,但没有可选参数。
在SMPP中,消息头包括4部分:PDU长度、Command_Id、Command_Status、Sequence_Id。其中Command_Status字段,只在回应消息中中使用,
存在冗余。
CMPP中,消息头部包括3部分:PDU长度、Command_Id、Sequence_Id。个人认为,CMPP中的消息头,不包括Command_Status,似乎更好一些。
- ESME到SMSC的消息
命令 | 描述 |
bind_receiver | ESME要求以接收者身份连接到SMSC |
bind_transmitter | ESME要求以发送者身份连接到SMSC |
Unbind | ESME要求断开连接到SMSC |
submit_sm | ESME提交短消息到SMSC,以便SMSC下发此短消息到指定的移动台。 |
deliver_sm_resp | deliver_sm的响应。 |
query_sm | ESME查询以前所提交的短消息的状态 |
cancel_sm | ESME要求取消以前所提交的某条短消息 |
replace_sm | ESME要求替换以前所提交的某条短消息 |
enquire_link | 询问与SMSC的连接情况 |
generic_nak | 表示消息头有错误的响应 |
replace_sm_ex | ESME要求替换以前所提交的某条短消息的扩展命令,它比replace_sm增加了数据编码格式字段 |
add_sub | 增加用户 |
del_sub | 删除用户 |
mod_sub | 修改用户 |
enquire_sub | 查询用户的信息 |
- SMSC到ESME的消息
命令 | 描述 |
bind_receiver_resp | bind_receiver的响应,status表示连接成功与否 |
bind_transmitter_resp | bind_transmitter的响应,status表示连接成功与否 |
unbind_resp | unbind的响应,status表示断开连接成功与否 |
submit_sm_resp | submit_sm的响应,status表明提交短消息是否成功 |
deliver_sm | SMSC下发短消息到ESME |
query_sm_resp | query_sm的响应,status表明此次询问是否成功,其它内容返回查询到的短消息信息 |
cancel_sm_resp | cancel_sm的响应。Status表明取消短消息是否成功 |
replace_sm_resp | replace_sm的响应,status表明此次替换是否成功 |
enquire_link_resp | Enquire_link的响应 |
generic_nak | 表示消息头有错误的响应 |
replace_sm_ex_resp | replace_sm_ex的响应,status表明此次替换是否成功 |
add_sub_resp | add_sub的响应,status表明此次增加用户是否成功。 |
del_sub_resp | del_sub的响应,status表明此次删除用户是否成功。 |
mod_sub_resp | mod_sub的响应,status表明此次修改用户是否成功。 |
enquire_sub_resp | enquire_sub的响应,status表明此次询问是否成功。其它内容返回查询到的用户信息 |
选其中比较重要的消息:
消息头
字段 | 长度(字节) | 类型 | 描述 |
Command_Length | 4 | integer | 消息包的长度,包括此字段 |
Command_ID | 4 | integer | 这个字段表明此条短消息的类型,例如ESME_SUB_SM表示此消息为ESME向SMSC提交短消息。具体数值定义见附录A。 |
Command_status | 4 | integer | 此字段表示一个命令的成功与失败,如失败,指示引起失败的错误类型等信息,它在请求中必须设为0。 |
Sequence_No | 4 | integer | 此字段表示消息的序列号,它由ESME产生,它是消息和它的应答之间的对应标志,它的数值在0到0XFFFFFFFF间必须保证严格单调的递增,当达到0XFFFFFFFF时,从0开始下一循环。 |
Optional Message Body | 可变 | 混合 | 此字段表示短消息的消息体部分,具体定义见6.5.2 |
SUBMIT_SM语法
字段 | 长度(字节) | 类型 | 描述 |
service_type | 最大6 | C_OctetString | 保留,必须设为0 |
source_address_ton | 1 | integer | 源地址编码类型 |
source_address_npi | 1 | integer | 源地址编码方案 |
source_address | 最大21 | C_DecString | 源地址 |
dest_address_ton | 1 | integer | 目的地址编码类型 |
dest_address_npi | 1 | integer | 目的地址编码方案 |
destination_address | 最大21 | C_DecString | 目的地址 |
esm_class | 1 | integer | 短消息类型 |
protocol_ID | 1 | integer | GSM协议类型 |
priority_flag | 1 | integer | 优先级 |
schedule_delivery_time | 最大17 | C_StringTime | 计划下发短消息的时间 |
validity_peroid | 最大17 | C_StringTime | 短消息的最后有效期限 |
registered_delivery_flag | 1 | integer | 注册短消息标志 |
replace_if_present_flag | 1 | integer | 替换短消息标志。 |
data_coding | 1 | integer | 数据编码方案 |
sm_default_msg_id | 1 | integer | 预定义短消息ID |
sm_length | 1 | integer | 短消息的长度 |
short_message_text | 最大161 | 可变 | 短消息数据内容 |