SMPP - 点对点短消息协议

你好! 尽管即时通讯工具和社交网络每天都在取代传统的通信方式,但这并没有影响短信的普及。 在流行网站上进行验证,或者重复交易通知,它们会存在并将继续存在。 您有没有想过这一切是如何运作的? 很多时候,SMPP协议被用来发送群发消息,这将在下面讨论。

Habré 已经有关于 smpp 的文章, 1,2,但他们的目的不是描述协议本身。 当然,你可以立即从源头开始—— 规格,但我认为如果有其内容摘要就好了。 我以v3.4为例进行说明,很高兴您客观的批评。

SMPP 协议是一种点对点消息传递协议。 这意味着每个对等/中心服务器都是平等的。 在最简单的情况下,SMS 消息传递方案如下所示:

SMPP - 点对点短消息协议

然而,如果国家运营商没有路由,他会向中介询问到某个偏远地区的路由——短信中心。 有时,要发送一条短信,您需要在多个国家甚至几个大陆之间建立一条链。

关于协议

SMPP 是一种基于 PDU 交换的应用层协议,通过 TCP/IP 或 X25 会话传输,用于发送 sms 和 ussd 消息。 通常SMPP采用长连接模式,可以节省时间。 SMPP 使用客户端-服务器通信模型。

通讯方式

SMPP - 点对点短消息协议

发送方与短信中心通过SMPP进行消息交互可以有以下几种模式:

Transmitter(发送器)——依次沿一个方向传输消息
Receiver(接收者)——仅接收来自短信中心的消息。
Transreceiver(收发器)——短信中心与用户之间的消息交换

产品管理

SMPP - 点对点短消息协议

消息长度

当输入西里尔语时,一条 SMS 消息可以包含 70 个字符,并且不超过 157 个拉丁字符 + 3 UDH 如果您发送包含大量字符的 SMS,它将被分为多个段并在接收设备中合并。 在分段的情况下,字符数通过消息头来减少,消息头指示消息的部分。 因此,发送大型短信时,最多包含 153 个拉丁字符或 67 个非典型字符。

数据编码方案

但是,需要对字符进行编码才能传达消息。 在SMPP协议中,有一个专门的字段负责编码——数据编码方案,即DCS。 该字段指定如何识别消息。 此外,DCS领域还包括:

  • 定义编码的字符集;
  • 消息类;
  • 请求阅读后自动删除;
  • 消息压缩的指示;
  • 广播消息语言;

标准 7 位字母表 (GSM 03.38)。 它是为 GSM 中的消息系统而开发的。 此编码适用于英语和多种拉丁语言。 每个字符由 7 位组成,并被编码为一个八位字节。

UTF-16(在 GSM UCS2 中)为了包含 7 位字母表中缺失的字符,开发了 UTF-16 编码,它通过将消息大小从 160 减少到 70 来添加附加字符(包括西里尔字母),这种类型的编码几乎完全重复Unicode。

8 位用户定义数据。 其中包括 KOI8-R 和 Windows-1251。 虽然这个方案看起来比同样的UTF-16更经济。 不同设备上的兼容性存在合理的问题。 因为在这种情况下,必须提前配置两个设备。

消息类

  • Class0,或闪存,应用户请求存储在手机内存中的消息;
  • Class1,或存储在手机内存中的;
  • Class1,或存储在手机内存中的;
  • Class2,必须保证短信存储在移动终端的内存中,否则必须通知短信中心无法保存;
  • Class3 - 在这种情况下,无论设备内存有多少,手机都必须发送可以存​​储消息的通知。 此类消息意味着消息已到达收件人;

消息类型

无声消息 (SMS0) 无内容的 SMS 消息类型。 此类短信不会发出通知,也不会显示在设备屏幕上。

PDU

每个 pdu 操作都是成对的,由请求和响应组成。 例如:表示连接已建立的命令 (bind_transmitter/bind_transmitter_resp),或已发送消息的命令 (deliver_sm/deliver_sm_resp)

SMPP - 点对点短消息协议

每个 pdu 数据包由两部分组成 - 标头和主体。 任何 pdu 数据包的标头结构都是相同的:命令长度是数据包的长度,id 是数据包的名称,状态命令指示消息是否发送成功或失败。

附加 TLV 参数

TLV(标签长度值)或附加字段。 此类参数用于扩展协议的功能,但不是必需的。 该字段出现在 pdu 字段的末尾。 例如,使用 TLV dest_addr_np_information,您可以组织有关号码可移植性的信息的传输。

吨和尼皮

TON(号码类型)参数通知 SMSC 有关寻址格式和网络类型的信息。
NPI(编号计划标识)参数指示编号计划。

SMPP - 点对点短消息协议

消息源地址或字母名称

发送到手机的消息有两种形式:数字消息和字母消息。 数字可以很长(类似于电话号码)也可以很短。 有时,运营商对中性名称(例如 Infosms、Alert 等)发送有限制。 有时,如果该名称未在其网络中注册,运营商将不允许流量。 然而,这更多的是运营商的一个特点。

提交阶段

SMPP - 点对点短消息协议

短信提交 正在发送MO FSM消息(移动端短消息)
短信提交报告 — 确认消息是由 SMSC 发送的
斯瑞SM (SendRoutingInfo) - SMSC 从 HLR 接收有关用户 MSC/VLR 位置的信息
SRI SM 响应 — HLR 关于订户位置肉的回应
MT-FSM - 收到位置后,使用“转发短消息”操作发送消息
MT-FSM ACK — SMSC 回复消息已发送
短信状态报告 — SMSC 发送消息传送状态。

消息发送状态

短信状态报告 可以取几个值:
交付 消息已成功发送
拒绝 — 消息被短信中心拒绝
过期 - TTL(消息生存期)结束后,消息将从发送队列中删除
未交付 - 其他无法送达的情况
未知- 没有收到回复。

传输错误

有时,SMS 消息未发送给订阅者的原因。 这些原因的结果就是错误的发生。 错误在 PDUs_sms_resp 中返回。 所有错误可分为暂时性(Temporary)和永久性(Permanent)。

例如,absent_subscriber 是临时的,订阅者不可用或不在线,而永久的 - 订阅者不存在。 根据发生的错误,形成重新发送这些消息的策略。

例如,如果用户正忙于通话并收到MT手机忙错误,则可以在几分钟后重新发送消息,但如果用户已阻止消息接收服务,则重新发送将没有意义。 您可以在 SMSC 页面上找到错误列表,例如, .

来源: habr.com

添加评论