Hallo! Hoewel messengers en sociale netwerken traditionele communicatiemethoden steeds meer verdringen, doet dat niets af aan de populariteit van sms. Verificatie op populaire websites of notificaties over transacties blijven bestaan en zullen blijven bestaan. Heb je je ooit afgevraagd hoe dit allemaal werkt? Vaak wordt het SMPP-protocol gebruikt voor het versturen van massale berichten, waarover we hieronder zullen spreken.
Op Habr waren er al artikelen over smpp, ,, maar hun doel was niet het beschrijven van het protocol zelf. Natuurlijk kun je meteen beginnen met de originele bron — , maar ik denk dat het goed zou zijn om een beknopte samenvatting te hebben. Ik zal uitleggen aan de hand van voorbeeld v3.4. Ik ben blij met je objectieve kritiek.
Het SMPP-protocol is een protocol voor peer-to-peer berichten. Dit betekent dat elke peer/hub-server gelijkwaardig is. In de eenvoudigste vorm ziet het schema voor het uitwisselen van sms-berichten er als volgt uit:

Als de nationale operator geen route heeft naar een afgelegen regio, vraagt hij een tussenpersoon — een sms-hub. Soms is het nodig om een keten tussen verschillende landen of zelfs continenten op te bouwen om één sms te verzenden.
Over het protocol
SMPP is een applicatielaagprotocol dat gebaseerd is op het uitwisselen van PDU's en wordt verzonden over TCP/IP of X.25-sessies voor het verzenden van sms- en ussd-berichten. Gewoonlijk wordt SMPP gebruikt in een constante verbinding, wat tijd bespaart. SMPP gebruikt een client-server communicatiemodel.
Communicatiemodus

De uitwisseling van berichten tussen de afzender en het SMS-centrum via SMPP kan plaatsvinden in de volgende modi:
Transmitter (zendapparaat) — het berichtenverkeer in één richting, stap voor stap.
Receiver (ontvanger) — alleen het ontvangen van berichten van het SMS-centrum.
Transreceiver (zender-ontvanger) — Uitwisseling van berichten tussen het SMS-centrum en de gebruiker.
Structuur

Lengte van het bericht
Een enkele sms kan 70 tekens bevatten bij invoer in het Cyrillisch of maximaal 157 Latijnse tekens + 3 UDH. Als je een sms met een groot aantal tekens verzendt, wordt deze verdeeld in meerdere segmenten en samengevoegd in het ontvangende apparaat. Bij segmentatie vermindert het aantal tekens vanwege de kopteksten van het bericht waarin het deel van de boodschap wordt aangegeven. Daarom bevat een grote sms maximaal 153 Latijnse tekens of 67 niet-typische tekens.
Data Coding Scheme
Echter, voor het verzenden van een bericht vereist het coderen van karakters. In het SMPP-protocol is er een speciaal veld verantwoordelijk voor de codering — Data Coding Scheme, of DCS. Dit veld geeft aan hoe berichten herkend moeten worden. Daarnaast omvat het DCS-veld:
- een karakterset die de codering bepaalt;
- de boodschapklasse;
- een verzoek voor automatische verwijdering na lezen;
- een indicatie van compressie van het bericht;
- de taal van het broadcastbericht;
De Standaard 7-bits alfabet (GSM 03.38). Dit is ontwikkeld voor het berichten systeem in GSM. Deze codering is geschikt voor het Engels en een aantal Latijnse talen. Elk teken bestaat uit 7 bits en wordt gecodeerd in een octet.
UTF-16 (in GSM UCS2) Om de ontbrekende symbolen in het 7-bits alfabet op te nemen, werd de UTF-16 codering ontwikkeld, die extra symbolen (inclusief Cyrillische) toevoegt door de berichtgrootte te verminderen van 160 naar 70. Dit type codering komt bijna volledig overeen met Unicode.
8-bits data gedefinieerd door de gebruiker. Dit omvat KOI8-R en Windows-1251. Hoewel deze oplossing economischer lijkt in vergelijking met UTF-16, rijst de redelijke vraag naar compatibiliteit op verschillende apparaten. Aangezien in dit geval beide apparaten van tevoren geconfigureerd moeten zijn.
Boodschapklasse
- Class0, of flash, berichten, opgeslagen in het geheugen van de telefoon op verzoek van de gebruiker;
- Class1, of die welke opgeslagen zijn in het geheugen van de telefoon;
- Class1, of die welke opgeslagen zijn in het geheugen van de telefoon;
- Class2, moet garanderen dat het bericht wordt opgeslagen in het geheugen van de mobiele terminal; anders moet het een sms-centrumsnotificatie geven dat opslaan niet mogelijk is;
- Class3 — in dit geval moet de telefoon een bericht sturen dat het bericht kan worden opgeslagen, ongeacht de beschikbare geheugenruimte in het apparaat. Dit type bericht impliceert dat het bericht de ontvanger heeft bereikt;
Type bericht
Stille boodschap (SMS0) Type sms-bericht zonder inhoud. Dit sms-bericht komt binnen zonder melding en wordt niet op het scherm van het apparaat weergegeven.
PDU
Elke PDU-operatie is gepaard en bestaat uit een verzoek en een antwoord. Bijvoorbeeld: een commando dat aangeeft dat er een verbinding tot stand wordt gebracht (bind_transmitter / bind_transmitter_resp), of dat het bericht is verzonden (deliver_sm / deliver_sm_resp)

