SMPP

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 24. ledna 2020; kontroly vyžadují 20 úprav .

SMPP ( Short Message Peer-to-Peer ) je peer-to-peer přenos krátkých zpráv .  Jedná se o otevřený protokol v telekomunikačním průmyslu, který je speciálně navržen tak, aby poskytoval flexibilní rozhraní pro zasílání zpráv SMS mezi aplikačními platformami SMS ( ESME ), směrovači (RE) a centry krátkých zpráv ( SMSC ). [jeden]

SMPP je často používán třetími stranami, jako jsou poskytovatelé služeb s přidanou hodnotou, zpravodajská média, k odesílání SMS zpráv – často hromadně. Pomocí tohoto protokolu můžete posílat SMS , EMS , upozornění na hlasovou poštu, mobilní vysílání , WAP zprávy, USSD zprávy atd. Vzhledem k jeho univerzálnosti, která spočívá v podpoře GSM , UMTS , IS-95 ( CDMA ), CDMA2000 , ANSI 136 ( TDMA ) a podobně, SMPP je nejrozšířenějším protokolem krátkých zpráv mimo sítě SS7 ( SS7 ).

V listopadu 1995 zahrnulo ETSI protokol SMPP do TR 03.39. [2]

Pracovní postup

SMPP používá model provozu klient-server. Centrum zpráv ( SMSC ) obvykle funguje jako server a čeká na připojení od klienta - ESME . Když se SMPP používá pro peering SMS, odesílající MC se obvykle chová jako klient.

Protokol je založen na výměně párů PDU typu požadavek-odpověď (protokolové datové jednotky nebo pakety) na 4. vrstvě OSI ( TCP sessions nebo X25 SVC3). [3] Známý port přidělený IANA SMPP při práci na TCP je 2775, ale často se používají libovolná čísla portů.

Před výměnou zpráv je nutné odeslat a potvrdit příkaz bind. Příkaz bind určuje, kterým směrem lze zprávy odesílat; bind_transmitter umožňuje klientovi pouze odesílat zprávy na server, bind_receiver znamená, že klient bude pouze přijímat zprávy, a bind_transceiver (zavedený v SMPP 3.4 [4] ) umožňuje odesílání zpráv oběma směry. Při odesílání příkazu bind se ESME musí identifikovat pomocí parametrů system_id, system_type a password; rozsah_adres je určen k označení adresy ESME, ale obvykle se předává prázdný. V příkazu pro vazbu je také uvedena verze_rozhraní, která označuje verzi protokolu, která bude použita během relace.

Zasílání zpráv může být synchronní, kde každý uzel čeká na odpověď na PDU, nebo asynchronní, kdy lze odeslat více požadavků bez čekání na odpověď; počet nepotvrzených požadavků se nazývá „okno“; pro nejlepší zážitek by měly mít obě strany stejné nastavení velikosti okna.

Formát PDU

V SMPP jsou PDU kódovány binárně pro maximální účinnost. Začínají hlavičkou PDU, po které může následovat tělo PDU.

SMPP PDU
Záhlaví PDU (povinné) Tělo PDU (volitelné)
příkaz

délka

příkaz

ID

příkaz

Postavení

Sekvence

ID

Tělo PDU
4 oktety Délka = (hodnota Délka příkazu - 4) oktety

Záhlaví PDU

Každý PDU začíná záhlavím. Hlavička se skládá ze 4 polí, z nichž každé je dlouhé 4 oktety.

délka_příkazu Celková délka PDU v oktetech (včetně samotného příkazu pole délky); minimální hodnota je 16, protože každý PDU musí obsahovat 16oktetovou hlavičku id_příkazu Určuje operaci SMPP (nebo příkaz) stav_příkazu Vždy nastaveno na 0 v dotazech; odpověď obsahuje informaci o výsledku operace pořadové_číslo Používá se ke korelaci požadavků a odpovědí v rámci relace SMPP; poskytuje asynchronní komunikaci (pomocí metody "posuvného okna")

