BroadNet
Codifica SMSSegmentazione

Segmentazione SMS, concatenazione e l'UDH

Aggiornato il 3 min di letturaBasato su standard
Risposta diretta

I payload SMS che superano un messaggio vengono suddivisi in segmenti e ricuciti sul terminale tramite un User Data Header (UDH). L'UDH di concatenazione standard di 6 byte trasporta un numero di riferimento, il conteggio totale dei segmenti e la sequenza di questo segmento. Consuma payload, riducendo la capacità a 153 caratteri GSM-7 o 67 UCS-2 per segmento.

§01

Perché esiste la concatenazione

Un singolo SMS è limitato a 140 ottetti di dati utente. Un testo più lungo viene inviato come più SMS che il terminale ricevente riassembla in un unico messaggio. Ciò avviene con un User Data Header (UDH) posto all'inizio dei dati utente di ciascun segmento, insieme a un flag (il bit UDHI) che comunica al terminale la presenza di un header. La rete trasporta ogni segmento come un SMS indipendente; solo il terminale li ricombina.

§02

L'UDH di concatenazione di 6 byte

L'header di concatenazione più comune è di 6 ottetti: una lunghezza dell'header, un identificatore di elemento informativo per la concatenazione a 8 bit, la sua lunghezza, poi i tre valori che guidano il riassemblaggio — un numero di riferimento condiviso da tutti i segmenti di un messaggio, il numero totale di segmenti e la posizione di questo segmento. Esiste una variante con riferimento a 16 bit (IEI 0x08) che è di 7 ottetti.

UDH di concatenazione di 6 byte (riferimento a 8 bit)
OctetCampoValore / significato
1UDHL0x05 — lunghezza dell'intestazione che segue
2IEI0x00 — messaggio breve concatenato, riferimento a 8 bit
3IEDL0x03 — lunghezza di questo elemento informativo
4RiferimentoCondiviso in tutti i segmenti del messaggio
5Segmenti totaliQuante parti in totale
6Numero di sequenzaPosizione di questo segmento (1..totale)
§03

Capacità per segmento

L'UDH risiede all'interno del payload di 140 ottetti, quindi riduce il testo che ogni segmento può trasportare. Per GSM-7, l'UDH di 6 ottetti deve essere allineato ai settetti, costando di fatto 7 settetti e lasciando 153 caratteri per segmento. Per UCS-2, i 6 ottetti lasciano 134 ottetti — 67 caratteri. Per i dati a 8 bit restano 134 byte. Ecco perché un messaggio GSM-7 di 161 caratteri diventa due segmenti da un massimo di 153, non 160 + 1.

Capacità dei segmenti concatenati
CodificaSingolo SMSPer segmento (con UDH)
GSM-7160153
UCS-27067
8-bit140 byte134 byte
§04

Sequenziamento e riassemblaggio

I segmenti di un messaggio logico condividono un numero di riferimento; il terminale raggruppa per riferimento e ordina per numero di sequenza per ricostruire il testo. I segmenti possono arrivare fuori ordine o in ritardo, quindi una parte mancante lascia il messaggio incompleto finché non compare (o scade). In SMPP potete concatenare o con i byte UDH in short_message (impostando il bit UDHI di esm_class) o con i TLV sar_* — scegliete un metodo per rotta e mantenetelo coerente.

FAQ

Domande frequenti

Quanti caratteri per segmento in un SMS concatenato?

153 per GSM-7 e 67 per UCS-2, perché l'User Data Header di 6 byte consuma parte del payload di 140 ottetti. I segmenti di dati a 8 bit semplici trasportano 134 byte ciascuno.

Che cos'è l'UDH negli SMS?

L'User Data Header è una piccola struttura all'inizio dei dati utente di un segmento che trasporta informazioni di controllo — per la concatenazione, un numero di riferimento, il conteggio totale dei segmenti e la sequenza di questo segmento. Il bit UDHI ne segnala la presenza.

Perché un messaggio di 161 caratteri costa due segmenti da 153?

Perché una volta che un messaggio richiede la concatenazione, ogni segmento trasporta un UDH che riduce la capacità a 153 caratteri GSM-7. Così 161 caratteri si dividono in due segmenti (fino a 306 caratteri totali), ciascuno addebitato come un SMS separato.

Qual è la differenza tra concatenazione UDH e SAR?

Entrambe suddividono i messaggi lunghi allo stesso modo. UDH incorpora i byte dell'header nel body del messaggio e imposta il bit UDHI di esm_class; SAR trasporta invece il riferimento, il totale e la sequenza nei TLV sar_* di SMPP, mantenendo pulito il body. Usate quello supportato dalla vostra rotta.

I segmenti concatenati possono arrivare fuori ordine?

Sì. Ogni segmento viaggia come un SMS indipendente, quindi possono arrivare fuori ordine o essere ritardati. Il terminale li riassembla per numero di riferimento e sequenza; un segmento mancante lascia il messaggio incompleto finché non arriva.

Riferimenti

Specifiche della fonte

Gli standard pubblicati su cui si basa questa pagina. Si apre in una nuova scheda.

BNGestito dal team di ingegneri BroadNet·Servizi di messaggistica di livello carrier dal 2003
Mettilo sul filo

Realizzato con un vero binding SMPP e un'API REST.

Richiedi l'accesso di prova con chiavi di test reali: invia prima al tuo numero verificato, poi passa alla produzione in oltre 200 paesi una volta approvata l'identità del mittente e i percorsi.