VoLTE SIP INVITE Flow: Field Anatomy of a Call Setup
Field-level anatomy of a complete VoLTE SIP INVITE flow: INVITE, 100 Trying, 183 Session Progress, PRACK, 200 OK, ACK. Decoding SDP offer/answer, codec negotiation, QoS preconditions per RFC 3261, RFC 3262, RFC 3312, and 3GPP TS 24.229.
A VoLTE call setup is not a single SIP exchange: it is a multi-message negotiation that establishes the codec, reserves QoS resources, and confirms bearer readiness before the phone rings. Understanding the complete SIP INVITE flow — message by message — is the prerequisite for diagnosing VoLTE call setup failures, codec mismatches, and QoS precondition stalls.
Technical Reference
| Field | Value |
|---|---|
| Call flow standard | RFC 3261, RFC 3262 (PRACK), RFC 3312 (QoS preconditions), RFC 3264 (SDP offer/answer) |
| 3GPP IMS context | 3GPP TS 24.229 §5.1.2, IMS session establishment |
| SDP codec standard | 3GPP TS 26.114 (VoLTE codec profiles) |
| AMR-WB codec | RFC 4867, payload type 98 |
| DIAG log code | IMS OTA SIP signaling |
The Complete VoLTE INVITE Flow
Caller UE P-CSCF (orig) S-CSCF (orig) S-CSCF (term) P-CSCF (term) Callee UE
│ │ │ │ │ │
│── INVITE ─────>│ │ │ │ │
│ │── INVITE ────>│ │ │ │
│ │ │── INVITE ────>│ │ │
│ │ │ │── INVITE ────>│ │
│ │ │ │ │── INVITE ────>│
│ │<─ 100 Trying ─│ │ │ │
│<─ 100 Trying ──│ │ │ │ │
│ │ │ │ │<─ 183 (SDP) ──│
│ │ │ │<─ 183 ────────│ │
│ │ │<─ 183 ────────│ │ │
│ │<─ 183 ────────│ │ │ │
│<─ 183 (SDP) ───│ │ │ │ │
│── PRACK ───────────────────────────────────────────────────────────────────────>│
│<─ 200 OK (PRACK) ──────────────────────────────────────────────────────────────│
│ │ │ │ │ │
│ [QoS bearer established — QCI 1 EPS bearer set up] │
│ │ │ │ │ │
│── UPDATE (new SDP) ────────────────────────────────────────────────────────────>│
│<─ 200 OK (UPDATE SDP) ──────────────────────────────────────────────────────────│
│ │ │ │ │<─ 180 Ringing ─│
│<─ 180 Ringing ─────────────────────────────────────────────────│ │
│ │ │ │ │ │
│ [User accepts call] │
│ │ │ │ │<─ 200 OK ──────│
│<─ 200 OK ──────────────────────────────────────────────────────│ │
│── ACK ─────────────────────────────────────────────────────────────────────────>│
│ [RTP voice stream established] │
Message 1: SIP INVITE
The INVITE initiates the session. Its SDP body is the caller’s offer — the complete list of codecs and media parameters the caller supports.
Key headers to decode:
From: caller’s public user identity (SIP URI:sip:+33612345678@ims.mnc001.mcc208.3gppnetwork.org)To: callee’s public user identityContact: caller’s P-CSCF address with security parametersP-Preferred-IdentityorP-Asserted-Identity: caller’s identity assertionRequire: precondition— mandatory in IMS per TS 24.229: QoS preconditions must be negotiated
Critical SDP lines in the INVITE body:
v=0
o=- 1234567890 1 IN IP4 192.168.1.1
s=-
c=IN IP4 192.168.1.1
t=0 0
m=audio 10000 RTP/AVP 98 99 100 101 <-- media line: port 10000, codec list
a=rtpmap:98 AMR-WB/16000/1 <-- AMR-WB (wideband, 16 kHz)
a=rtpmap:99 AMR/8000/1 <-- AMR-NB (narrowband, 8 kHz)
a=rtpmap:100 telephone-event/8000 <-- DTMF
a=fmtp:98 mode-set=0,1,2,3,4,5,6,7,8; mode-change-period=2; mode-change-neighbor=1
a=curr:qos local none <-- QoS precondition: local not yet established
a=curr:qos remote none <-- QoS precondition: remote not yet established
a=des:qos mandatory local sendrecv <-- Required: local sendrecv QoS
a=des:qos mandatory remote sendrecv <-- Required: remote sendrecv QoS
a=sendrecv
What to check: AMR-WB (payload 98) must be present for HD Voice. The a=curr:qos lines must show none at this point (QoS not yet established). If precondition is absent from the Require header, the call will not use RFC 3312 — check if the network configuration mandates it.
Message 2: SIP 100 Trying
Sent by the P-CSCF (and forwarded by each proxy) to confirm receipt of the INVITE. Contains no SDP. Purely a transport-layer confirmation — it has no diagnostic value except to confirm the INVITE reached the P-CSCF. If no 100 Trying is received, the INVITE did not reach the P-CSCF (IMS APN bearer issue, DNS failure, or P-CSCF overload — see SIP 503).
Message 3: SIP 183 Session Progress (with SDP Answer)
Sent by the callee’s UE via the IMS chain. Contains the SDP answer — the callee’s codec selection and QoS precondition confirmation.
Key SDP lines to decode in the 183:
m=audio 20000 RTP/AVP 98 101 <-- callee selected codecs (must be a subset of offer)
a=rtpmap:98 AMR-WB/16000/1 <-- AMR-WB confirmed
a=rtpmap:101 telephone-event/8000
a=fmtp:98 mode-set=0,1,2,3,4,5,6,7,8; mode-change-period=2; mode-change-neighbor=1
a=curr:qos local none <-- callee's QoS not yet established
a=curr:qos remote none <-- caller's QoS (from callee's perspective) not confirmed
a=des:qos mandatory local sendrecv
a=des:qos mandatory remote sendrecv
The 183 also carries Require: 100rel — requiring the caller to send a PRACK.
What to check: The callee’s codec list must be a subset of the caller’s offer. If AMR-WB is absent from the callee’s SDP answer but present in the caller’s offer, the callee’s UE does not support AMR-WB — the call will fall back to AMR-NB. If the callee’s SDP answer is completely absent (empty m=audio line or no media section), the 183 is from the network (not the UE) and indicates the callee’s UE has not yet responded.
Message 4: PRACK
The caller sends PRACK to acknowledge the reliable 183. The PRACK is an acknowledgment of the provisional response, not an SDP message. Its role is purely to confirm the 183 was received.
The callee responds with 200 OK to PRACK — confirming the PRACK was received. After this exchange, both sides know the codec negotiation in the 183 was successfully delivered.
Message 5: UPDATE (QoS Precondition Update)
After the QCI 1 EPS bearer (the voice bearer) is established, the calling UE updates its QoS precondition status. The UPDATE carries a new SDP with updated a=curr:qos lines:
a=curr:qos local sendrecv <-- caller's QoS bearer now established
a=curr:qos remote none <-- callee's QoS not yet confirmed
a=des:qos mandatory local sendrecv
a=des:qos mandatory remote sendrecv
The callee responds with 200 OK to UPDATE carrying its updated precondition status:
a=curr:qos local sendrecv <-- callee's QoS bearer also established
a=curr:qos remote sendrecv <-- both directions established
When both sides confirm sendrecv, the preconditions are met. Only then does the callee’s UE send 180 Ringing — the user’s device rings.
Critical diagnostic point: If 180 Ringing never arrives, check whether the UPDATE/200 OK exchange completed with both sides confirming sendrecv. A precondition stall (one side stays at none or send only) means the QCI 1 bearer is not established — check the EPS bearer setup log for a failed Activate Dedicated Bearer Context procedure.
Message 6: SIP 180 Ringing
Sent after QoS preconditions are met. Indicates the callee’s device is alerting the user. No SDP. If 180 Ringing never arrives despite 183 and UPDATE exchange, check:
- IMS application server (for call barring or DND) — may be filtering the 180
- Callee’s UE state (battery-saving mode, VoLTE disabled in settings)
Message 7: SIP 200 OK
Sent when the callee answers. Contains a final SDP confirming the media parameters. The caller sends ACK to confirm receipt of the 200 OK. RTP voice stream begins after ACK.
What to check in the 200 OK SDP: same codec as 183 answer. a=sendrecv (not a=recvonly or a=sendonly). RTP port numbers (for firewall and NAT traversal verification if the UE is behind NAT).
Common Failure Points by Message
| At message | Failure | Most common cause |
|---|---|---|
| INVITE | SIP 403 | IMPU barred or IMS subscription absent |
| INVITE | SIP 480 | Callee not IMS-registered |
| INVITE | SIP 488 | Codec mismatch in SDP offer |
| INVITE | SIP 503 | P-CSCF or S-CSCF overloaded |
| 183 | Not received | Callee’s IMS bearer (QCI 5) lost |
| PRACK | Not acknowledged | Network proxies do not support 100rel |
| UPDATE | Precondition stall | QCI 1 bearer setup failed |
| 180 Ringing | Not received | Application server barring |
| 200 OK | Not received | Callee did not answer |
Capturing the INVITE Flow in the Field
IMS OTA SIP signaling is captured via DIAG log. The decoded log shows the full SIP transaction with each message in sequence: INVITE, 100 Trying, 183, PRACK, 200 OK to PRACK, UPDATE, 200 OK to UPDATE, 180 Ringing, 200 OK, ACK. Each message is timestamped, allowing the time between messages to be measured. Abnormal gaps (> 2 seconds between 183 and PRACK/UPDATE) indicate QoS bearer establishment delay. The complete SDP bodies are decoded and displayed, making codec and precondition status directly readable without manual parsing.
Related SIP Codes
- SIP 488 — Not Acceptable Here: SDP codec or QoS precondition rejected (see dedicated guide)
- SIP 480 — Temporarily Unavailable: callee not registered (see dedicated guide)
- SIP 403 — Forbidden: authorization failure on INVITE (see dedicated guide)
- SIP 503 — Service Unavailable: IMS infrastructure failure during INVITE (see dedicated guide)
- SIP 580 — Precondition Failure: RFC 3312 QoS preconditions cannot be met by the callee
Founder of HiCellTek. 15+ years in telecom, operator side, vendor side, field side. Building the field tool RF engineers deserve.
Request a personalized demo of HiCellTek — 2G/3G/4G/5G network diagnostics on Android.