Všechna číselná pole v SMPP jsou zobrazena v pořadí od vysoké po nízkou ( anglicky  big endian ), to znamená, že první oktet je nejvýznamnější byte (MSB).

Příklady

Toto je příklad 60 oktetového submit_sm PDU . Data jsou zobrazena v hexadecimálním formátu. Hlavička a tělo PDU jsou uvedeny samostatně a rozděleny do polí PDU.

Doporučuje se, aby byl tento příklad porovnán s definicí SMPP specifikace submit_sm PDU , abyste pochopili, jak kódování každého pole odpovídá specifikaci.

Hodnoty pro každé pole PDU jsou uvedeny v desítkovém tvaru v závorkách a za nimi v hexadecimálním tvaru. Pokud pole zahrnuje více než jeden oktet, pak jsou všechny odpovídající hexadecimální oktety reprezentovány na jednom řádku.

Pro větší přehlednost si znovu přečtěte definici submit_sm ve specifikaci SMPP.

Záhlaví PDU

'délka_příkazu', (60) ... 00 00 00 3C 'id_příkazu', (4) ... 00 00 00 04 'command_status', (0) ... 00 00 00 00 'číslo_sekvence', (5) ... 00 00 00 05

Obsah PDU

'typ_služby', () ... 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 'období_platnosti', (0) ... 00 'registered_delivery', (0) ... 00 'replace_if_present_flag', (0) ... 00 'kódování_dat', (3) ... 03 'sm_default_msg_id', (0) ... 00 'sm_length', (15) ... 0F 'short_message', (Ahoj Wikipedie) ... 48 65 6C 6C 6F 20 77 69 6B 69 70 65 64 69 61'

Všimněte si, že formát textu v poli short_message musí odpovídat hodnotě pole data_coding . Když je data_coding nastaveno na 8 ( UCS2 ), text musí být v UCS-2BE (nebo jeho rozšíření, UTF-16BE ). Když data_coding indikuje 7-bitové kódování, je každý septet uložen jako samostatný oktet v poli short_message (s nejvýznamnějším bitem nastaveným na 0). Hodnoty data_coding v SMPP verze 3.3 přesně duplikují hodnoty TP-DCS ze standardu GSM 03.38, takže tato verze je vhodná pouze pro GSM 7bitovou abecedu, UCS2 a binární zprávy. SMPP 3.4 zavedl nové hodnoty data_coding :

kódování dat Význam
0 Výchozí abeceda SMSC (SMPP 3.4) / Specifická pro MC (SMPP 5.0)
jeden IA5 (CCITT T.50)/ ASCII (ANSI X3.4)
2 Nespecifikovaný oktet (8bitový binární kód)
3 Latina 1 ( ISO-8859-1 )
čtyři Nespecifikovaný oktet (8bitový binární kód)
5 JIS (X0208-1990)
6 Cyrilice ( ISO-8859-5 )
7 latina/hebrejština ( ISO-8859-8 )
osm UCS2 (ISO/IEC-10646)
9 Kódování piktogramů
deset ISO-2022-JP (hudební kódy)
jedenáct Rezervováno
12 Rezervováno
13 Rozšířené Kanji JIS (X0212-1990)
čtrnáct KS C 5601
15-191 Rezervováno
192-207 GSM MWI ovládání - viz GSM 03.38
208-223 GSM MWI ovládání - viz GSM 03.38
224-239 Rezervováno
240-255 Ovládání třídy zpráv GSM - viz GSM 03.38

