Ciao! Sebbene i messaggeri e i social media stiano progressivamente sostituendo i metodi di comunicazione tradizionali, non diminuiscono la popolarità degli SMS. La verifica su un sito web popolare o le notifiche di transazione continuano a esistere e continueranno a farlo. Ti sei mai chiesto come funzioni tutto questo? Spesso, per l'invio di messaggi di massa, viene utilizzato il protocollo SMPP, di cui parleremo di seguito.
Su Habr ci sono già stati articoli su SMPP, ,, ma il loro obiettivo non era descrivere il protocollo stesso. Certamente puoi iniziare direttamente dalla fonte — , ma penso che sarebbe utile avere anche un breve riassunto. Spiegherò tramite l'esempio v3.4. Sono aperto alle tue critiche oggettive.
Il protocollo SMPP è un protocollo per messaggi peer-to-peer. Ciò significa che ogni server peer/hub è uguale. Nel caso più semplice, lo schema di scambio di messaggi SMS appare così:

Tuttavia, se l'operatore nazionale non ha un percorso per una qualche regione remota, richiede assistenza a un intermediario — un hub SMS. A volte, per inviare un singolo SMS, è necessario costruire una catena tra più paesi o addirittura continenti.
Informazioni sul protocollo
SMPP è un protocollo di livello applicativo che si basa sullo scambio di PDU ed è trasmesso su TCP/IP o sessioni X25 per la trasmissione di messaggi SMS e USSD. Di solito, SMPP viene utilizzato in modalità di connessione persistente, il che aiuta a risparmiare tempo. SMPP utilizza un modello di comunicazione client-server.
Modalità di comunicazione

Lo scambio di messaggi tra il mittente e il centro SMS tramite SMPP può avvenire nelle seguenti modalità:
Transmitter (trasmettitore) – invio di messaggi unidirezionale, in sequenza.
Receiver (ricevitore) – solo ricezione di messaggi dal centro SMS.
Transreceiver (ricevitore-trasmettitore) – scambio di messaggi tra il centro SMS e l'utente.
Struttura

Lunghezza del messaggio
Un messaggio SMS può contenere 70 caratteri in cirillico e non più di 157 caratteri latini + 3 UDH. Se si invia un SMS con un numero maggiore di caratteri, verrà suddiviso in più segmenti e riunito dal dispositivo ricevente. In caso di segmentazione, il numero di caratteri diminuisce a causa degli header del messaggio che indicano la parte del messaggio. Pertanto, quando si invia un messaggio SMS di grandi dimensioni, esso contiene al massimo 153 caratteri latini o 67 caratteri non standard.
Data Coding Scheme
Tuttavia, per inviare un messaggio, i caratteri devono essere codificati. Nel protocollo SMPP, la codifica è gestita da un campo speciale: il Data Coding Scheme, o DCS. Questo campo indica come devono essere interpretati i messaggi. Inoltre, il campo DCS include:
- un insieme di caratteri che definisce la codifica;
- la classe del messaggio;
- una richiesta per la cancellazione automatica dopo la lettura;
- un'indicazione sulla compressione del messaggio;
- la lingua del messaggio broadcast;
L'alfabeto standard a 7 bit (GSM 03.38). È stato sviluppato per il sistema di messaggistica GSM. Questa codifica è adatta per l'inglese e per alcune lingue latine. Ogni carattere è composto da 7 bit e viene codificato in un ottetto.
UTF-16 (in GSM UCS2) Per includere i caratteri mancanti nell'alfabeto a 7 bit, è stata sviluppata la codifica UTF-16 che aggiunge ulteriori caratteri (inclusi quelli cirillici) riducendo la dimensione del messaggio da 160 a 70. Questo tipo di codifica replica quasi completamente Unicode.
Dati a 8 bit definiti dall'utente. Questi includono KOI8-R e Windows-1251. Anche se questa soluzione sembra essere più economica rispetto a UTF-16, sorge una ragionevole domanda di compatibilità su diversi dispositivi. In questo caso, entrambi i dispositivi devono essere configurati in anticipo.
Tipo di messaggio
- Class0, o flash, messaggio memorizzato nella memoria del telefono a discrezione dell'utente;
- Class1, o quelli memorizzati nella memoria del telefono;
- Class1, o quelli memorizzati nella memoria del telefono;
- Class2, deve garantire che il messaggio venga salvato nella memoria del terminale mobile, altrimenti deve inviare avvisi al centro SMS riguardo all'impossibilità di salvare;
- Class3 — in questo caso il telefono deve inviare una notifica che indica che il messaggio può essere salvato, indipendentemente dalla quantità di memoria nel dispositivo. Questo tipo di messaggio implica che il messaggio è stato ricevuto dal destinatario;
Tipo di messaggio
Silent message (SMS0) Tipo di messaggio SMS senza contenuto. Questo SMS arriva senza notifica e non viene visualizzato sullo schermo del dispositivo.
PDU
Ogni operazione PDU è accoppiata e consiste in una richiesta e una risposta. Ad esempio: il comando che comunica l’instaurazione di una connessione (bind_transmitter / bind_transmitter_resp), o quello che indica che il messaggio è stato inviato (deliver_sm / deliver_sm_resp)

