BroadNet
Foundations Beginner

SMS Fundamentals

How an SMS is built, encoded, and segmented — from the 160-character limit and GSM 03.38 to delivery receipts and A2P vs P2P.

5 lessons4 min readStandards-based · self-paced
DiagramHow an A2P message reaches the phone
  1. Your applicationSends over the REST API or SMPP
  2. BroadNet platformValidates, routes and bills each message
  3. Operator SMSCDirect operator connection
  4. Subscriber handsetThe message is delivered
The delivery receipt (DLR) travels back along the same path to your webhook
Lesson 01

The anatomy of an SMS

SMS — Short Message Service — was standardised as part of GSM and carries a payload of 140 bytes. That fixed size is the origin of every character limit you will meet: everything about SMS length is really about fitting into 140 bytes.

A message travels as either MO (mobile-originated — sent from a handset) or MT (mobile-terminated — delivered to a handset). Application-to-person traffic is almost entirely MT: your platform submits the message and the network terminates it to the subscriber.

Between submission and the handset sits the SMSC (Short Message Service Centre), which stores the message and forwards it when the recipient is reachable. If the phone is off, the SMSC holds the message until the validity period expires.

Lesson 02

Encoding: GSM 7-bit vs UCS-2

Plain Latin text uses the GSM 7-bit default alphabet defined in GSM 03.38. Because each character takes 7 bits, 140 bytes hold 160 characters — the familiar single-segment limit.

A handful of common symbols (such as { } [ ] ~ ^ | \ and the euro sign) live in an extension table and cost two characters each. It is easy to blow past a segment boundary without noticing when your copy contains one of these.

The moment a message contains any character outside that alphabet — Arabic, Cyrillic, Chinese, or an emoji — the whole message switches to UCS-2, a 16-bit Unicode encoding. Now each character takes 2 bytes, so a single segment holds only 70 characters.

Lesson 03

Segmentation and concatenation

When text exceeds one segment, it is split and reassembled on the handset. To do this, a small User Data Header (UDH) is added to each part, which consumes payload space. That is why concatenated segments hold fewer characters than a standalone one.

In GSM 7-bit, concatenated segments hold 153 characters each instead of 160; in UCS-2 they hold 67 instead of 70. A 300-character Latin message is three segments; the same length in Arabic is five. You are billed per segment, so encoding directly drives cost.

A common, avoidable mistake is a message that sits just over a boundary — 161 characters becomes two segments and doubles the price of every send. Trimming a few words, or removing an extension-table symbol, can halve the bill at scale.

Lesson 04

Delivery receipts and status

A delivery receipt (DLR) is the network's confirmation of what happened to a message. It reports a terminal status such as delivered, undelivered, expired, or rejected, and often an operator-specific error code explaining why.

DLRs are essential for reconciliation and quality measurement. Requesting them only where you consume them keeps traffic clean; a delivered receipt confirms the handset received the message, while an expired receipt means it was never reachable within the validity period.

Because operator error codes vary between routes, mature senders normalise them into a consistent taxonomy — absent subscriber, invalid number, spam-blocked — so quality can be compared across destinations.

Lesson 05

A2P vs P2P

P2P (person-to-person) is the conversational SMS one human sends to another. A2P (application-to-person) is programmatic traffic from software: alerts, OTPs, notifications, and marketing. They look identical on the handset but are commercially and technically distinct.

Operators price and route A2P differently and expect it to arrive through official, billed channels. A2P delivered through P2P routes to avoid termination fees is a grey route — cheaper up front, but prone to filtering, poor deliverability, and compliance exposure.

Understanding this split is the foundation for everything that follows: routing quality, sender-ID rules, and firewalls all exist because operators must distinguish legitimate, paid A2P traffic from bypass.

Key takeaways
  • An SMS payload is 140 bytes; that is why GSM 7-bit fits 160 characters and UCS-2 only 70.
  • Any non-GSM character (Arabic, emoji) switches the whole message to UCS-2 and shrinks the limit.
  • Concatenated segments cost header space (153 / 67 chars) and you pay per segment.
  • DLRs close the loop on delivery; A2P and P2P look alike but are routed and priced differently.
Put it into practice

Build with what you just learned.

Talk to a real engineer about your use case, or open the developer docs and send a message across the routes this course describes.

Why learn from BroadNet
  • Since2003
  • Countries200+
  • Operator links1,000+