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 操作都是成對的,由請求和響應組成。 例如:表示連接已建立的命令 (bind_transmitter/bind_transmitter_resp),或已發送消息的命令 (deliver_sm/deliver_sm_resp)

SMPP - 短消息點對點協議

每個pdu包由兩部分組成——頭部(header)和主體(body)。 任何 pdu 數據包的標頭結構都是相同的:命令長度是數據包的長度,id 是數據包的名稱,狀態命令指示消息是否發送成功或失敗。

附加 TLV 參數

TLV(標籤長度值)或附加字段。 這些參數用於擴展協議的功能並且是可選的。 該字段在 pdu 字段的末尾指定。 例如,使用 dest_addr_np_information TLV,您可以組織有關號碼攜號轉網的信息傳輸。

噸和尼皮

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 頁面上找到錯誤列表,例如, .

來源: www.habr.com

添加評論