SMPP(Short Message Peer-to-Peer)是一种用于发送和接收短信消息的协议,通常用于移动通信网络。它允许应用程序通过短信中心(Short Message Service Center,SMSC)发送和接收短信。下面是对SMPP协议的详细解释。
1. SMPP协议概述
SMPP是一种二进制的、文本短信传输协议,用于在移动通信网络中传递短信消息。它允许短信服务提供商(SSP)与短信服务中心(SMSC)之间进行通信,以发送、接收和管理短信消息。
2. 协议基本特性
2.1. 网络拓扑
SMPP采用对等网络拓扑结构,也称为Peer-to-Peer。客户端(即短信服务提供商或应用程序)和SMSC之间通过SMPP协议进行通信。
2.2. 通信模式
SMPP协议支持两种通信模式:Transceiver、Receiver、Transmitter。
-
Transceiver:一个SMPP连接可以发送和接收消息。
-
Receiver:一个SMPP连接只能接收消息。
-
Transmitter:一个SMPP连接只能发送消息。
3. 协议消息类型
SMPP协议定义了多种消息类型,包括:
-
Bind:用于建立和终止SMPP连接。
Bind
指令的数据结构包含以下字段:-
Command Length(4字节):整个消息的长度,以字节为单位。
-
Command ID(4字节):指定消息类型,对于 Bind 指令,它的值分别可以是
0x00000001
(bind_receiver)、0x00000002
(bind_transmitter)、0x00000009
(bind_transceiver)。 -
Command Status(4字节):表示命令的状态。
-
Sequence Number(4字节):用于唯一标识每个消息。
-
System ID(16字节):标识SMPP客户端,通常为用户名。
-
Password(9字节):用于身份验证。
-
System Type(13字节):标识连接的系统类型,通常指定应用程序的类型。
-
Interface Version(1字节):SMPP协议的版本号。
-
Addr TON(1字节):地址类型,用于指定地址的类型,如国际、国内、网络、自定义等。
-
Addr NPI(1字节):号码计划识别码,用于指定地址的格式。
-
Address Range(41字节):用于指定可接受的目标地址范围。
1. Bind 指令数据结构
Bind
指令的数据结构包含以下字段:-
Command Length(4字节):整个消息的长度,以字节为单位。
-
Command ID(4字节):指定消息类型,对于 Bind 指令,它的值分别可以是
0x00000001
(bind_receiver)、0x00000002
(bind_transmitter)、0x00000009
(bind_transceiver)。 -
Command Status(4字节):表示命令的状态。
-
Sequence Number(4字节):用于唯一标识每个消息。
-
System ID(16字节):标识SMPP客户端,通常为用户名。
-
Password(9字节):用于身份验证。
-
System Type(13字节):标识连接的系统类型,通常指定应用程序的类型。
-
Interface Version(1字节):SMPP协议的版本号。
-
Addr TON(1字节):地址类型,用于指定地址的类型,如国际、国内、网络、自定义等。
-
Addr NPI(1字节):号码计划识别码,用于指定地址的格式。
-
Address Range(41字节):用于指定可接受的目标地址范围。
-
-
Submit:用于将短信提交到SMSC。
Submit
指令的数据结构包含以下字段:-
Command Length(4字节):整个消息的长度,以字节为单位。
-
Command ID(4字节):指定消息类型,对于
Submit
指令,它的值是0x00000004
。 -
Command Status(4字节):表示命令的状态。
-
Sequence Number(4字节):用于唯一标识每个消息。
-
Service Type(6字节):标识服务类型,通常用于业务分发。
-
Source Address (Source Addr)(21字节):发送方地址,通常是发送短信的号码。
-
Destination Address (Destination Addr)(21字节):接收方地址,即短信接收者的号码。
-
Esm Class(1字节):消息的模式和类型。
-
Protocol ID(1字节):指定协议标识,用于控制消息的处理方式。
-
Priority Flag(1字节):消息的优先级。
-
Schedule Delivery Time(17字节):指定消息的投递时间。
-
Validity Period(17字节):消息的有效期。
-
Registered Delivery(1字节):是否需要状态报告。
-
Replace If Present Flag(1字节):替换已经存在的消息。
-
Data Coding(1字节):指定消息内容的编码方式。
-
Short Message Length(1字节):短消息内容长度,以字节为单位。
-
Short Message(可变长度):短消息内容,通常为文本信息。
-
-
Deliver:用于接收来自SMSC的短信。
Deliver
指令的数据结构包含以下字段:-
Command Length(4字节):整个消息的长度,以字节为单位。
-
Command ID(4字节):指定消息类型,对于
Deliver
指令,它的值是0x00000005
。 -
Command Status(4字节):表示命令的状态。
-
Sequence Number(4字节):用于唯一标识每个消息。
-
Service Type(6字节):标识服务类型,通常用于业务分发。
-
Source Address (Source Addr)(21字节):发送方的地址,即短信发送者的号码。
-
Destination Address (Destination Addr)(21字节):接收方的地址,通常是接收短信的号码。
-
Esm Class(1字节):消息的模式和类型。
-
Protocol ID(1字节):指定协议标识,用于控制消息的处理方式。
-
Priority Flag(1字节):消息的优先级。
-
Schedule Delivery Time(17字节):指定消息的投递时间。
-
Validity Period(17字节):消息的有效期。
-
Registered Delivery(1字节):表示是否需要状态报告。
-
Replace If Present Flag(1字节):表示是否替换已经存在的消息。
-
Data Coding(1字节):指定消息内容的编码方式。
-
SM Default Message ID(1字节):消息的默认标识。
-
Short Message Length(1字节):短消息内容的长度,以字节为单位。
-
Short Message(可变长度):短消息内容,通常为文本信息。
-
-
Enquire Link:用于检查SMPP连接的状态。
Enquire Link
指令的数据结构包含以下字段:-
Command Length(4字节):整个消息的长度,以字节为单位。
-
Command ID(4字节):指定消息类型,对于
Enquire Link
指令,它的值是0x00000015
。 -
Command Status(4字节):表示命令的状态。
-
Sequence Number(4字节):用于唯一标识每个消息。
-
-
Unbind:用于解除SMPP连接。
Unbind
指令的数据结构包含以下字段:-
Command Length(4字节):整个消息的长度,以字节为单位。
-
Command ID(4字节):指定消息类型,对于
Unbind
指令,它的值是0x00000006
。 -
Command Status(4字节):表示命令的状态。
-
Sequence Number(4字节):用于唯一标识每个消息。
-
4. 消息结构
SMPP协议的消息结构采用二进制格式,具有以下基本字段:
-
Command Length:4字节,表示整个消息的长度。
-
Command ID:4字节,表示消息类型。
-
Command Status:4字节,表示命令的状态。
-
Sequence Number:4字节,用于唯一标识每个消息。
5. 消息流程
SMPP协议的消息流程一般包括以下步骤:
-
建立连接(Bind):客户端向SMSC发送Bind请求,以建立连接。
-
发送消息(Submit):客户端向SMSC发送Submit消息,将短信提交到SMSC。
-
接收消息(Deliver):SMSC向客户端发送Deliver消息,传递接收到的短信。
-
检查连接状态(Enquire Link):客户端可以定期向SMSC发送Enquire Link消息,以检查连接状态。
-
解除连接(Unbind):客户端向SMSC发送Unbind消息,以解除连接。
6. 安全性和错误处理
SMPP协议可以通过TLS/SSL等安全协议保护通信安全。在通信过程中,协议还定义了错误状态码和错误处理机制,用于处理异常情况和错误状态。
7. 应用领域
SMPP协议主要应用于企业短信通知、OTP(One-Time Password)验证、广告短信发送、银行交易通知等需要短信通信的场景。
总的来说,SMPP协议是一种用于在移动通信网络中发送和接收短信消息的二进制协议,允许应用程序与短信服务中心进行通信,以实现短信的发送、接收和管理。