https://en.wikipedia.org/wiki/Short_Message_Peer-to-Peer
https://smpp.org/
Short Message Peer-to-Peer (SMPP) 是一种开放的短信协议。虽然名字中带有 P2P 的字样,但 SMPP 实际上是一种 C/S 协议。
移动 CMPP 协议,联通 SGIP 协议,电信 SMGP 协议,据说他们之间交换信息都是走 SMPP 协议。
常用版本:
- 3.3 https://smpp.org/SMPP_v3_3.pdf
仅支持 GSM 网络 - 3.4 https://smpp.org/SMPP_v3_4_Issue1_2.pdf
- https://portal.3gpp.org/desktopmodules/Specifications/SpecificationDetails.aspx?specificationId=141
- 5.0 https://smpp.org/SMPP_v5.pdf
根据维基百科的资料,SMPP 之前由 SMS 论坛开发,但是 2007 年,SMS 论坛已经解散了。
数据格式
数据包(PDU (protocol data units, or packets))格式:
header
(必需)command_length
4Bcommand_id
4Bcommand_status
4Bsequence_number
4Bbody
(可选)
'command_length', (60) ... 00 00 00 3C
'command_id', (4) ... 00 00 00 04
'command_status', (0) ... 00 00 00 00
'sequence_number', (5) ... 00 00 00 05
'service_type', () ... 00
'source_addr_ton', (2) ... 02
'source_addr_npi', (8) ... 08
'source_addr', (555) ... 35 35 35 00
'dest_addr_ton', (1) ... 01
'dest_addr_npi', (1) ... 01
'dest_addr', (555555555) ... 35 35 35 35 35 35 35 35 35 00
'esm_class', (0) ... 00
'protocol_id', (0) ... 00
'priority_flag', (0) ... 00
'schedule_delivery_time', (0) ... 00
'validity_period', (0) ... 00
'registered_delivery', (0) ... 00
'replace_if_present_flag', (0) ... 00
'data_coding', (3) ... 03
'sm_default_msg_id', (0) ... 00
'sm_length', (15) ... 0F
'short_message', (Hello Wikipedia) ... 48 65 6C 6C 6F 20 57 69 6B 69 70 65 64 69 61
名词
- SMSC:short message service center,服务器端
或者叫 Messaging Center,简写作 MC - ESME:extended short message entity,客户端
命令
Command ID | Value |
---|---|
generic_nack | 0x80000000 |
bind_receiver | 0x00000001 |
bind_receiver_resp | 0x80000001 |
bind_transmitter | 0x00000002 |
bind_transmitter_resp | 0x80000002 |
query_sm | 0x00000003 |
query_sm_resp | 0x80000003 |
submit_sm | 0x00000004 |
submit_sm_resp | 0x80000004 |
deliver_sm | 0x00000005 |
deliver_sm_resp | 0x80000005 |
unbind | 0x00000006 |
unbind_resp | 0x80000006 |
replace_sm | 0x00000007 |
replace_sm_resp | 0x80000007 |
cancel_sm | 0x00000008 |
cancel_sm_resp | 0x80000008 |
bind_transceiver | 0x00000009 |
bind_transceiver_resp | 0x80000009 |
Reserved | 0x0000000A / 0x8000000A |
outbind | 0x0000000B |
Reserved | 0x0000000C - 0x00000014 / 0x8000000B - 0x80000014 |
enquire_link | 0x00000015 |
enquire_link_resp | 0x80000015 |
Reserved | 0x00000016 - 0x00000020 / 0x80000016 - 0x80000020 |
submit_multi | 0x00000021 |
submit_multi_resp | 0x80000021 |
Reserved | 0x00000022 - 0x000000FF / 0x80000022 - 0x800000FF |
Reserved | 0x00000100 |
Reserved | 0x80000100 |
Reserved | 0x00000101 / 0x80000101 |
alert_notification | 0x00000102 |
Reserved | 0x80000102 |
data_sm | 0x00000103 |
data_sm_resp | 0x80000103 |
Reserved for SMPP extension | 0x00000104 - 0x0000FFFF / 0x80000104 - 0x8000FFFF |
Reserved | 0x00010000 - 0x000101FF / 0x80010000 - 0x800101FF |
Reserved for SMSC Vendor | 0x00010200 - 0x000102FF / 0x80010200 - 0x800102FF |
Reserved | 0x00010300 - 0xFFFFFFFF |
总结:
RequestCommandID | ComandValue | 十进制 | 说明 |
---|---|---|---|
bind_receiver | 0x00000001 | 1 | 建立接收会话(接收上行) |
bind_transmitter | 0x00000002 | 2 | 建立发送会话(提交下行) |
query_sm | 0x00000003 | 3 | 查询 |
submit_sm | 0x00000004 | 4 | 提交 |
deliver_sm | 0x00000005 | 5 | 下发(状态报告或上行) |
unbind | 0x00000006 | 6 | 中断连接 |
replace_sm | 0x00000007 | 7 | 替换已提交消息 |
cancel_sm | 0x00000008 | 8 | 取消 |
bind_transceiver | 0x00000009 | 9 | 建立会话(发送 + 接收) |
outbind | 0x0000000B | 11 | 通知客户端建立连接(bind_receiver ) |
enquire_link | 0x00000015 | 21 | 心跳 |
submit_multi | 0x00000021 | 33 | 批量提交(多个收件人) |
alert_notification | 0x00000102 | 258 | - |
data_sm | 0x00000103 | 259 | submit/deliver 的替代方案 |
- 响应:对应请求 +
0x80000000
outbind
,alert_notification
没有对应响应- 此外,还有
generic_nack
是通用拒绝响应(0x80000000
) - outbind 的场景是服务器端需要推送信息或状态给客户端