中国网通PHS短消息网关技术规范第三分册.docx
《中国网通PHS短消息网关技术规范第三分册.docx》由会员分享,可在线阅读,更多相关《中国网通PHS短消息网关技术规范第三分册.docx(39页珍藏版)》请在冰豆网上搜索。
![中国网通PHS短消息网关技术规范第三分册.docx](https://file1.bdocx.com/fileroot1/2022-11/25/059154b8-c108-47d1-96c8-5033572d2482/059154b8-c108-47d1-96c8-5033572d24821.gif)
中国网通PHS短消息网关技术规范第三分册
中国网络通信集团公司企业标准
PHS短消息技术规范
第三分册短消息中心外部接口协议
(CNPP)V2.0
2004-3-12发布2004-3-12实施
中国网络通信集团公司发布
目录
前言1
1.适用范围2
2.引用标准2
3.缩略语2
4.协议概述3
4.1系统网络结构示例3
4.2协议功能4
4.3CNPP协议定义4
4.4协议栈5
4.5通信方式5
4.5.1长连接6
4.5.2短连接8
4.6会话流程9
4.6.1登录模式9
4.6.2典型流程10
4.6.2.1发送模式10
4.6.2.2接收模式11
4.6.2.3收发模式12
5.CNPPPDU定义13
5.1PDU列表13
5.1.1ESME到SMSC的消息13
5.1.2SMSC到ESME的消息13
5.2基本数据类型15
5.3PDU结构15
5.4PDU头格式15
5.5PDU体结构16
5.5.1BIND命令16
5.5.1.1BIND_RECEIVER语法16
5.5.1.2BIND_RECEIVER_RESP语法16
5.5.1.3BIND_TRANSMITTER语法17
5.5.1.4BIND_TRANSMITTER_RESP语法17
5.5.1.5BIND_TRANSCEIVER语法17
5.5.1.6BIND_TRANSCEIVER_RESP语法17
5.5.2UNBIND命令17
5.5.2.1UNBIND语法17
5.5.2.2UNBIND_RESP语法18
5.5.3GENERIC_NACK命令18
5.5.3.1GENERIC_NACK语法18
5.5.4SUBMIT_SM命令18
5.5.4.1SUBMIT_SM语法18
5.5.4.2SUBMIT_SM_RESP语法20
5.5.5SUBMIT_MULTI命令20
5.5.5.1SUBMIT_MULTI语法20
5.5.5.2SUBMIT_MULTI_RESP语法22
5.5.6DELIVER_SM命令23
5.5.6.1DELIVER_SM语法23
5.5.6.2DELIVER_SM_RESP语法24
5.5.7DATA_SM命令25
5.5.7.1DATA_SM语法25
5.5.7.2DATA_SM_RESP语法26
5.5.8QUERY_SM命令26
5.5.8.1QUERY_SM语法26
5.5.8.2QUERY_SM_RESP语法27
5.5.9CANCEL_SM命令27
5.5.9.1CANCEL_SM语法27
5.5.9.2CANCEL_SM_RESP语法28
5.5.10REPLACE_SM命令28
5.5.10.1REPLACE_SM语法28
5.5.10.2REPLACE_SM_RESP语法29
5.5.11ENQUIRE_LINK命令30
5.5.11.1ENQUIRE_LINK语法30
5.5.11.2ENQUIRE_LINK_RESP语法30
5.5.12ALERT_NOTIFICATION命令30
5.5.12.1ALERT_NOTIFICATION语法30
6.状态报告31
7.参数数值定义32
7.1command_id数值定义32
前言
本标准描述了PHS短消息中心(SMSC)和外部短消息实体(ESME)之间的通信协议。
本协议简称CNPP(ChinaNetcomShortMessagePeertoPeerProtocol)。
本标准是PHS短消息网关技术规范的系列规范之一,该系列规范的名称如下:
PHS短消息网关技术规范第一分册:
短消息网关与服务提供商(SP)接口规范(CNGP);
PHS短消息网关技术规范第二分册:
短消息网关与计费中心接口规范;
PHS短消息网关技术规范第三分册:
短消息中心外部接口协议(CNPP);
PHS短消息网关技术规范第四分册:
短消息网关设备规范;
PHS短消息网关技术规范V2.0说明。
本标准起草单位:
中国网络通信集团公司、中国网通集团研究院
本标准主要起草人:
张文钺、李松林、蒋美景、叶丹、潘海鹏、王志军
本规范的解释权属于中国网络通信集团公司。
1.适用范围
本规范规定了PHS通信网外部短消息实体(ESME)与短消息中心(SMSC)之间通信协议的技术细节。
本规范主要适用于PHS通信网外部短消息实体(ESME)和短消息中心(SMSC),为短消息中心(SMSC)接入外部短消息实体(ESME)提供技术依据。
2.引用标准
SMPP(ShortMessagePeertoPeerProtocolSpecification)v3.4
3.缩略语
英文缩写
英文全称
说明
ESME
ExternalShortMessageEntity
外部短消息实体
PDU
ProtocolDataUnit
协议数据单元
SME
ShortMessageEntity
短消息实体
SMPP
ShortMessagePeertoPeer
短消息点对点协议
SMSC
ShortMessageServiceCenter
短消息中心
ACK
Acknowledgement
确认应答
NACK
NegativeAcknowledgement
否认应答
CDR
CallDetailRecord
详细呼叫记录
API
ApplicationProgrammingInterface
应用编程接口
SMGW
ShortMessageGateway
短消息网关
PS
PersonalStation
用户终端
SS
SecretarySystem
秘书台
AS
AutoSystem
自动台
注:
在本规范中,ESME泛指那些处在PHS通信网外的短消息源或者接收实体,如SMGW,SS,AS,语音邮箱系统和消息处理计算机等。
SME则位于PHS通信网内,一般就指用户终端(PS)。
4.协议概述
本规范规定了SMSC和ESME之间通信的数据格式。
本规范是在SMPP3.3协议的基础上,经过扩展而成。
4.1系统网络结构示例
图1SMSC和ESME连接的短消息系统网络图
SMSC指短消息中心。
ESME在本规范中指的是通过本规范规定的协议与SMSC通信,请求特定的短消息服务的功能实体。
SMGW指短消息网关。
VMS指语音邮箱系统。
SS指人工话务接入并受理短消息服务请求的系统。
AS指利用交互式语音技术受理短消息服务请求的系统。
SMGW、VMS、SS和AS是典型的ESME。
SMSC和ESME之间基于TCP/IP协议进行通信。
4.2协议功能
通过本规范,一个外部短消息实体ESME可以在TCP/IP连接之上与SMSC建立应用层连接。
通过该连接,ESME与SMSC之间可以互相发送和接收短消息。
此外,ESME还可以查询、取消和替代短消息。
CNPP可以实现的功能举例如下:
1.ESME通过SMSC向一个或多个目的地址发送短消息
2.ESME可以通过SMSC从其他的SME(如用户终端)接收短消息
3.查询存储在SMSC的短消息的状态
4.取消或替代存储在SMSC的短消息
5.设定短消息的发送日期和时间
6.选择短消息的模式,即数据报或者存储转发
7.设置短消息发送的优先级
8.定义短消息的数据编码类型
9.设置短消息的有效期限
4.3CNPP协议定义
CNPP协议是一个数据报方式的交互式协议,通过TCP/IP协议传递数据。
ESME和SMSC之间通过交换请求和应答PDU来进行通信。
本规范定义了:
1.ESME和SMSC之间交互的命令集以及与之相关的PDU。
2.ESME和SMSC在CNPP命令里交换的数据。
在CNPP里,每一个命令都由一个请求PDU和一个应答PDU组成。
接收方对于每一个CNPPPDU请求,都必须返回一个应答。
唯一的例外是:
alter_notification没有应答PDU。
ESME和SMSC之间的交互消息可以归类为如下的两个部分:
(1)ESME到SMSC的消息
(2)SMSC到ESME的消息
4.4协议栈
CNPP标准以TCP/IP作为底层通信承载,具体结构由图2所示:
图2CNPP协议栈
4.5通信方式
ESME和SMSC之间进行信息交互时,SMSC作为服务器端,ESME作为客户端建立连接,可以采用长连接方式,也可以采用短连接方式。
所谓长连接,指在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,如果没有数据包发送,需要双方发链路检测消息以维持此连接。
短连接是指通信双方有数据交互时,就建立一个TCP连接,数据发送完成后,则断开此TCP连接,即每次TCP连接只完成一对CNPP消息的发送。
基于效率上的考虑,建议使用长连接方式。
4.5.1长连接
通信双方以客户-服务器方式建立TCP连接,用于双方信息的相互提交。
当信道上没有数据传输时,通信双方应每隔时间C发送链路检测消息以维持此连接,当链路检测消息发出超过时间T后未收到应答,应立即再发送链路检测消息,再连续发送N-1次后仍未得到应答则断开此连接。
参数C、T、N原则上应可配置,现阶段建议取值为:
C=3分钟,T=60秒,N=3。
ESME和SMSC之间的消息发送后等待T秒后未收到应答,应立即重发,再连续发送N-1次后仍未得到应答则停发。
现阶段建议取值为:
T=60秒,N=3。
消息采用并发方式发送,加以滑动窗口流量控制,窗口大小参数W可配置,现阶段建议为16,即接收方在应答前一次收到的消息最多不超过16条。
长连接的操作流程举例如图3所示:
图3长连接
4.5.2短连接
通信双方以客户-服务器方式建立TCP连接,应答与请求在同一个连接中完成。
系统采用客户/服务器模式,操作以客户端驱动方式发起连接请求,完成一次操作后关闭此连接。
ESME和SMSC之间的消息发送后等待T秒后未收到应答,应立即重发,再连续发送N-1次后仍未得到应答则停发。
现阶段建议取值为:
T=60秒,N=3。
短连接的操作流程举例如图4所示:
图4短连接的操作流程
4.6会话流程
4.6.1登录模式
在CNPP标准的一个会话中ESME可以采用三种方式与SMSC相连:
发送模式(TransmitMode)、接收模式(ReceiveMode)和收发模式(TransceiverMode)。
在发送模式中ESME只能发送短消息、在接收模式中ESME只能接收短消息、在收发模式中ESME既可以发送也可以接收短消息。
三种模式均可以采用长连接与短连接两种连接方式的一种,根据实际情况选择。
4.6.2典型流程
4.6.2.1发送模式
图5ESME以发送模式连接到SMSC
图5描述了一个典型的发送模式下的请求应答序列。
ESME以发送模式连接到SMSC。
ESME向SMSC发起提交短消息,查询短消息状态,删除短消息等请求,SMSC返回请求的应答。
ESME和SMSC之间的请求应答消息可以是阻塞方式也可以是异步方式的。
所以ESME可能在SMSC没有应答的情况下,发起多个请求到SMSC。
SMSC应该按照收到的请求顺序,给ESME回响应。
但是ESME必须能够处理没有按顺序的响应。
4.6.2.2接收模式
图6ESME以接收模式连接到SMSC
图6描述了一个典型的接收模式下的消息序列。
ESME以接收模式连接到SMSC。
SMSC向此类ESME转发短消息,ESME向SMSC回应答。
ESME和SMSC之间的请求应答消息可以是阻塞方式也可以是异步方式的。
所以SMSC可能在ESME没有回应答的情况下,发送发起多个deliver_sm请求到ESME。
ESME应该按照收到的请求顺序,给SMSC返回响应。
但是SMSC必须能够处理没有按顺序回的响应。
4.6.2.3收发模式
图7ESME以收发模式连接到SMSC
图7描述了一个典型的收发模式下的请求应答序列。
ESME以收发模式连接到SMSC。
ESME向SMSC发起提交短消息,查询短消息状态,删除短消息等请求,SMSC返回请求的应答;SMSC向ESME转发短消息,ESME向SMSC回应答。
ESME和SMSC之间的请求应答消息可以是阻塞方式也可以是异步方式的。
所以ESME可能在SMSC没有应答的情况下,发起多个请求到SMSC。
反之亦然。
SMSC应该按照收到的请求顺序,给ESME回响应。
但是ESME必须能够处理没有按顺序的响应。
反之亦然。
5.CNPPPDU定义
5.1PDU列表
5.1.1ESME到SMSC的消息
命令
描述
实现级别
bind_receiver
ESME要求以接收模式连接到SMSC
必选
bind_transmitter
ESME要求以发送模式连接到SMSC
必选
bind_transceiver
ESME要求以收发模式连接到SMSC
必选
unbind
ESME要求断开连接到SMSC
必选
generic_nack
表示消息头有错误的响应
必选
submit_sm
ESME提交短消息到SMSC,以便SMSC下发此短消息到指定的用户终端
必选
submit_multi
ESME提交一条短消息到SMSC,SMSC下发此短消息到多个接收者,或者一个或多个发布列表
必选
deliver_sm_resp
deliver_sm的响应
必选
data_sm
ESME请求SMSC发送短消息到用户终端
可选
data_sm_resp
data_sm的响应消息
可选
query_sm
ESME查询以前所提交的短消息的状态
必选
cancel_sm
ESME要求取消以前所提交的某条短消息
必选
replace_sm
ESME要求替换以前所提交的某条短消息
必选
enquire_link
询问与SMSC的连接情况
必选
表1ESME到SMSC的消息
5.1.2SMSC到ESME的消息
命令
描述
实现级别
bind_receiver_resp
bind_receiver的响应,status表示连接成功与否
必选
bind_transmitter_resp
bind_transmitter的响应,status表示连接成功与否
必选
bind_transceiver_resp
bind_transceiver的响应,status表示连接成功与否
必选
unbind_resp
unbind的响应,status表示断开连接成功与否
必选
generic_nack
表示消息头有错误的响应
必选
submit_sm_resp
submit_sm的响应,status表明提交短消息是否成功
必选
submit_multi_resp
submit_multi的响应。
必选
deliver_sm
SMSC下发短消息到ESME
必选
data_sm
SMSC将用户终端发送的短消息传递到ESME
可选
data_sm_resp
data_sm的响应消息
可选
query_sm_resp
query_sm的响应,status表明此次询问是否成功,其它内容返回查询到的短消息信息
必选
cancel_sm_resp
cancel_sm的响应。
Status表明取消短消息是否成功
必选
replace_sm_resp
replace_sm的响应,status表明此次替换是否成功
必选
enquire_link_resp
enquire_link的响应
必选
alert_notification
由SMSC产生发送给ESME,该消息无响应消息
可选
表2SMSC到ESME的消息
5.2基本数据类型
类型
说明
Integer
无符号整数
C-OctetString
以NULL结尾的ASCII字符串
C-OctetString(Decimal)
与C-OctetString不同的是,串中的每个字符为ASCII码中的0-9。
C-OctetString(Hex)
与C-OctetString不同的是,串中的每个字符为ASCII码中的0-9,A-F。
OctetString
不需以NULL结尾的字符串。
5.3PDU结构
项目
说明
格式
MessageHeader
消息头(所有消息公共包头)
定长
MessageBody
消息体(必选部分)
变长
MessageBody
消息体(可选部分)
TLV
5.4PDU头格式
字段名
字节数
类型
描述
command_length
4
Integer
PDU总长度(含消息头及消息体)
command_id
4
Integer
这个字段表明此条短消息的类型,例如submit_sm表示此消息为ESME向SMSC提交短消息,取值见6.1
command_status
4
Integer
此字段表示一个命令的成功与失败,如失败,指示引起失败的错误类型等信息,它在请求中必须设为NULL(参见第7.2节status错误代码表)
sequence_number
4
Integer
消息流水号,顺序累加,步长为1,循环使用(一对请求和应答消息的流水号必须相同)
5.5PDU体结构
5.5.1BIND命令
5.5.1.1BIND_RECEIVER语法
此命令用于ESME以接受者的方式与SMSC之间建立虚连接。
连接建立后,ESME可以从SMSC接受短消息,并发送CNPP响应消息给SMSC。
消息头中的command_id是“bind_receiver”。
消息体定义如下:
字段
长度(字节)
数据类型
说明
system_id
最大16
C-OctetString
需要与SMSC连接的ESME标识
password
最大9
C-OctetString
密码
system_type
最大13
C-OctetString
系统类型
interface_version
1
Integer
接口版本号
addr_ton
1
Integer
地址编码类型,不使用置为0
addr_npi
1
Integer
地址编码方案,不使用置为0
address_range
最大41
C-OctetString
地址范围,不使用置为NULL
5.5.1.2BIND_RECEIVER_RESP语法
此命令是BIND_RECEIVER的响应消息。
消息头中的command_id是“bind_receiver_resp”。
消息体定义如下:
字段
长度(字节)
数据类型
说明
system_id
最大16
C-OctetString
ESME请求连接的SMSC标识
5.5.1.3BIND_TRANSMITTER语法
此命令用于ESME以发送者的方式与SMSC之间建立虚连接。
连接建立后,ESME可以发送短消息到SMSC,并接受SMSC的CNPP响应消息。
消息头中的command_id是“bind_transmitter”。
消息体的定义与BIND_RECEIVER相同。
5.5.1.4BIND_TRANSMITTER_RESP语法
此命令是BIND_TRANSMITTER的响应消息。
消息头中的command_id是“bind_transmitter_resp”。
消息体的定义与BIND_RECEIVER_RESP相同。
5.5.1.5BIND_TRANSCEIVER语法
此命令用于ESME以收发者的方式与SMSC之间建立虚连接。
连接建立后,ESME可以发送短消息到SMSC,也可以从SMSC接受短消息。
消息头中的command_id是“bind_transceiver”。
消息体的定义与BIND_RECEIVER相同。
5.5.1.6BIND_TRANSCEIVER_RESP语法
此命令是BIND_TRANSCEIVER的响应消息。
消息头中的command_id是“bind_transceiver_resp”。
消息体的定义与BIND_RECEIVER_RESP相同。
5.5.2UNBIND命令
5.5.2.1UNBIND语法
此命令用于断开ESME和SMSC之间的连接。
消息头中的command_id是“unbind”。
此消息没有消息体。
5.5.2.2UNBIND_RESP语法
此命令是UNBIND的响应消息。
消息头中的command_id是“unbind_resp”。
没有消息体。
5.5.3GENERIC_NACK命令
5.5.3.1GENERIC_NACK语法
此命令用于当接收消息头有错误的时候发送的否定响应。
该消息只能由收到请求的一方发出。
此消息没有消息体。
5.5.4SUBMIT_SM命令
5.5.4.1SUBMIT_SM语法
ESME用此命令消息向SMSC提交短消息,以便SMSC将短消息发给指定的SME。
ESME也可用此命令发送状态报告消息。
消息头中的command_id是“submit_sm”。
消息体定义如下:
字段
长度(字节)
数据类型
说明
service_type
最大6
C-OctetString
短消息服务类型。
如果使用SMSC的默认值,设置为NULL。
source_addr_ton
1
Integer
源地址编码类型。
如果不知道源地址的编码类型,设置为0。
source_addr_npi
1
Integer
源地址编码方案。
如果不知道源地址的编码方案,设置为0。
source_addr
最大21
C_OctetString
源地址。
如果不知道源地址,设置为NULL。
dest_addr_ton
1
integer
目的地址编码类型
dest_addr_npi
1
integer
目的地址编码方案
destination_addr
最大21
C_OctetString
目的地址。
esm_class
1
integer
短消息类型
xx0000xx:
普通短消息
xx0001xx:
此消息为状态报告消息
其它:
保留
protocol_id
1
integer
协议类型
priority_flag
1
integer
优先级(从0到3)3为最高级
schedule_delivery_time
1或者17
C_OctetString
计划下发短消息的时间。
可以是绝对时间或相对时间,如果立即发送,设置为NULL
validity_peroid
1或者17
C_OctetString
短消息的有效期限,可以是绝对时间或相对时间,如果使用SMSC的默认有效期限,设置为NU