SMPP

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită pe 24 ianuarie 2020; verificările necesită 20 de modificări .

SMPP ( Short Message Peer-to-Peer ) este o transmisie peer-to-peer a mesajelor scurte .  Este un protocol deschis în industria telecomunicațiilor, care este conceput special pentru a oferi o interfață flexibilă pentru mesageria SMS între platformele de aplicații SMS ( ESME ), routere (RE) și centrele de servicii pentru mesaje scurte ( SMS ). [unu]

SMPP este adesea folosit de terți, cum ar fi furnizorii de servicii cu valoare adăugată, instituțiile de știri, pentru a trimite mesaje SMS - adesea în vrac. Folosind acest protocol, puteți trimite SMS , EMS , notificări de mesagerie vocală, difuzare celulară , mesaje WAP , mesaje USSD etc. Datorită versatilității sale, care constă în suportul GSM , UMTS , IS-95 ( CDMA ), CDMA2000 , ANSI 136 ( TDMA ) și altele asemenea, SMPP este cel mai utilizat protocol de mesaje scurte în afara rețelelor SS7 ( SS7 ).

În noiembrie 1995, ETSI a inclus protocolul SMPP în TR 03.39. [2]

Procesul de lucru

SMPP utilizează un model de operare client-server. Centrul de mesaje ( SMSC ) acționează de obicei ca un server, așteptând o conexiune de la un client - ESME . Atunci când SMPP este utilizat pentru peeringul SMS, MC-ul expeditor acționează de obicei ca client.

Protocolul se bazează pe schimbul de perechi de PDU -uri cerere-răspuns (unități de date protocol sau pachete) la nivelul al 4-lea OSI ( sesiuni TCP sau X25 SVC3). [3] Portul bine-cunoscut alocat de IANA către SMPP atunci când lucrează pe TCP este 2775, dar sunt adesea folosite numere de porturi arbitrare.

Înainte de a schimba mesaje, comanda bind trebuie trimisă și confirmată. Comanda bind determină în ce direcție pot fi trimise mesajele; bind_transmitter permite clientului să trimită doar mesaje către server, bind_receiver înseamnă că clientul va primi doar mesaje, iar bind_transceiver (introdus în SMPP 3.4 [4] ) permite trimiterea mesajelor în ambele direcții. Când trimite o comandă de legătură, ESME trebuie să se identifice cu parametrii system_id, system_type și parola; address_range este destinat să indice o adresă ESME, dar de obicei este transmisă goală. De asemenea, în comanda de legare există interface_version, care indică versiunea protocolului care va fi folosită în timpul sesiunii.

Mesageria poate fi sincronă, unde fiecare nod așteaptă un răspuns pe PDU, sau asincronă, unde cererile multiple pot fi trimise fără a aștepta un răspuns; numărul de cereri neconfirmate se numește „fereastră”; pentru cea mai bună experiență, ambele părți ar trebui să aibă setări identice pentru dimensiunea ferestrei.

Format PDU

În SMPP, PDU-urile sunt codificate în binar pentru o eficiență maximă. Ele încep cu un antet PDU, care poate fi urmat de un corp PDU.

SMPP PDU
Antet PDU (obligatoriu) Corp PDU (opțional)
comanda

lungime

comanda

ID

comanda

stare

Secvenţă

ID

Corp PDU
4 octeți Lungime = (Valoarea lungimii comenzii - 4) octeți

Antet PDU

Fiecare PDU începe cu un antet. Antetul este format din 4 câmpuri, fiecare dintre ele având o lungime de 4 octeți.

lungime_comandă Lungimea totală a PDU-ului în octeți (inclusiv comanda câmpului de lungime în sine); valoarea minimă este 16, deoarece fiecare PDU trebuie să conțină un antet de 16 octeți comanda_id Specifică o operație (sau o comandă) SMPP starea_comandă Întotdeauna setat la 0 în interogări; răspunsul conține informații despre rezultatul operației număr de secvență Folosit pentru a corela solicitările și răspunsurile în cadrul unei sesiuni SMPP; oferă comunicare asincronă (folosind metoda „ferestrei glisante”)

