BroadNet
SMS encodingSegmentation

SMS segmentation, concatenation and the UDH

Updated 3 min readStandards-based
Direct answer

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.

§01

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.

§02

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)
OctetFieldValue / meaning
1UDHL0x05 — length of the header that follows
2IEI0x00 — concatenated short message, 8-bit reference
3IEDL0x03 — length of this information element
4ReferenceShared across all segments of the message
5Total segmentsHow many parts in total
6Sequence numberThis segment's position (1..total)
§03

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
EncodingSingle SMSPer segment (with UDH)
GSM-7160153
UCS-27067
8-bit140 bytes134 bytes
§04

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.

FAQ

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.

References

Source specifications

The published standards this page is grounded in. Opens in a new tab.

BNMaintained by the BroadNet engineering team·Carrier-grade messaging since 2003
Put it on the wire

Build with a real SMPP bind and REST API.

Request test access with real test keys: send to your own verified number first, then move to production across 200+ countries once your sender identity and routes are approved.