# SMS segmentation, concatenation and the UDH

> 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.

- Canonical URL: https://www.broadnet.me/reference/sms-segmentation-concatenation-udh
- Language: en
- Last updated: 2026-07-18
- Publisher: BroadNet (https://www.broadnet.me)

How long SMS is split and reassembled: the 6-byte User Data Header, the resulting 153 (GSM-7) and 67 (UCS-2) characters per segment, the reference number and segment sequencing.

## 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.

*6-byte concatenation UDH (8-bit reference)*

| 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.

*Concatenated-segment capacity*

| 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 questions

### 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.

## Sources

- [3GPP TS 23.040 — User Data Header (§9.2.3.24)](https://www.3gpp.org/dynareport/23040.htm)
- [3GPP TS 23.038 — alphabets and data coding](https://www.3gpp.org/dynareport/23038.htm)

## Related

- [Encoding detection & cost](https://www.broadnet.me/reference/encoding-detection-and-cost)
- [SMPP TLV optional parameters](https://www.broadnet.me/reference/smpp-tlv-parameters)
- [The GSM-7 character set](https://www.broadnet.me/reference/gsm7-character-set)
- [SMS segment calculator (free tool)](https://www.broadnet.me/tools/sms-segment-calculator)
- [A2P SMS product](https://www.broadnet.me/products/a2p-sms)