Ogni pacchetto PDU è composto da due parti: intestazione (header) e corpo (body). La struttura dell'intestazione è la stessa per qualsiasi pacchetto PDU: la lunghezza del comando indica la lunghezza del pacchetto, l'ID è il nome del pacchetto, mentre il comando di stato indica se il messaggio è stato trasmesso con successo o se ci sono stati errori.
Parametri aggiuntivi TLV
TLV (Tag Length Value), o campi aggiuntivi. Questi parametri sono utilizzati per espandere le funzionalità del protocollo e non sono obbligatori. Questo campo è indicato alla fine del campo PDU. Ad esempio, utilizzando TLV dest_addr_np_information è possibile organizzare la trasmissione di informazioni sulla portabilità del numero.
Ton e Npi
TON (Type of Number) è un parametro che informa l'SMSC sul formato di indirizzamento e sul tipo di rete.
NPI (Numbering Plan Identification) è un parametro che indica il piano di numerazione.

L'indirizzo del mittente del messaggio, o nome alfa
I messaggi inviati al telefono possono essere di due tipi: numerici e alfanumerici. I numerici possono essere lunghi (simili a un numero di telefono) e brevi. A volte gli operatori hanno limitazioni sull'invio da nomi neutrali, come Infosms, Alert, ecc. Inoltre, a volte gli operatori non consentono il traffico se il nome non è registrato nella loro rete. Tuttavia, questo è più un aspetto specifico dell'operatore.
Fasi dell'invio
![]()
SMS-SUBMIT — è l'invio di un messaggio MO FSM (messaggio breve da terminale mobile)
SMS-SUBMIT REPORT — conferma che il messaggio è stato inviato all'SMSC
SRI SM (SendRoutingInfo) — l'SMSC riceve informazioni dall'HLR riguardo al MSC / VLR della posizione dell'abbonato
SRI SM RESP — risposta dall'HLR riguardante la posizione dell'abbonato
MT-FSM — dopo aver ricevuto la posizione, il messaggio viene inviato utilizzando l'operazione "Forward Short Message"
MT-FSM ACK — risposta dall'SMSC che indica che il messaggio è stato inviato
SMS-STATUS REPORT — l'SMSC invia lo stato della consegna del messaggio.
Lo stato di consegna del messaggio
SMS-STATUS REPORT può assumere diversi valori:
DELIVRD messaggio consegnato con successo
REJECTD — messaggio rifiutato dal centro SMS
EXPIRED — il messaggio è stato rimosso dalla coda di invio dopo la scadenza TTL (tempo di vita del messaggio)
UNDELIV — altri casi di mancata consegna
UNKNOWN- non è stata ricevuta una risposta sull'invio.
Errori di trasmissione
A volte ci sono motivi per cui i messaggi SMS non vengono consegnati al destinatario. Queste ragioni portano all'insorgere di errori. Gli errori vengono restituiti nei PDUs_sms_resp. Tutti gli errori possono essere divisi in temporanei (Temporary) e permanenti (Permanent).
Ad esempio, tra i temporanei rientrano 'absent_subscriber' (destinatario non disponibile o non in rete), mentre tra i permanenti troviamo 'destinatario inesistente'. A seconda degli errori che si presentano, si forma una politica di reinvio di questi messaggi.
Ad esempio, se il destinatario è occupato con una conversazione e riceve l'errore 'MT handset is busy', il messaggio può essere inviato nuovamente dopo alcuni minuti; tuttavia, se il destinatario ha bloccato il servizio di ricezione dei messaggi, il rinvio non avrà senso. Puoi trovare l'elenco degli errori sulle pagine SMSC, ad esempio, come .
Fonte: habr.com