Hodnoty 4 a 8 pro data_coding jsou stejné pro všechny verze SMPP. Ostatní hodnoty v rozsahu 1-15 jsou vyhrazeny v SMPP 3.3. Bohužel na rozdíl od SMPP 3.3, kde data_coding = 0 jednoznačně identifikuje GSM 7bitovou abecedu, pro SMPP 3.4 a vyšší, GSM 7bitová abeceda není v tomto seznamu a data_coding = 0 se může lišit pro různé SMSC - může to být ISO -8859-1 , ASCII , GSM 7bitová abeceda, UTF-8 nebo jakékoli jiné výchozí kódování. Při použití data_coding = 0 si obě strany (ESME a SMSC) musí být jisti, že to považují za ukazatel na stejné kódování. V opačném případě je lepší nepoužívat data_coding = 0. To může ztížit použití GSM 7bitové abecedy, protože některá SMSC vyžadují data_coding = 0, jiná, například data_coding = 241.

Implementace

SMPP byl v Javě implementován projektem jSMPP . Používá se v Apache Camel a různých dalších populárních bezplatných softwarových projektech pro zasílání SMS zpráv. Alternativní implementace Java nmote-smpp . Projekt python-SMPP poskytuje uživatelům Pythonu SMPP . Projekt PHP-SMPP poskytuje uživatelům PHP SMPP .

Funkce

Navzdory širokému použití má SMPP řadu problematických funkcí:

Chybí hodnota data_coding pro GSM 7bitovou abecedu

V SMPP 3.3 jsou všechny hodnoty data_coding zpracovávány podle GSM 03.38, ale od SMPP 3.4 neexistuje žádná hodnota data_coding pro 7bitovou GSM abecedu.

Nedostatek standardizace pro data_coding=0

Podle SMPP 3.4 a 5.0 data_coding =0 znamená ″Výchozí abeceda SMSC″. O jaké kódování se vlastně jedná, závisí na typu SMSC a jeho konfiguraci.

Podpora kódování Fuzzy Shift-JIS

Jedno z kódování ve standardu CDMA C.R1001 je Shift-JIS , používané pro japonštinu . SMPP 3.4 a 5.0 definují tři kódování pro japonštinu (JIS, ISO-2022-JP a JIS Extended Kanji ), ale žádné z nich není identické s CDMA MSG_ENCODING 00101. Piktogramové kódování má být použito k odesílání zpráv Shift-JIS v SMPP ( kódování dat =9).

submit_sm_resp nekompatibilita mezi verzemi SMPP

Vlastnosti ID zprávy při příjmu zprávy o doručení v SMPP 3.3

Jediný způsob, jak potvrdit doručení zprávy v SMPP 3.3, je prostřednictvím textového pole short_message v doručovacím PDU_sm . Formát tohoto textu je však popsán v Dodatku "B" specifikace SMPP 3.4, ačkoli SMPP 3.4 může (a měl by) pro tento účel používat pole TLV recipiented_message_id a message_state . SMPP 3.3 určuje, že identifikátor zprávy je C-řetězec o délce až 8 hexadecimálních znaků (plus koncové '\0'). SMPP 3.4 však uvádí, že daný identifikátor ve formátu řetězce C může obsahovat až 10 desetinných znaků. To rozděluje implementace SMPP do 2 skupin:

Specifikace SMPP 3.4 však uvádí, že formát PDU potvrzení doručení závisí na poskytovateli SMSC. Formát popsaný ve specifikaci je tedy pouze jednou z možných možností. Jak bylo uvedeno výše, při použití SMPP 3.4 BY MĚLY být pro potvrzení doručení zprávy použity TLV přijaté_zprávy_id a stavy zprávy .

Poznámky

  1. „Short Message Peer-to-Peer Protocol Specification v5.0“ Archivováno 11. dubna 2021 na Wayback Machine , SMS Forum, 19. února 2003
  2. Friedhelm Hillebrand. Služba krátkých textových zpráv (SMS): Vytvoření osobních globálních textových  zpráv . - Wiley , 2010. - S. 112. - 194 s. — 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“ Archivováno 11. dubna 2021 na Wayback Machine , SMPP Developers Forum, 12. října 1999

Jiné protokoly SMS