Toate câmpurile numerice din SMPP sunt afișate în ordine de la mare la scăzut (în engleză  big endian ), adică primul octet este cel mai semnificativ octet (MSB).

Exemple

Acesta este un exemplu de PDU submit_sm de 60 de octeți . Datele sunt afișate în format hexazecimal. Antetul și corpul PDU sunt prezentate separat și împărțite în câmpuri PDU.

Se recomandă ca acest exemplu să fie comparat cu definiția specificației SMPP a PDU - ului submit_sm pentru a înțelege modul în care codificarea fiecărui câmp este conformă cu specificația.

Valorile pentru fiecare câmp PDU sunt afișate în formă zecimală în paranteze și în formă hexazecimală după ele. Dacă un câmp se întinde pe mai mult de un octet, atunci toți octeții hexazecimali corespunzători sunt reprezentați pe o singură linie.

Din nou, citiți definiția submit_sm din specificația SMPP pentru mai multă claritate.

Antet PDU

„lungimea_comandă”, (60) ... 00 00 00 3C „codul_comandă”, (4) ... 00 00 00 04 'status_comandă', (0) ... 00 00 00 00 „număr_secvență”, (5) ... 00 00 00 05

Conținut PDU

„tip_serviciu”, () ... 00 'source_addr_ton', (2) ... 02 'source_addr_npi ' , (8) ... 08 'source_adr', (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 „steagul_priority”, (0) ... 00 „programa_timp_de_livrare”, (0) ... 00 „perioada_validitate”, (0) ... 00 „livrare_înregistrată”, (0) ... 00 „Înlocuiește_dacă_steagul_prezent”, (0) ... 00 „codificarea_datelor”, (3) ... 03 „sm_default_msg_id”, (0) ... 00 'sm_length', (15) ... 0F „mesaj_scurt”, (Bună ziua Wikipedia) ... 48 65 6C 6C 6F 20 77 69 6B 69 70 65 64 69 61'

Rețineți că formatul textului din câmpul short_message trebuie să se potrivească cu valoarea câmpului data_coding . Când data_coding este setat la 8 ( UCS2 ), textul trebuie să fie în UCS-2BE (sau extensia sa, UTF-16BE ). Când data_coding indică o codificare de 7 biți, fiecare septet este stocat ca un octet separat în câmpul short_message (cu bitul cel mai semnificativ setat la 0). Valorile de codificare a datelor din SMPP versiunea 3.3 dublează exact valorile TP-DCS din standardul GSM 03.38, făcând această versiune potrivită numai pentru alfabetul GSM pe 7 biți, UCS2 și mesajele binare. SMPP 3.4 a introdus noi valori de codificare a datelor :

codificare_date Sens
0 Alfabet implicit SMSC (SMPP 3.4) / Specific MC (SMPP 5.0)
unu IA5 (CCITT T.50)/ ASCII (ANSI X3.4)
2 Octet nespecificat (binar de 8 biți)
3 Latin 1 ( ISO-8859-1 )
patru Octet nespecificat (binar de 8 biți)
5 JIS (X0208-1990)
6 chirilic ( ISO-8859-5 )
7 latină/ebraică ( ISO-8859-8 )
opt UCS2 (ISO/IEC-10646)
9 Codificarea pictogramelor
zece ISO-2022-JP (Coduri muzicale)
unsprezece Rezervat
12 Rezervat
13 Kanji JIS extins (X0212-1990)
paisprezece KS C 5601
15-191 Rezervat
192-207 Control GSM MWI - vezi GSM 03.38
208-223 Control GSM MWI - vezi GSM 03.38
224-239 Rezervat
240-255 Controlul clasei de mesaje GSM - vezi GSM 03.38

Valorile 4 și 8 pentru data_coding sunt aceleași pentru toate versiunile de SMPP. Alte valori din intervalul 1-15 sunt rezervate în SMPP 3.3. Din păcate, spre deosebire de SMPP 3.3, unde data_coding = 0 a identificat în mod unic alfabetul GSM pe 7 biți, pentru SMPP 3.4 și o versiune ulterioară, alfabetul GSM pe 7 biți nu este în această listă, iar data_coding = 0 poate diferi pentru diferite SMSC - acesta poate fi ISO -8859-1 , ASCII , alfabet GSM pe 7 biți, UTF-8 sau orice altă codificare implicită. Când se utilizează data_coding = 0, ambele părți (ESME și SMSC) trebuie să se asigure că consideră că acesta este un pointer către aceeași codificare. În caz contrar, este mai bine să nu folosiți data_coding = 0. Acest lucru poate face dificilă utilizarea alfabetului GSM pe 7 biți, deoarece unele SMSC necesită data_coding = 0, altele, cum ar fi data_coding = 241.

Implementări

SMPP a fost implementat în Java de către proiectul jSMPP . Este folosit în Apache Camel și în diverse alte proiecte populare de software gratuit de mesagerie SMS. Implementare alternativă a Java nmote-smpp . Proiectul python-SMPP oferă SMPP pentru utilizatorii Python . Proiectul PHP-SMPP oferă SMPP pentru utilizatorii PHP .

Caracteristici

În ciuda utilizării pe scară largă, SMPP are o serie de caracteristici problematice:

Lipsește valoarea data_coding pentru alfabetul GSM pe 7 biți

În SMPP 3.3, toate valorile de codificare de date sunt tratate conform GSM 03.38, dar din SMPP 3.4 nu există nicio valoare de codificare de date pentru alfabetul GSM pe 7 biți.

Lipsa standardizării pentru data_coding=0

Conform SMPP 3.4 și 5.0 data_coding =0 înseamnă ″SMSC Default Alphabet″. Ce codificare este de fapt depinde de tipul SMSC și de configurația acestuia.

Suport pentru codificare Fuzzy Shift-JIS

Una dintre codificările din standardul CDMA C.R1001 este Shift-JIS , folosită pentru japoneză . SMPP 3.4 și 5.0 definesc trei codificări pentru japoneză (JIS, ISO-2022-JP și JIS Extended Kanji ), dar niciuna dintre ele nu este identică cu CDMA MSG_ENCODING 00101. Codificarea pictogramelor ar trebui să fie utilizată pentru a trimite mesaje Shift-JIS în SMPP ( codarea_datelor =9).

submit_sm_resp incompatibilitate între versiunile SMPP

Caracteristici ale ID-ului mesajului la primirea unui raport de livrare în SMPP 3.3

Singura modalitate de a confirma livrarea unui mesaj în SMPP 3.3 este prin câmpul text short_message din PDU deliver_sm . Cu toate acestea, formatul acestui text este descris în apendicele „B” la specificația SMPP 3.4, deși SMPP 3.4 poate (și ar trebui) să folosească câmpurile TLV receipted_message_id și message_state în acest scop . SMPP 3.3 specifică faptul că identificatorul mesajului este un șir C de până la 8 caractere hexazecimale (plus un „\0” final). Cu toate acestea, SMPP 3.4 specifică că un anumit identificator în format C-string poate conține până la 10 caractere zecimale. Aceasta separă implementările SMPP în 2 grupuri:

Cu toate acestea, specificația SMPP 3.4 afirmă că formatul PDU-ului de confirmare a livrării depinde de furnizorul SMSC. Prin urmare, formatul descris în specificație este doar una dintre opțiunile posibile. După cum sa menționat mai sus, atunci când utilizați SMPP 3.4, TLV-urile receipted_message_id și message_state TREBUIE să fie utilizate pentru a confirma livrarea unui mesaj .

Note

  1. „Short Message Peer-to-Peer Protocol Specification v5.0” Arhivat 11 aprilie 2021 la Wayback Machine , SMS Forum, 19 februarie 2003
  2. Friedhelm Hillebrand. Serviciul de mesaje scurte (SMS): Crearea de  mesaje text personale globale . - Wiley , 2010. - P. 112. - 194 p. — ISBN 978-0-470-68865-6 .
  3. Croft, N. On forensics: A silent SMS attack  // IEEE  : Journal  . - 2012. - ISSN 2330-9881 . - doi : 10.1109/ISSA.2012.6320454 .
  4. „Short Message Peer to Peer Protocol Specification v3.4” Arhivat 11 aprilie 2021 la Wayback Machine , Forumul dezvoltatorilor SMPP, 12 octombrie 1999

Alte protocoale SMS