SMS payloads over one message are split into segments and stitched back together on the handset using a User Data Header (UDH). The standard 6-byte concatenation UDH carries a reference number, total-segment count and this segment's sequence. It consumes payload, cutting capacity to 153 GSM-7 or 67 UCS-2 characters per segment.
Why concatenation exists
A single SMS is limited to 140 octets of user data. Longer text is sent as multiple SMS that the receiving handset reassembles into one message. This is done with a User Data Header (UDH) placed at the start of each segment's user data, alongside a flag (the UDHI bit) telling the handset a header is present. The network carries each segment as an independent SMS; only the handset recombines them.
The 6-byte concatenation UDH
The most common concatenation header is 6 octets: a header length, an information-element identifier for 8-bit concatenation, its length, then the three values that drive reassembly — a reference number shared by all segments of one message, the total number of segments, and this segment's position. A 16-bit-reference variant exists (IEI 0x08) and is 7 octets.
| Octet | Field | Value / meaning |
|---|---|---|
| 1 | UDHL | 0x05 — length of the header that follows |
| 2 | IEI | 0x00 — concatenated short message, 8-bit reference |
| 3 | IEDL | 0x03 — length of this information element |
| 4 | Reference | Shared across all segments of the message |
| 5 | Total segments | How many parts in total |
| 6 | Sequence number | This segment's position (1..total) |
Capacity per segment
The UDH lives inside the 140-octet payload, so it reduces the text each segment can carry. For GSM-7, the 6-octet UDH must be septet-aligned, effectively costing 7 septets and leaving 153 characters per segment. For UCS-2, the 6 octets leave 134 octets — 67 characters. For 8-bit data, 134 bytes remain. This is why a 161-character GSM-7 message becomes two segments of up to 153, not 160 + 1.
| Encoding | Single SMS | Per segment (with UDH) |
|---|---|---|
| GSM-7 | 160 | 153 |
| UCS-2 | 70 | 67 |
| 8-bit | 140 bytes | 134 bytes |
Sequencing and reassembly
Segments of one logical message share a reference number; the handset groups by reference and orders by sequence number to rebuild the text. Segments can arrive out of order or late, so a missing part leaves the message incomplete until it turns up (or times out). In SMPP you can concatenate either with the UDH bytes in short_message (setting the esm_class UDHI bit) or with the sar_* TLVs — pick one method per route and keep it consistent.
Frequently asked
How many characters per segment in a concatenated SMS?
153 for GSM-7 and 67 for UCS-2, because the 6-byte User Data Header consumes part of the 140-octet payload. Plain 8-bit data segments carry 134 bytes each.
What is the UDH in SMS?
The User Data Header is a small structure at the start of a segment's user data that carries control information — for concatenation, a reference number, total segment count and this segment's sequence. The UDHI bit signals its presence.
Why does a 161-character message cost two segments of 153?
Because once a message needs concatenation, every segment carries a UDH that reduces capacity to 153 GSM-7 characters. So 161 characters split into two segments (up to 306 characters total), each charged as a separate SMS.
What is the difference between UDH and SAR concatenation?
Both split long messages the same way. UDH embeds the header bytes in the message body and sets the esm_class UDHI bit; SAR carries the reference, total and sequence in SMPP sar_* TLVs instead, keeping the body clean. Use whichever your route supports.
Can concatenated segments arrive out of order?
Yes. Each segment travels as an independent SMS, so they can arrive out of order or be delayed. The handset reassembles by reference number and sequence; a missing segment leaves the message incomplete until it arrives.
Source specifications
The published standards this page is grounded in. Opens in a new tab.