ce er SMS
Introduction to SMPP
The SMPP protocol is used and supported by many vendors:
Short Message Peer-to-Peer Aldiscon, Acision, Comverse, Alcatel, Huawei, CBOSS, Jinny,
Comviva, Tekelec, Mctel, Openmind Networks, Logica, Hewlett
Packard, ESKADENIA, Symsoft, ATS Advanced Technology
by Victor Celer Solutions, Telsis, Telenity, Redknee, Tango, NewNet, Mavenir,
2019-07-10 ZTE, AdaptiveMobile, Nordic Messaging, Homisco,
www.celersms.com Evistel, Bercut,
Ericsson,
Halys
What is SMPP?
ce er
The Short Message Peer-to-Peer (SMPP) is officially defined as an open, industry
standard protocol designed to provide a flexible data communication interface for the
transfer of short message data between External Short Messaging Entities (ESME),
Routing Entities and Message Centers (SMSC)
Mobiles
ESME1 SMPP
ESME2 SMPP SMSC
SMPP
ESME3
Compatible with different technologies: GSM, UMTS, IS-95 (CDMA), CDMA2000, TDMA, iDEN, …
Alternatives?
ce er
Several alternative protocols exist:
• CIMD / CIMD v2
almost
• EMI / UCP (Logica CMG) unused
• OIS (SEMA / Airwide) today
Proprietary protocols based on:
• HTTP mainly used by Bulk SMS
providers, SMS Hubs
• HTTPS
Custom SMPP protocols:
for security, especially in
• SMPP over SSL
the cloud
• SMPP over HTTP
Version History
ce er
• SMPP v3.3: one-way only (Tx or Rx) 1997
• SMPP v3.4: support 2-way (TRx), optional TLV 1999
• SMPP v5.0: support cell broadcast, smart flow control 2003 current
backward compatibility
Proprietary branches:
• SMPP v4.0 (Logica)
• CMPP (China Mobile)
no compatibility
Typical Applications
ce er
SMS:
• Mobile Marketing
• One Time Passwords (OTP)
• Voicemail Notifications
• Over-the-Air SIM management (OTA)
• Device Management (OMACP)
• Telemetry, M2M
Other that SMS:
• USSD
• Cell Broadcast
• Billing
Client-Server Model
ce er
• The SMSC usually acts as a server awaiting connections
• The ESME is the client
• Pairs of Request-Response PDUs (asynchronous)
• SMPP operations:
• bind
• submit_sm
• deliver_sm
• enquire_link
• alert_notification
• …
Transmitter (Tx), Receiver (Rx) or Transceiver (TRx)
ce er
ESME1 Transmitter
One-way
ESME2 Receiver SMSC
Two-way ESME3
Transceiver
SMPP Session
ce er
OUTBOUND
BOUND_TX
OPEN BOUND_RX UNBOUND CLOSED
BOUND_TRX
Transmitter-only (Tx)
ce er
ESME SMSC
network connection
OPEN
bind_transmitter
bind_transmitter_resp
BOUND_TX
short messages
submit_sm
submit_sm_resp
Send
submit_sm
submit_sm_resp
unbind
unbind_resp
UNBOUND
connection closed
CLOSED
Receiver-only (Rx)
ce er
ESME SMSC
network connection
OPEN
bind_receiver
bind_receiver_resp
BOUND_RX
short messages
deliver_sm
Receive
deliver_sm_resp
deliver_sm
deliver_sm_resp
unbind
unbind_resp
UNBOUND
connection closed
CLOSED
Transceiver (TRx): combines transmitter and receiver
ce er
ESME SMSC
network connection
OPEN
bind_transceiver
bind_transceiver_resp
BOUND_TRX
Send and receive
short messages
submit_sm
submit_sm_resp
deliver_sm
deliver_sm_resp
unbind
unbind_resp
UNBOUND
connection closed
CLOSED
PDU Format
ce er
PDU Header (Mandatory) PDU Body
length id status sequence number (Optional)
4 octets 4 octets 4 octets 4 octets length - 16
• The command length represents the whole bytes length of the PDU
• The minimum command length is 16
PDU Format
ce er
PDU Header (Mandatory) PDU Body
length id status sequence number (Optional)
4 octets 4 octets 4 octets 4 octets length - 16
• The unique command identifier:
submit_sm (0x00000004)
submit_sm_resp (0x80000004)
deliver_sm (0x00000005)
enquire_link (0x00000015)
…
• Request command id range: 0x00000000 – 0x000001FF
• Response command id range: 0x80000000 – 0x800001FF
PDU Format
ce er
PDU Header (Mandatory) PDU Body
length id status sequence number (Optional)
4 octets 4 octets 4 octets 4 octets length - 16
• The status is always set to 0x00000000 for a request PDU
• In a response PDU the status indicates success
(0x00000000) or failure
• The SMPP guide describes the standard error codes:
ESME_RMSGQFUL (0x00000014)
ESME_RTHROTTLED (0x00000058)
ESME_RINVEXPIRY (0x00000062)
PDU Format
ce er
PDU Header (Mandatory) PDU Body
length id status sequence number (Optional)
4 octets 4 octets 4 octets 4 octets length - 16
• Increase monotonically for each submitted request PDU
• Range: 0x00000001 – 0x7FFFFFFF
• The sequence number in the response PDU matches the
request PDU (correlation)
• Useful for asynchronous sequences
PDU Format: Deeper
ce er
length
id
Header
status
sequence number
Mandatory parameters
Body
Optional parameters
• Header is mandatory for every PDU
• Some PDU have no body (i.e. enquire_link, generic_nack)
• Optional parameters available since SMPP v3.4
• Optional parameters can be ignored by the ESME or the SMSC
PDU Format: Optional Parameters
ce er
Size Description
Tag 2 Uniquely identify parameter
Length 2 Indicates the length of the value
Value Length Contains the actual data
• The optional parameters (TLV) appear at the end of the PDU body
• The order of the TLV is not relevant
• If the tag is not supported the TLV must be ignored
• Keep in mind that SMPP v3.3 doesn’t support this feature
Typical Tx Session
ce er
ESME SMSC
bind_transmitter(1)
synchronous
bind_transmitter_resp(1)
submit_sm(2)
submit_sm(3)
asynchronous
Request- submit_sm(4)
response pair:
same sequence submit_sm_resp(2)
number submit_sm(5)
submit_sm_resp(3)
submit_sm_resp(4)
submit_sm_resp(5)
unbind(6)
synchronous
unbind_resp(6)
Typical Rx Session
ce er
ESME SMSC
bind_receiver(1)
synchronous
bind_receiver_resp(1)
deliver_sm(1)
deliver_sm(2)
asynchronous
Request- deliver_sm(3)
response pair:
same sequence deliver_sm_resp(1)
number deliver_sm(4)
deliver_sm_resp(2)
deliver_sm_resp(3)
deliver_sm_resp(4)
unbind(2)
synchronous
unbind_resp(2)
Typical TRx Session
ce er
ESME SMSC
bind_transceiver(1)
synchronous
bind_transceiver_resp(1)
submit_sm(2)
submit_sm(3)
asynchronous
submit_sm_resp(2)
submit_sm_resp(3)
deliver_sm(1)
deliver_sm_resp(1)
deliver_sm(2)
deliver_sm_resp(2)
unbind(4)
synchronous
unbind_resp(4)
Error Handling
ce er
request
short time (ms)
response
• Timeout or retransmission if no response after a certain time
• Check the command status in the response PDU
• Additional data can be expected after a successful response
(i.e. delivery report, PoR)
• The response can be a generic_nack if the PDU is corrupt