Elk PDU-pakket bestaat uit twee delen: een header en een body. De structuur van de header is identiek voor elk PDU-pakket: de command length is de lengte van het pakket, id is de naam van het pakket, en de status-commando geeft aan of het bericht succesvol is verzonden of met een fout.
Aanvullende TLV-parameters
TLV (Tag Length Value), of aanvullende velden. Deze parameters worden gebruikt om de functionaliteit van het protocol uit te breiden en zijn niet verplicht. Dit veld wordt aan het einde van het PDU-veld vermeld. Bijvoorbeeld, met behulp van TLV dest_addr_np_information kan informatie over nummerportabiliteit worden verzorgd.
Ton en Npi
TON (Type of Number) parameter informeert de SMSC over het adresseringsformaat en het type netwerk.
NPI (Numbering Plan Identification) parameter die het nummerplan aangeeft.

Afzender van het bericht, of alpha naam
Berichten die naar een telefoon worden verzonden, zijn van twee soorten: digitale en tekstuele. Digitale kunnen lang zijn (vergelijkbaar met een telefoonnummer) en kort. Soms hebben operators beperkingen op het verzenden van neutrale namen, zoals Infosms, Alert, enz. Soms blokkeert de operator ook verkeer als de naam niet in hun netwerk is geregistreerd. Dit zijn echter meestal kenmerken van de operator.
Fasen van verzending
![]()
SMS-SUBMIT — dit is de verzending van een MO FSM bericht (kort bericht van een mobiel terminal)
SMS-SUBMIT REPORT — bevestiging dat het bericht aan de SMSC is verzonden
SRI SM (SendRoutingInfo) — SMSC ontvangt informatie van HLR met betrekking tot de locatie van de MSC / VLR van de abonnee
SRI SM RESP — antwoord van HLR over de locatie van de abonnee
MT-FSM — na ontvangst van de locatie wordt het bericht verzonden met de operatie 'Forward Short Message'
MT-FSM ACK — antwoord van SMSC dat het bericht is verzonden
SMS-STATUS REPORT — SMSC verzendt de status van het bezorgingsbericht.
Status van de bezorging van het bericht
SMS-STATUS REPORT kan verschillende waarden aannemen:
DELIVRD het bericht is succesvol afgeleverd
REJECTD — het bericht is afgewezen door het SMS-center
EXPIRED — het bericht is uit de verzendwachtrij verwijderd na afloop van TTL (time-to-live van het bericht)
UNDELIV — andere gevallen van niet-bezorging
UNKNOWN- geen antwoord ontvangen op de verzending.
Zendingfouten
Soms zijn er redenen waarom sms-berichten niet bij de abonnee worden afgeleverd. De gevolgen van deze redenen zijn het optreden van fouten. Fouten worden teruggestuurd in PDUs_sms_resp. Alle fouten kunnen worden onderverdeeld in tijdelijke (Temporary) en blijvende (Permanent) fouten.
Als voorbeeld kunnen we tijdelijke fouten beschouwen zoals absent_subscriber, waarbij de abonnee niet bereikbaar of offline is, en permanente fouten zoals de abonnee bestaat niet. Afhankelijk van de fouten die optreden, wordt het beleid voor het opnieuw verzenden van deze berichten gevormd.
Als de abonnee bijvoorbeeld in gesprek is en de foutmelding MT handset is busy ontvangt, kan het bericht na enkele minuten opnieuw worden verzonden. Echter, als de abonnee de dienst voor het ontvangen van berichten heeft geblokkeerd, heeft een herhaaldelijke verzending geen zin. Een lijst van foutmeldingen vindt u op de pagina's van de SMSC, bijvoorbeeld, zoals .
Bron: habr.com
