IMS, VoLTE & VoWiFi
IMS (IP Multimedia Subsystem) is the SIP-based core that turns a phone call into an IP session, whether the phone is on LTE (VoLTE), 5G NR (VoNR) or Wi-Fi (VoWiFi). This page walks through the network nodes, registration, the SIP call ladder, QoS bearers, handovers, emergency calls and the debugging patterns interviewers love to probe.
- IMS separates access (LTE, NR, Wi-Fi), transport (EPC or 5GC) and service control (the SIP core), so one voice service works over every access.
- The UE talks SIP only to the P-CSCF; the S-CSCF holds registration state and runs service triggers (iFC); the HSS/UDM holds identities and keys; the TAS runs supplementary services.
- Registration: IMS APN up, P-CSCF from PCO,
REGISTER,401with an IMS-AKA challenge, IPsec SA set up, protectedREGISTER,200 OK, thenSUBSCRIBEto the reg event. - Call:
INVITE(SDP offer),100,183(SDP answer),PRACK, bearer reservation,UPDATE,180,200,ACK, RTP on a QCI 1 / 5QI 1 GBR bearer. SIP rides QCI 5. - SRVCC drops an active IMS call to 2G/3G circuit-switched; VoWiFi handover stays on IMS and works because the P-GW keeps the same IP address.
- Do not invert the IMS QCIs: QCI 1 is conversational voice (GBR); QCI 5 is IMS signalling on the default bearer. Deployed roaming is usually S8HR (home-routed), not local breakout.
The big picture: why IMS exists
Before 4G, voice ran on the circuit-switched (CS) domain: the network reserved a dedicated circuit (a timeslot) end to end for the whole call. LTE has no CS domain at all; it is an all-IP packet network. So operators needed a way to carry voice as IP packets while keeping carrier-grade features: guaranteed quality, supplementary services (call forwarding, hold, conference), emergency calls, lawful intercept, charging and roaming. IMS is that system.
IMS is a standardised (3GPP) architecture built on SIP (Session Initiation Protocol) for signaling, SDP (Session Description Protocol) to negotiate media, and RTP/RTCP to carry the actual voice and video. Its key design choice is layering:
Access layer
How the phone physically connects: LTE (eNB), 5G NR (gNB), Wi-Fi (via ePDG or N3IWF), even fixed broadband.
Transport / bearer layer
The packet core (EPC or 5GC) that gives the phone an IP address on the IMS APN and provides QoS bearers (QCI 5 for SIP, QCI 1 for voice).
Service control layer
The IMS core itself: CSCFs, HSS, application servers. It does not care which access you came in on.
Because service control is independent of access, the same IMS core delivers:
- VoLTE (Voice over LTE): IMS voice over LTE radio with a QCI 1 dedicated bearer.
- VoNR (Voice over New Radio): the same SIP flow over 5G SA with a 5QI 1 QoS flow. See 5G NR for EPS fallback and the 5G core.
- VoWiFi (Wi-Fi Calling, WFC): the same SIP flow tunnelled over any Wi-Fi through an IPsec tunnel to the ePDG.
- ViLTE (video over LTE), RCS (rich messaging), SMS over IP, and IMS emergency calls.
Think of IMS as a hotel's concierge service. Guests can arrive by car, taxi or on foot (the access: LTE, NR, Wi-Fi), they walk through the lobby doors (the packet core giving them an IP address), and then they always deal with the same concierge desk (the IMS core) for restaurant bookings, wake-up calls and message forwarding (voice, video, supplementary services). The front-desk clerk you speak to is the P-CSCF, the manager who knows your booking and preferences is the S-CSCF, the guest register in the back office is the HSS, and the specialist teams (restaurant, spa) are the application servers. How you arrived at the hotel does not change how the concierge serves you.
ACCESS TRANSPORT (bearers) SERVICE CONTROL
┌──────────────────┐ ┌──────────────────────────┐ ┌──────────────────────────┐
│ LTE eNB │──►│ EPC: MME, S-GW, P-GW │──►│ │
│ NR gNB │──►│ 5GC: AMF, SMF, UPF │──►│ IMS core: P/I/S-CSCF, │
│ Wi-Fi (untrusted)│──►│ ePDG / N3IWF ──► P-GW/UPF│──►│ HSS/UDM, TAS, MRF, BGCF, │
└──────────────────┘ └──────────────────────────┘ │ MGCF, IBCF, E-CSCF │
PCRF / PCF (QoS policy) ◄─────┤ │
└──────────────────────────┘
SIP signaling: UE ◄═══► P-CSCF (on QCI 5 / 5QI 5)
RTP media: UE ◄═══► far end (on QCI 1 / 5QI 1, guaranteed bit rate)
Circuit-switched voice (2G/3G)
- Dedicated circuit for the whole call
- Control in the MSC
- Services in the MSC/IN platform
- Voice codec over a fixed-rate channel
- Only works on 2G/3G radio
IMS voice (VoLTE/VoNR/VoWiFi)
- RTP packets on a QoS bearer
- Control in SIP servers (CSCFs)
- Services in application servers (TAS)
- HD codecs (AMR-WB, EVS), faster call setup
- Works over any IP access
IMS core architecture and network entities
The IMS core is a set of functions, each with a narrow job. In real deployments several functions are often combined in one product (for example, P-CSCF inside an SBC, or I-CSCF and S-CSCF on the same platform), but interviewers expect you to know the logical roles.
The three CSCFs (Call Session Control Functions)
| Node | Role | Key facts |
|---|---|---|
| P-CSCF (Proxy) | First and only SIP contact point for the UE. | Terminates the IPsec SAs with the UE (or TLS); asserts the user identity (P-Asserted-Identity); talks to the PCRF/PCF over Rx/N5 to request the voice bearer; detects emergency calls; in the usual S8HR roaming model it stays in the home network (it sits in the visited network only for local-breakout roaming); usually co-located with an SBC. SigComp is defined but rarely used for VoLTE. |
| I-CSCF (Interrogating) | Entry point into the home network. | Found via DNS for the home domain; queries the HSS over Cx (UAR/UAA at registration, LIR/LIA for terminating calls) to find or assign the S-CSCF; can hide topology. |
| S-CSCF (Serving) | The brain: registrar and session controller. | Authenticates the user (MAR/MAA to fetch AKA vectors), downloads the user profile (SAR/SAA), stores registration bindings, evaluates iFC (initial Filter Criteria) to route requests to application servers over ISC, does routing and number translation (ENUM). |
Databases, application servers and media
| Node | Role |
|---|---|
| HSS (Home Subscriber Server) / UDM+UDR in 5G | Master subscriber database: IMPI/IMPU identities, AKA authentication vectors, service profile with iFC, S-CSCF assignment, SRVCC data (STN-SR, C-MSISDN). Interfaces: Cx to CSCFs, Sh to application servers. With several HSSs, an SLF (Subscription Locator Function) tells CSCFs which HSS to use (Dx/Dh). |
| TAS (Telephony Application Server, also MMTel AS) | Runs MMTel supplementary services: forwarding, barring, waiting, hold, conference, CLIP/CLIR, ECT. Invoked by the S-CSCF via iFC over ISC. Serves the Ut (XCAP) interface for user settings. |
| SCC-AS (Service Centralization and Continuity AS) | Anchors sessions so the access leg can be swapped (SRVCC, PS/CS access transfer, terminating access domain selection). Often co-located with the TAS. |
| MRF (MRFC + MRFP) | Media Resource Function: plays announcements and tones, mixes conference audio, can transcode. MRFC is the control part, MRFP handles the media. |
| BGCF (Breakout Gateway Control Function) | Decides where to break out to the PSTN/CS network: a local MGCF or another operator's network. |
| MGCF + IMS-MGW | Interworking with PSTN/CS. MGCF converts SIP to ISUP/BICC signaling; it controls the IMS-MGW (H.248) which converts RTP to TDM (or other codecs). |
| IBCF + TrGW | Interconnection Border Control Function: the border towards other IMS networks (interconnect and roaming). Topology hiding, header screening, IPv4/IPv6 interworking. TrGW is its media-plane partner. |
| SBC (Session Border Controller) | A product, not a 3GPP function: security, DoS protection, NAT traversal, topology hiding, media anchoring. Typically implements the P-CSCF at the access edge and the IBCF at the interconnect edge. |
| E-CSCF and LRF | Emergency CSCF routes emergency sessions to the right PSAP; the Location Retrieval Function supplies location and routing information. |
| ATCF / ATGW | Access Transfer Control Function and Gateway (for eSRVCC): anchor signaling and media close to the UE, in the serving network, so an SRVCC transfer is quick. |
Policy and non-3GPP access nodes
| Node | Role |
|---|---|
| PCRF (LTE) / PCF (5G) | Policy and Charging Rules Function. Receives session information from the P-CSCF (Rx in LTE, N5 or Rx in 5G) and pushes PCC rules to the gateway (Gx to the P-GW/PCEF, N7 to the SMF) so a dedicated voice bearer or QoS flow is created. |
| P-GW (PCEF) / SMF + UPF | Gateway that owns the IMS PDN connection and the UE's IMS IP address; enforces QoS; acts as the mobility anchor between LTE and Wi-Fi. |
| ePDG (Evolved Packet Data Gateway) | Terminates the UE's IKEv2/IPsec tunnel over untrusted Wi-Fi (SWu), authenticates the UE with EAP-AKA via the 3GPP AAA server, and connects to the P-GW over S2b. |
| N3IWF (Non-3GPP Interworking Function) | The 5G equivalent of the ePDG: terminates IPsec from the UE over untrusted non-3GPP access and connects to the AMF (N2) and UPF (N3). |
| 3GPP AAA server | Authenticates non-3GPP access (EAP-AKA/AKA') against the HSS (SWx) and authorises the ePDG (SWm). |
End-to-end picture
HOME / SERVING IMS NETWORK UE ══SIP (IPsec, Gm)══► P-CSCF/SBC ──Mw──► I-CSCF ──Mw──► S-CSCF ══ISC══► TAS / SCC-AS │ │ │ │ │ │ │ └─────Cx──────► HSS ◄────Sh─────┘ │ │ ▲ │ └──Rx / N5──► PCRF / PCF ──Gx/N7──► P-GW / SMF+UPF │ (installs QCI 1 bearer) │ S-CSCF ──Mi──► BGCF ──Mj──► MGCF ──► PSTN │ S-CSCF ──Mx──► IBCF ──► other operator IMS │ S-CSCF ──Mr──► MRF (announcements, conference) └── RTP media on dedicated bearer ── eNB/gNB ── S-GW ── P-GW/UPF ── far end
Reference points you should recognise
| Interface | Between | Protocol and purpose |
|---|---|---|
| Gm | UE and P-CSCF | SIP; registration and session control |
| Mw | CSCF and CSCF | SIP inside the IMS core |
| ISC | S-CSCF and application server | SIP; service invocation via iFC |
| Cx | I/S-CSCF and HSS | Diameter: UAR, MAR, SAR, LIR, PPR, RTR |
| Sh | AS and HSS | Diameter: user data for services |
| Rx / N5 | P-CSCF and PCRF / PCF | Diameter (Rx) or HTTP/2 SBI (N5): media description for QoS |
| Gx / N7 | PCRF and P-GW / PCF and SMF | PCC rules that create dedicated bearers / QoS flows |
| Ut | UE and TAS (XCAP server) | HTTP/XCAP: supplementary service settings |
| Mi / Mj / Mg | S-CSCF to BGCF / BGCF to MGCF / MGCF to CSCF | SIP towards PSTN breakout |
| Sv | MME and MSC server | GTPv2: SRVCC PS-to-CS handover |
| SWu / S2b | UE and ePDG / ePDG and P-GW | IKEv2/IPsec / GTPv2 (or PMIPv6): VoWiFi access |
IMS identities
- IMPI (IP Multimedia Private Identity): one per subscription, used only for authentication, in NAI form such as
imsi@ims.mnc001.mcc001.3gppnetwork.org. Never used to route calls. - IMPU (IP Multimedia Public Identity): one or more SIP or tel URIs others use to reach you, for example
sip:+15551234567@ims.example.comandtel:+15551234567. IMPUs grouped in an implicit registration set are all registered together. - ISIM: the SIM application holding IMPI, IMPU and the home domain (EF_IMPI, EF_IMPU, EF_DOMAIN). Without an ISIM, the UE derives temporary identities from the IMSI on the USIM.
- GRUU (Globally Routable User agent URI): identifies one specific device instance when several devices share an IMPU.
+sip.instance(often built from the IMEI) is the stable device identifier. - P-Associated-URI: returned in the
200 OKto REGISTER; lists the IMPUs the network has registered for you.
The P-CSCF is the security desk at the front door: every visitor must pass it, it checks badges and stamps them. The I-CSCF is the reception directory that looks up which floor your department is on. The S-CSCF is your department manager who knows your preferences and decides which specialist team (application server) handles each request. The HSS is the HR records office that holds everyone's ID and permissions. The BGCF and MGCF are the shipping desk that hands parcels to an outside courier (the PSTN). In the real system, SIP messages flow through the P-CSCF, the I-CSCF finds the right S-CSCF using the HSS, and the S-CSCF triggers the TAS for services.
IMS connectivity: APN, PDN and bearers
Before any SIP can be sent, the UE needs an IP address on a network that can reach the P-CSCF. That is the IMS APN (Access Point Name), a separate packet data connection with the well-known name ims. In LTE it is an IMS PDN connection; in 5G it is an IMS PDU session towards the IMS DNN.
Why a separate APN?
- Isolation: IMS traffic is never mixed with internet traffic, so it can be given its own QoS, security policy and firewall rules.
- Reachability: the P-CSCF is only reachable from the IMS APN (a private operator network), which protects the core.
- Independence from data settings: VoLTE keeps working when the user turns off mobile data or runs out of data allowance, because the IMS APN is not the internet APN.
- Charging: voice is charged by the IMS core, not as data volume.
- IMS APNs are usually IPv6 (or IPv4v6), which avoids NAT problems for SIP and RTP.
Bearers on the IMS APN
| Bearer | LTE (QCI) | 5G (5QI) | Type | Carries | When created |
|---|---|---|---|---|---|
| Default bearer of IMS APN | 5 | 5 | Non-GBR | SIP signaling | At IMS PDN setup, stays up while registered |
| Dedicated voice bearer | 1 | 1 | GBR | RTP/RTCP voice | During call setup, triggered by the P-CSCF via PCRF/PCF |
| Dedicated video bearer | 2 (some operators use 7 or 8, non-GBR) | 2 | GBR | RTP video for ViLTE | When a video call is set up or upgraded |
- Attach / registration to the packet core The UE attaches to LTE (or registers with the 5GC). Many operators make the IMS APN the initial attach APN, or the UE opens it right after attach.
- IMS PDN connectivity request The UE requests a PDN connection to APN
imsand includes a PCO (Protocol Configuration Options) request for the P-CSCF address (IPv6 and/or IPv4). - Default bearer with QCI 5 The network activates the default bearer and returns the UE's IP address and, in the PCO, the list of P-CSCF addresses.
- Voice support indication In the attach or TAU accept, the network signals "IMS voice over PS session supported" (IMS VoPS). If this bit is not set, the UE must not use VoLTE in that cell and will use CSFB or other domains instead.
The IMS APN is like a staff-only corridor in a stadium: ordinary fans (internet traffic) cannot enter, and the only door at the end is the concierge desk (P-CSCF). Inside the corridor there is a normal walkway for messages (QCI 5, signaling) and, when a call starts, a roped-off express lane is opened just for the voice packets (QCI 1, guaranteed bit rate). In the real network, the default bearer is the walkway, and the dedicated GBR bearer is the express lane created per call by the PCRF.
IMS registration and authentication
Voice cannot work until the UE is registered with the IMS core. Registration binds the UE's current IP address (its Contact) to its public identities, authenticates it, and sets up the IPsec protection used for every later SIP message. It is also the procedure that fails most often in the field.
Step by step
- IMS PDN up The UE has an IP address on the IMS APN and a default QCI 5 bearer.
- P-CSCF discovery The P-CSCF address comes from the PCO in the PDN (or PDU session) response. Alternatives: DHCPv6/DHCP with DNS lookup, or static configuration. Over VoWiFi it comes in the IKEv2 configuration payload.
- Initial REGISTER (unprotected) Sent to the P-CSCF with the IMPI (in the
Authorizationheader), the IMPU (inFrom/To), theContactwith feature tags (for example, MMTel ICSI,+g.3gpp.smsip, video),Expires, and aSecurity-Clientheader offering IPsec algorithms and SPIs/ports. - Routing to the S-CSCF The P-CSCF adds
PathandP-Visited-Network-IDand forwards to the I-CSCF (found by DNS for the home domain). The I-CSCF sends a Diameter UAR to the HSS and learns which S-CSCF to use (or the capabilities needed to choose one). - Authentication challenge The S-CSCF sends MAR to the HSS and receives an authentication vector: RAND, AUTN, XRES, CK, IK. It answers
401 UnauthorizedwithWWW-Authenticate: Digest algorithm=AKAv1-MD5, nonce=base64(RAND+AUTN). It also passes CK and IK to the P-CSCF, which removes them before forwarding the 401 to the UE. - ISIM runs AKA The ISIM (or USIM) checks AUTN (this authenticates the network and checks the sequence number SQN), computes RES, and derives CK and IK.
- IPsec SA setup The UE and P-CSCF now both hold CK and IK, so they set up a pair of IPsec ESP security associations (protected client and server ports) as agreed in
Security-Client/Security-Server. - Second REGISTER (protected) Sent over the new IPsec SA, with the digest response computed using RES, and a
Security-Verifyheader echoing the server's offer (protection against downgrade attacks). - 200 OK The S-CSCF compares RES with XRES, sends SAR to the HSS to download the user profile (including iFC), and returns
200 OKwithService-Route,P-Associated-URI, the grantedExpiresand (optionally) GRUUs. - Third-party registration The S-CSCF evaluates iFC and sends a
REGISTERon the user's behalf to application servers such as the TAS, so they know the user is online. - Reg-event subscription The UE sends
SUBSCRIBE(Event:reg) and gets aNOTIFYwith its registration state. The P-CSCF also subscribes. Later NOTIFYs report network-initiated de-registration or re-authentication requests. - Re-registration Before the registration expires, the UE re-registers (typically at half the expiry for short timers, or 600 seconds before expiry for long ones). A new AKA challenge may be issued, creating new SAs.
UE (ISIM) P-CSCF I-CSCF HSS S-CSCF TAS
│ │ │ │ │ │
│ REGISTER ───────►│ (Security-Client)│ │ │ │
│ │ REGISTER ───────►│ UAR ────────►│ │ │
│ │ │◄──────── UAA │ │ │
│ │ │ REGISTER ─────────────────────►│ │
│ │ │ │◄────── MAR ────│ │
│ │ │ │ MAA (RAND,AUTN,XRES,CK,IK) ─►│
│ │◄──────────── 401 Unauthorized (nonce, CK, IK) ───│ │
│◄─ 401 (nonce) ───│ (P-CSCF keeps CK/IK, adds Security-Server) │ │
│ AKA: verify AUTN, compute RES, derive CK/IK │ │
│═══ IPsec SAs established between UE and P-CSCF ═══ │ │
│ REGISTER (RES) ─►│ (over IPsec, Security-Verify) │ │
│ │ REGISTER ───────►│ UAR/UAA ────►│ │ │
│ │ │ REGISTER ─────────────────────►│ │
│ │ │ │◄────── SAR ────│ │
│ │ │ │ SAA (profile, iFC) ─────────►│
│◄──────────────── 200 OK (Service-Route, P-Associated-URI, Expires) ─│ │
│ │ │ │ │ REGISTER ──►│
│ │ │ │ │◄──── 200 ───│
│ SUBSCRIBE (reg) ────────────────────────────────────────────────────►│ │
│◄──────────────── 200 OK, then NOTIFY (reg state: active) ───────────│ │
IMS-AKA in more detail
- Mutual authentication: AUTN proves the network knows the shared key K (the UE authenticates the network), and RES proves the UE knows K (the network authenticates the UE).
- Sequence number protection: AUTN contains SQN. If the SIM finds SQN out of range, it returns a synchronisation failure with an
autsparameter in the next REGISTER; the S-CSCF passes AUTS to the HSS, which resynchronises and issues a fresh challenge. - MAC failure: if AUTN does not verify, the UE sends a REGISTER with an empty response (or stops), meaning it does not trust the network. Often caused by a wrong key/profile on the SIM or HSS.
- Keys: CK (cipher key) and IK (integrity key) are used for the IPsec SAs. Integrity protection is mandatory; encryption on Gm is optional and operator-configured.
- Without ISIM: the UE uses the USIM and derives the IMPI/IMPU from the IMSI. Some operators use SIP Digest or GIBA (early IMS) instead of AKA, but VoLTE (GSMA IR.92) requires IMS-AKA with IPsec.
De-registration and network events
- UE-initiated de-registration:
REGISTERwithExpires: 0(for example, on airplane mode or power off). - Network-initiated:
NOTIFYon the reg event with stateterminatedand an event such asdeactivated(re-register now) orrejected(do not retry). - Registration timers: the UE requests a long expiry (VoLTE profiles often request 600000 seconds) and the network grants a shorter one, commonly 3600 seconds.
- P-CSCF failure: if the P-CSCF stops responding, the UE tries the next P-CSCF address from the PCO list and performs a fresh initial registration.
Common registration failures
| Symptom | Likely cause | What to check |
|---|---|---|
| No REGISTER sent at all | IMS PDN not up, no P-CSCF in PCO, VoLTE disabled or not provisioned in carrier config, IMS VoPS not indicated | PDN setup and PCO in NAS logs; carrier config VoLTE flags; attach accept feature bits |
| REGISTER times out (no response) | Wrong P-CSCF, routing/firewall issue, MTU/fragmentation of large UDP SIP messages, IPsec SA mismatch | SIP trace on the device, IP routes, whether UDP-to-TCP switch happens for large messages |
| 401 loop (challenge repeats) | RES rejected: wrong key, IMPI mismatch, SQN sync issue | AKA result in modem logs, auts presence, identities used |
403 Forbidden | Subscriber not provisioned for IMS/VoLTE, IMPU barred, roaming not allowed | Operator provisioning (HSS profile), identity values, roaming agreements |
494 Security Agreement Required | UE did not include Security-Client, or algorithms mismatch | Security-Client/Server headers, supported IPsec algorithms |
503 Service Unavailable with Retry-After | Core overload or maintenance | Retry-After honoured; try alternate P-CSCF |
| VoLTE icon shown but calls go CS | Registration silently expired, or the framework thinks IMS is not in service | Actual IMS state in logs, re-REGISTER timing, reg-event NOTIFY |
You arrive at the security desk and state your name (initial REGISTER). The guard phones HR, which sends back a secret question that only your real badge chip can answer, plus a key pair for a locker (401 with the AKA challenge; CK/IK go to the P-CSCF). Your badge chip answers the question and also produces the same locker keys (ISIM computes RES, CK, IK). You and the guard now talk only through that locked box (the IPsec SA), you give your answer through it (protected REGISTER), and the guard lets you in and adds your name to the building directory (200 OK and registration binding). Finally you subscribe to building announcements so you hear if your badge is cancelled (reg event).
VoLTE and VoNR call setup: the SIP ladder
"Walk me through a VoLTE call" is the single most asked IMS question. The SIP flow is the same for VoNR and VoWiFi; only the radio and the QoS mechanism change. The key idea is preconditions: the network reserves the voice bearer on both sides before the callee's phone rings.
Mobile-originated (MO) call, end to end
UE-A P-CSCF-A S-CSCF-A / TAS S-CSCF-B / TAS P-CSCF-B UE-B │ │ │ │ │ │ 1 │─INVITE (SDP offer: AMR-WB/EVS, precondition curr=none, des=mandatory)─► │ │ │──INVITE──────►│ (iFC: TAS orig) │ │ │ 2 │◄─100 Trying───│ │──INVITE───────────►│ (via I-CSCF/LIR)│ │ │ │ │ │──INVITE────────►│──INVITE─────►│ │ │ │ │ │ (paging if idle) 3 │◄───────────── 183 Session Progress (SDP answer: one codec, Require: 100rel) ────────│ │ P-CSCF-A and P-CSCF-B send Rx AAR ──► PCRF ──► P-GW: create QCI 1 bearer each side 4 │─PRACK────────────────────────────────────────────────────────────────────────────►│ 5 │◄──────────────────────────────────────────────────────────────── 200 OK (PRACK) ──│ │ == QCI 1 dedicated bearer active on A side == == on B side == │ 6 │─UPDATE (SDP: local precondition met, curr=sendrecv) ─────────────────────────────►│ 7 │◄──────────────────────────────────────────────────────────────── 200 OK (UPDATE) ─│ │ (both sides' resources ready: UE-B now alerts) │ 8 │◄──────────────────────────────────────────────────────────────── 180 Ringing ─────│ 9 │◄──────────────────────────────────────────────────────────────── 200 OK (INVITE) ─│ 10 │─ACK──────────────────────────────────────────────────────────────────────────────►│ │═════════════════ RTP/RTCP voice on QCI 1 (both directions) ════════════════════════│ 11 │─BYE──────────────────────────────────────────────────────────────────────────────►│ 12 │◄──────────────────────────────────────────────────────────────── 200 OK (BYE) ────│ │ P-CSCFs send Rx STR ──► PCRF ──► dedicated bearers released │
- INVITE with SDP offer UE-A lists its codecs (EVS, AMR-WB, AMR-NB, telephone-event for DTMF), its IP address and RTP port, bandwidth, and precondition attributes saying "local QoS is not yet reserved but is mandatory". It carries
Supported: 100rel, preconditionand the MMTel feature tag. - 100 Trying Hop-by-hop: the P-CSCF tells the UE it received the INVITE, so the UE stops retransmitting. It is not end to end.
- Routing S-CSCF-A runs originating iFC (the TAS applies outgoing barring, CLIR and so on), then finds the terminating network. In the home network of UE-B, the I-CSCF sends LIR to the HSS to find S-CSCF-B, which runs terminating iFC (the TAS applies forwarding and call waiting) and forwards via P-CSCF-B to UE-B. If UE-B is idle, the MME pages it first.
- 183 Session Progress with SDP answer UE-B picks one codec and returns its own media address. The 183 must be sent reliably (
Require: 100rel, with anRSeqnumber). When each P-CSCF sees the offer/answer, it sends the media details over Rx to the PCRF, which asks the P-GW to create a QCI 1 dedicated bearer for that UE. - PRACK and 200 OK UE-A acknowledges the reliable 183 with PRACK (carrying
RAck). Without PRACK the 183 would be retransmitted. - UPDATE When UE-A's bearer is up, it sends UPDATE with SDP saying its local precondition is now met. UE-B replies 200 OK.
- 180 Ringing Once both sides have resources, UE-B alerts the user and sends 180. UE-A plays local ringback (or network early media if authorised).
- 200 OK and ACK The callee answers; UE-A confirms with ACK, which completes the three-way handshake of the INVITE transaction. RTP flows.
- BYE Either side hangs up with BYE; 200 OK confirms. The P-CSCFs end the Rx sessions and the dedicated bearers are released.
Why preconditions matter
Without preconditions, the callee's phone could ring and be answered before the network has granted the voice bearer. The user would pick up and hear silence, or the bearer request could fail after answer. The 183, PRACK and UPDATE sequence (RFC 3312 preconditions, RFC 3262 reliable provisional responses, RFC 3311 UPDATE) guarantees "no ringing until media can flow". If resources cannot be reserved, the call fails with 580 Precondition Failure instead of ringing and then going silent.
a=curr:qos local none current status: local QoS not reserved yet
a=curr:qos remote none remote QoS not reserved yet
a=des:qos mandatory local sendrecv desired: local QoS is mandatory, both directions
a=des:qos mandatory remote sendrecv desired: remote QoS is mandatory
a=conf:qos remote sendrecv ask the peer to confirm when its QoS is ready
Mobile-terminated (MT) call: what differs
- The network first pages an idle UE on the default bearer path (the INVITE arrives at the P-GW and triggers downlink data notification), then delivers the INVITE.
- The UE sends 100 Trying (optional from a UA), then 183 with the SDP answer, and handles the incoming PRACK and UPDATE.
- Only when resources are ready does it alert the user and send 180 Ringing, then 200 OK when the user answers, and receives ACK.
- On the terminating side the S-CSCF runs terminating iFC, so forwarding (CFU, CFB, CFNRy) and call waiting happen before or during delivery.
A sample INVITE (trimmed)
INVITE tel:+15557654321 SIP/2.0
Via: SIP/2.0/UDP [2001:db8::10]:5064;branch=z9hG4bK-123;rport
Max-Forwards: 70
Route: <sip:[2001:db8::1]:5066;lr>, <sip:scscf.ims.example.com;lr>
From: <sip:+15551234567@ims.example.com>;tag=a1b2
To: <tel:+15557654321>
Call-ID: 8f3c21d7@2001:db8::10
CSeq: 1 INVITE
Contact: <sip:[2001:db8::10]:5064>;+g.3gpp.icsi-ref="urn%3Aurn-7%3A3gpp-service.ims.icsi.mmtel"
P-Preferred-Identity: <sip:+15551234567@ims.example.com>
P-Access-Network-Info: 3GPP-E-UTRAN-FDD; utran-cell-id-3gpp=00101ABCD1234567
Accept-Contact: *;+g.3gpp.icsi-ref="urn%3Aurn-7%3A3gpp-service.ims.icsi.mmtel"
Supported: 100rel, precondition, timer
Require: sec-agree
Proxy-Require: sec-agree
Security-Verify: ipsec-3gpp; alg=hmac-sha-1-96; spi-c=1111; spi-s=2222; port-c=5064; port-s=5066
Session-Expires: 1800
Content-Type: application/sdp
v=0
o=- 1 1 IN IP6 2001:db8::10
s=-
c=IN IP6 2001:db8::10
t=0 0
m=audio 40000 RTP/AVP 116 107 97 118
b=AS:49
a=rtpmap:116 EVS/16000
a=fmtp:116 br=5.9-24.4; bw=nb-swb
a=rtpmap:107 AMR-WB/16000
a=fmtp:107 mode-change-capability=2; max-red=0
a=rtpmap:97 AMR/8000
a=rtpmap:118 telephone-event/16000
a=ptime:20
a=maxptime:240
a=sendrecv
a=curr:qos local none
a=curr:qos remote none
a=des:qos mandatory local sendrecv
a=des:qos optional remote sendrecv
Voice codecs
| Codec | Audio bandwidth | Bit rates | Notes |
|---|---|---|---|
| AMR-NB (AMR) | Narrowband, 300 to 3400 Hz, 8 kHz sampling | 4.75 to 12.2 kbit/s (8 modes) | Legacy 2G/3G quality; mandatory fallback |
| AMR-WB (G.722.2) | Wideband, 50 to 7000 Hz, 16 kHz sampling | 6.6 to 23.85 kbit/s (9 modes), 12.65 typical | "HD Voice"; mandatory for VoLTE (GSMA IR.92) |
| EVS (Enhanced Voice Services) | NB, WB, super-wideband (up to 16 kHz), fullband (up to 20 kHz) | 5.9 to 128 kbit/s | "HD Voice+"; channel-aware mode at 13.2 kbit/s adds redundancy for lossy radio; an AMR-WB interoperable mode exists |
- RTP carries 20 ms voice frames over UDP (so 50 packets per second). RTCP sends reception reports (loss, jitter, round-trip time) roughly every 5 seconds; some operators disable RTCP during active speech and rely on RTP inactivity timers.
- AMR payload format: "octet-aligned" and "bandwidth-efficient" modes are not compatible. If the offer and answer disagree (the
octet-align=1fmtp), the call connects but audio is garbled or silent. - DTMF is sent as RTP
telephone-eventpackets (RFC 4733), not as audio tones. - ROHC (Robust Header Compression) in PDCP compresses the 40 to 60 byte IP/UDP/RTP header to a few bytes, which is essential for voice capacity and cell-edge coverage. SPS, TTI bundling, C-DRX and RLC UM are covered under voice quality and radio optimizations.
Early media, cancelling and ending calls
- Early media is media sent before answer, such as operator ringback tones or announcements ("the number you have dialled..."). It is signalled with SDP in a 18x response and authorised with the
P-Early-Mediaheader. If the UE plays local ringback while the network also sends early media, the user hears both, or hears nothing if the UE mutes the stream wrongly. - CANCEL aborts an INVITE that has not yet received a final response (caller hangs up while ringing). The callee answers the INVITE with
487 Request Terminated. - BYE ends an established dialog (after 200 OK and ACK). Using BYE before answer, or CANCEL after answer, is a classic bug.
- Session timers (RFC 4028,
Session-Expires) make the endpoints refresh the dialog with re-INVITE or UPDATE periodically; if refresh fails, the call is torn down, so stuck calls do not hold resources forever. - RTP inactivity timer: if no RTP or RTCP arrives for a configured period (often 10 to 20 seconds), the UE or network ends the call with a BYE carrying a
Reasonheader such as "RTP timeout".
You call a friend to invite them to dinner (INVITE with your menu preferences, the SDP offer). They reply "I would like the fish" (183 with the SDP answer) and you confirm you heard them (PRACK). Before telling them to leave home, both of you book your own table at the restaurant (each side's QCI 1 bearer), and you phone back to say "my table is booked" (UPDATE). Only then does your friend's doorbell ring (180 Ringing), they say yes (200 OK) and you confirm (ACK). This avoids the friend showing up to find no table, which in the real system is a call that is answered but has no audio path.
MMTel supplementary services and the Ut/XCAP interface
MMTel (Multimedia Telephony, 3GPP TS 24.173) is the IMS voice/video service. Its supplementary services run on the TAS, which the S-CSCF invokes through iFC. There are two control surfaces:
In-call control: SIP
- Hold and resume: re-INVITE or UPDATE with SDP direction
- Transfer and conference: REFER
- Caller ID: P-Asserted-Identity and Privacy headers
- Happens during the dialog
Settings: Ut interface (XCAP over HTTP)
- Call forwarding rules, barring, CLIR default, call waiting (network-based)
- Stored as XML documents on the TAS/XDMS
- Read with HTTP GET, changed with HTTP PUT
- Happens outside any call, from the phone's call settings menu
| Service | How it works in IMS |
|---|---|
| Hold / Resume | re-INVITE (or UPDATE) with a=sendonly (holding party still sends music/nothing) or a=inactive; the held side answers a=recvonly or inactive. Resume sends a=sendrecv. The TAS/MRF may play hold music. |
| Call Waiting (CW) | A second INVITE arrives during an active call; the UE (terminal-based CW) or TAS (network-based CW) decides to alert. User can hold the first call and answer the second. 486 Busy Here is returned if CW is off. |
| Conference (CONF) | The UE sends INVITE to the conference factory URI on the TAS; the MRF mixes media. The UE then sends REFER for each existing call so the conference server invites the participants. The UE can SUBSCRIBE to the conference event package to see the participant list. |
| Call Forwarding (CFU, CFB, CFNRy, CFNRc) | Unconditional, on Busy, on No Reply (timer), on Not Reachable. Configured via XCAP; enforced by the TAS, which retargets the INVITE and adds History-Info or Diversion headers. |
| CLIP / CLIR | Caller-ID presentation or restriction. Identity is carried in P-Asserted-Identity; CLIR adds Privacy: id (and From: anonymous) so the terminating side withholds the number. |
| COLP / COLR | Connected line presentation/restriction: showing the answering party's identity back to the caller. |
| ECT (Explicit Call Transfer) | Transferor sends REFER with Refer-To the target (blind), or with a Replaces parameter (consultative); the transferee INVITEs the target. |
| Barring (ICB, OCB, BAOC, BAIC, roaming variants) | Incoming and outgoing call barring, XCAP-configured; the TAS rejects matching calls (often with 603 or 403). |
| USSD over IMS (USSI) | USSD strings sent in SIP INVITE/INFO with an XML body; if the network does not support USSI, the device falls back to CS for USSD. |
Ut / XCAP in practice
- The UE sends HTTP(S) requests to the XCAP server (the TAS or an XDMS) at an operator FQDN such as
xcap.ims.mnc001.mcc001.pub.3gppnetwork.org. - Authentication is usually GBA (Generic Bootstrapping Architecture: the UE bootstraps with a BSF using AKA, then gets a key for the application server, the NAF) or HTTP digest.
- Many operators route Ut over the internet APN or a dedicated
xcapAPN, not the IMS APN. So if mobile data is off, call forwarding settings can fail even though VoLTE calls work; operators fix this with carrier config options that allow Ut when data is disabled.
PUT /simservs.ngn.etsi.org/users/sip:+15551234567@ims.example.com/simservs.xml/~~/simservs/communication-diversion HTTP/1.1
Host: xcap.ims.example.com
Content-Type: application/xcap-el+xml
<communication-diversion active="true">
<cp:ruleset>
<cp:rule id="cfb">
<cp:conditions><busy/></cp:conditions>
<cp:actions><forward-to><target>tel:+15550001111</target></forward-to></cp:actions>
</cp:rule>
</cp:ruleset>
</communication-diversion>
The TAS is a personal assistant. Standing instructions like "if I am busy, send callers to my deputy" are written on a sheet you update from your desk (XCAP over Ut). During a call you give live instructions like "put this caller on hold" or "bring my colleague into this call" (re-INVITE and REFER). The S-CSCF is the receptionist who knows that every call for you must first pass by your assistant, because your profile (iFC) says so.
SRVCC and its variants: keeping the call when LTE runs out
SRVCC (Single Radio Voice Call Continuity, TS 23.216) moves an active IMS voice call from LTE (packet-switched) to 2G/3G (circuit-switched) when the UE leaves LTE coverage and there is no VoLTE-capable target. "Single radio" means the UE cannot be connected to LTE and 2G/3G at the same time, so the network must coordinate the switch.
Prerequisites
- The UE indicates SRVCC capability in its attach (MS Network Capability) and the network supports it.
- The HSS gives the MME the STN-SR (Session Transfer Number for SRVCC, which routes to the SCC-AS or ATCF) and the C-MSISDN (correlation MSISDN).
- The MSC server is "enhanced for SRVCC" and connected to the MME over the Sv interface.
- The IMS session was anchored at the SCC-AS when it was set up.
Basic SRVCC flow (LTE to 2G/3G)
- Trigger The UE's measurement reports show LTE is weak and a 2G/3G neighbour is good. The eNB, seeing an active QCI 1 bearer, sends Handover Required with an SRVCC indication to the MME.
- Split voice from data The MME separates the voice bearer (QCI 1) from other bearers and sends a PS to CS Request over Sv to the MSC server, including STN-SR and C-MSISDN.
- Prepare CS target The MSC server prepares radio resources in the target 2G/3G cell (relocation/handover request to the target MSC/BSC/RNC).
- Session transfer in IMS The MSC server sends an INVITE to the STN-SR. The SCC-AS correlates it with the existing session (via C-MSISDN) and updates the remote leg with a re-INVITE so the far end now sends media to the CS media gateway. The far end sees only a media change, not a new call.
- Handover command The MSC server answers the MME with PS to CS Response; the MME sends the handover command via the eNB; the UE retunes its single radio to 2G/3G.
- Completion The call continues in CS. Non-voice bearers are handed over to 3G PS (if the target supports DTM/PS handover) or suspended. The old IMS access leg is released.
UE eNB MME MSC server SCC-AS (IMS) Far end │ meas rpt │ │ │ │ │ │──────────►│ HO Req │ │ │ │ │ │ (SRVCC) ─►│ PS to CS Req ──►│ (Sv) │ │ │ │ │ │ prepare 2G/3G target cell │ │ │ │ │ INVITE STN-SR ──►│ │ │ │ │ │ │ re-INVITE ──────►│ │ │ │ │ │ (media now to MGW) │ │ │◄─ PS to CS Resp │ │◄──── 200 OK ─────│ │◄── HO Command (to 2G/3G) ──│ │ │ │ │═══ UE retunes to 2G/3G; voice continues over CS via MSC/MGW ═══════════════════│
The SRVCC family
| Variant | 3GPP release | What it adds |
|---|---|---|
| SRVCC | Rel-8 | Active single voice call, LTE to 2G/3G CS. Remote leg updated by the SCC-AS in the home network, so the voice gap can be long when roaming. |
| eSRVCC (enhanced) | Rel-10 | Adds the ATCF/ATGW in the serving network. Media is anchored locally at the ATGW, the STN-SR points to the ATCF, and only the local leg is switched; the remote party is not re-INVITEd. Voice interruption drops to typically under 300 ms. |
| aSRVCC (alerting phase) | Rel-10 | Transfers a call that is still ringing (180 sent or received, not yet answered). |
| bSRVCC (before-alerting phase) | Rel-11 | Transfers a call that is still being set up, before any 180 (for example, after 183 or during precondition). |
| Mid-call SRVCC | Rel-10 | Transfers held calls and conference state, not just the one active call. |
| vSRVCC | Rel-10 | Transfers a video call to a CS video call (3G-324M). |
| rSRVCC (reverse) | Rel-11 | Moves a CS call back from 3G to LTE/IMS. |
| 5G-SRVCC | Rel-16 | NR (VoNR) directly to 3G CS. |
How SRVCC compares with the other voice continuity procedures
| Procedure | When | From / to | Domain after |
|---|---|---|---|
| SRVCC | During an active call | LTE (or NR) to 2G/3G | CS |
| CSFB | At call setup, UE has no VoLTE | LTE to 2G/3G before the call | CS (see Call flows) |
| EPS fallback | At call setup on 5G SA without VoNR | NR to LTE | IMS (becomes VoLTE; see 5G NR) |
| VoLTE / VoWiFi handover | During an active call | LTE to Wi-Fi or back | IMS (stays PS) |
| PS handover (X2/S1, Xn/N2) | During an active call | LTE cell to LTE cell, NR to NR, NR to LTE | IMS |
You are travelling on a high-speed train (the VoLTE call) and the line ends before your destination. A coordinator (the MME) phones ahead to the bus depot (the MSC server) to hold a seat for you, and your travel agent (the SCC-AS) updates your friend waiting at the destination with the new arrival point. You step off the train and straight onto the bus (the UE retunes its single radio to 2G/3G). With eSRVCC, the change of vehicle happens at a local interchange (the ATCF/ATGW) so the agent at home does not need to be called at all, making the switch much faster. In the real system, the far end never sees a new call, only a media update or nothing at all.
VoWiFi (Wi-Fi Calling) and LTE to Wi-Fi handover
VoWiFi is the same IMS voice service reached over a Wi-Fi access leg instead of cellular. The IMS core, P-CSCF, SIP signaling and call ladder are identical; only the path from the UE to the IMS APN changes. Understanding that single fact makes both the architecture and the handover easy to explain.
Architecture
UNTRUSTED Wi-Fi (home router, cafe, hotel: the common case)
UE ──Wi-Fi AP──► Internet ──SWu──► ePDG ──S2b──► P-GW ──► P-CSCF / IMS core
│ (IKEv2/IPsec, (GTPv2 or
│ EAP-AKA auth) PMIPv6)
│ │
│ └──SWm──► 3GPP AAA ──SWx──► HSS
└── all IMS SIP and RTP travel INSIDE the IPsec tunnel to the ePDG
5G equivalent: UE ──NWu (IPsec)──► N3IWF ──N2/N3──► AMF, UPF ──► IMS
Trusted WLAN: UE ──► TWAG ──S2a──► P-GW ──► IMS (operator-controlled Wi-Fi, no ePDG)
ePDG
Terminates the IKEv2/IPsec tunnel from the UE over SWu, authenticates the UE with EAP-AKA via the 3GPP AAA server, and connects to the P-GW over S2b. Found through DNS using an operator FQDN such as epdg.epc.mnc001.mcc001.pub.3gppnetwork.org (or a configured address).
P-GW (or SMF+UPF in 5G)
The mobility anchor. It owns the IMS PDN connection and keeps the same IMS IP address whether the UE is on LTE or Wi-Fi. This anchoring is what makes seamless handover possible.
P-CSCF and IMS
Unchanged. The UE registers and places calls exactly as in VoLTE. P-Access-Network-Info changes to an IEEE 802.11 value so the network knows the access type (important for charging and emergency).
Bringing up Wi-Fi calling
- Wi-Fi connected and WFC enabled The user has Wi-Fi calling turned on, the operator has enabled it (carrier config and entitlement), and an emergency address may need to be registered first (in the US, E911 address provisioning via an entitlement server).
- ePDG selection The UE resolves the ePDG FQDN by DNS (possibly choosing a visited-country ePDG when roaming, based on policy).
- IKEv2 tunnel setup IKE_SA_INIT (Diffie-Hellman, nonces), then IKE_AUTH carrying the IMSI-based identity and the IMS APN. The ePDG runs EAP-AKA with the AAA/HSS, using the same SIM credentials. The IKEv2 configuration payload returns the UE's inner IP address and the P-CSCF address (instead of PCO).
- S2b session The ePDG creates a GTP session to the P-GW for the IMS APN, which allocates the IP address.
- IMS registration The same IMS-AKA REGISTER runs inside the IPsec tunnel, so there are two layers of IPsec: the outer SWu tunnel and the inner Gm SA to the P-CSCF.
- Keep-alives IKEv2 dead-peer-detection and NAT-keepalive packets keep the tunnel open through home routers (NAT traversal uses UDP port 4500).
VoLTE versus VoWiFi
| Aspect | VoLTE / VoNR | VoWiFi |
|---|---|---|
| Access leg | LTE or NR radio (eNB/gNB) | Any Wi-Fi, then ePDG (N3IWF in 5G) |
| Security to the core | NAS/AS ciphering, plus IPsec to the P-CSCF | IKEv2/IPsec tunnel to the ePDG, plus IPsec to the P-CSCF |
| Access authentication | EPS-AKA (attach) or 5G-AKA | EAP-AKA in IKEv2 (EAP-5G/NAS for N3IWF) |
| P-CSCF discovery | PCO in PDN/PDU setup | IKEv2 configuration payload |
| Voice QoS | GBR dedicated bearer (QCI 1 / 5QI 1) | No guaranteed bearer; DSCP marking (EF, 46 for voice) and Wi-Fi WMM voice queue; best effort across the internet |
| SIP and call ladder | Identical: same IMS core, same INVITE, 183, PRACK, UPDATE, 180, 200 (preconditions are often relaxed over Wi-Fi because there is no bearer to reserve) | |
| IP anchor | Same P-GW (or SMF/UPF), so the same IMS IP address can be kept across both accesses | |
Handover 1: VoLTE to VoWiFi (walking indoors, Wi-Fi preferred)
Active VoLTE call on QCI 1 over LTE
1 │ UE sees usable Wi-Fi (RSSI, quality above threshold) and policy prefers Wi-Fi
2 │ UE brings up the IKEv2/IPsec tunnel to the ePDG (EAP-AKA)
3 │ IKE_AUTH carries the IMS APN plus the current IP address (handover indication)
4 │ ePDG sends Create Session with the Handover Indication to the SAME P-GW
5 │ P-GW keeps the SAME IMS IP ADDRESS and switches the downlink path to S2b
6 │ Because the IP and SIP dialog survive, the call stays up
7 │ UE sends re-REGISTER (new P-Access-Network-Info) and, if needed, re-INVITE/UPDATE
8 │ LTE QCI 1 dedicated bearer is released; the IMS PDN now lives on Wi-Fi
│═══════ call continues with no drop (ideally make-before-break) ═══════
Handover 2: VoWiFi to VoLTE (Wi-Fi fades, leaving the building)
Active VoWiFi call through the ePDG IPsec tunnel
1 │ UE sees Wi-Fi degrading (RSSI, packet loss, jitter) and LTE is good with IMS VoPS
2 │ UE sends PDN Connectivity Request (Request Type = HANDOVER) for the IMS APN
│ (or a Handover Attach if it was not attached to LTE)
3 │ MME selects the SAME P-GW; P-GW keeps the SAME IMS IP ADDRESS
4 │ P-GW/PCRF set up the QCI 1 dedicated bearer on LTE for the ongoing call
5 │ UE re-REGISTERs / sends re-INVITE or UPDATE as needed; media now over LTE
6 │ ePDG tunnel is torn down
│═══════ call continues over cellular with no drop ═══════
What decides the handover
- WFC preference modes: Wi-Fi preferred, cellular preferred, Wi-Fi only (some operators also have "never use cellular while roaming").
- Thresholds: Wi-Fi RSSI, packet loss, jitter and round-trip time versus LTE RSRP/RSRQ, with hysteresis to avoid ping-pong.
- Operator policy: ANDSF in LTE, URSP in 5G, carrier config, plus roaming and emergency rules.
- Who decides: the UE (unlike SRVCC, which the network commands). On Android, the QualifiedNetworksService (QNS) decides whether the IMS APN should be on WWAN (cellular) or WLAN (Wi-Fi), and the IWLAN data service brings up the ePDG tunnel.
Why it is seamless, and what breaks it
- Make-before-break: the new access leg is built before the old one is released, so there is no media gap.
- IP preservation: the handover indication tells the P-GW to reuse the existing session and IP address.
- Breaks if: the new PDN is created as an initial request instead of a handover, so the UE gets a new IP address and the SIP dialog (bound to the old Contact) dies; the target P-GW is different; the IPsec tunnel is too slow to come up before LTE is lost; or the UE is not registered in time on the new access.
- Other VoWiFi issues: NAT timeouts on home routers killing the tunnel, MTU problems because of double IPsec overhead (fragmented SIP), captive portals, and Wi-Fi power save causing jitter.
Imagine your house address never changes, but the postal van can reach you by the main road (LTE) or by a private tunnel through the neighbour's garden (Wi-Fi through the ePDG). The central sorting office (the P-GW) holds your address and simply switches which route it sends your letters along. Your pen pals (the far end and the IMS core) keep writing to the same address and never notice the change. If instead you were given a brand-new address (an initial PDN with a new IP), every conversation in progress would be lost, which is exactly why a VoWiFi handover without the handover indication drops the call.
ViLTE, RCS and IMS emergency calls
ViLTE (video over LTE) and video over NR
- Same SIP flow as VoLTE, but the SDP has a second
m=videoline (H.264, increasingly H.265/HEVC) alongsidem=audio. - Video uses its own dedicated bearer: QCI 2 (GBR, conversational video) in the standard model; some operators use non-GBR QCI 7 or 8 instead. Audio stays on QCI 1, so voice quality is protected even when video struggles.
- Upgrade and downgrade between voice and video are re-INVITEs that add or remove the video m-line (or set its port to 0). The other party can accept or decline the upgrade.
- RTCP feedback (AVPF) carries picture loss indications (PLI), full intra requests (FIR) and bit-rate adaptation (TMMBR), because video is sensitive to loss.
- CVO (Coordination of Video Orientation) sends the camera rotation in an RTP header extension so the receiver can rotate the picture.
RCS (Rich Communication Services)
- The GSMA standard for rich messaging over IMS, marketed as the SMS successor ("Universal Profile"): chat, group chat, file transfer, read receipts, typing indicators, business messaging (chatbots, also called MaaP).
- Chat sessions use MSRP (Message Session Relay Protocol) set up with a SIP INVITE; short messages can use pager-mode SIP
MESSAGE. - File transfer uses HTTP upload to a content server, with a link sent in the chat.
- Capability discovery uses SIP
OPTIONSexchanges or presence (SUBSCRIBE/NOTIFY) with feature tags, so the client knows whether the other user supports RCS. - Configuration comes from an HTTP auto-configuration server (ACS). The RCS client can share the IMS registration of the voice stack (single registration) or register separately.
- On Android, RCS is exposed through
RcsFeatureof theImsServiceand APIs such asImsRcsManager.
IMS emergency calls (E-911, 112)
- Detection The UE recognises the dialled number as an emergency number (from the SIM, the network's emergency number list in NAS, carrier config, or the standard 112/911).
- Emergency PDN / PDU session The UE sets up a separate emergency connection (PDN Connectivity Request with request type "emergency"; APN often
sos). The network gives it high priority (high ARP) and, depending on country rules, allows it even without a valid SIM or subscription (emergency attach). - Emergency registration The UE performs an emergency REGISTER (Contact with the
sosparameter). If the UE cannot register (for example, no SIM or roaming restriction), many networks accept an anonymous emergency call without registration. - Emergency INVITE The Request-URI is
urn:service:sos(or a subtype such asurn:service:sos.police). The P-CSCF recognises it and routes it to the E-CSCF, not to the home S-CSCF, so it works when roaming. - Location and PSAP routing The E-CSCF asks the LRF for location and the correct PSAP (Public Safety Answering Point). Location comes from the
P-Access-Network-Infocell ID, aGeolocationheader with a PIDF-LO body, the GMLC (network positioning), or, over Wi-Fi, the registered civic address. - Network-detected emergency If the network recognises a number as emergency but the UE did not, it can answer
380 Alternative Service, telling the UE to redial as an emergency call. - Fallback If IMS emergency is not possible (no IMS emergency support in the cell, or the emergency PDN fails), the UE uses CS emergency (CSFB to 2G/3G) or tries another access. Over Wi-Fi, operators may require emergency calls to prefer cellular when available.
- Callback The PSAP can call back; the UE enters an emergency callback mode for a period so the callback is not blocked by barring or Wi-Fi-only preferences.
An emergency call is like an ambulance: it gets its own lane that normal traffic cannot block (a separate emergency PDN with top priority), it does not need to show a toll pass (emergency attach and anonymous calls without a subscription), and instead of going to your home hospital it goes to the nearest one (the E-CSCF routes to the local PSAP, not your home S-CSCF). The satnav location (cell ID, GPS, or registered Wi-Fi address) tells the dispatcher where to send help.
urn:service:sos, E-CSCF, location, high ARP), "Can you make an emergency call with no SIM?" (yes in many countries, via emergency attach and anonymous IMS emergency), "What is 380 Alternative Service?", and "How does location work over Wi-Fi?" (a pre-registered civic address plus Wi-Fi/AP information). For RCS, know MSRP, OPTIONS-based capability discovery and HTTP file transfer.SIP and SDP internals
SIP (RFC 3261) is a text-based, HTTP-like request/response protocol that sets up, modifies and ends sessions. It does not carry media itself. SDP (RFC 4566) is the body inside SIP that describes the media: IP address, ports, codecs and direction. SIP runs over UDP, TCP or TLS on port 5060 (5061 for TLS); in IMS the UE uses the protected ports negotiated for the IPsec SAs. Per RFC 3261, when a request is larger than about 1300 bytes (within 200 bytes of the path MTU) the UE should use TCP instead of UDP to avoid fragmentation.
SIP methods
| Method | Purpose |
|---|---|
REGISTER | Bind a Contact (current IP and port) to a public identity; also used for re-registration and de-registration (Expires: 0). |
INVITE | Create a session (dialog). A re-INVITE inside an existing dialog modifies it (hold, codec change, video upgrade, session refresh). |
ACK | Confirms a final response to INVITE; completes the three-way handshake. |
PRACK | Reliable acknowledgement of a provisional (1xx) response sent with 100rel (RFC 3262). |
UPDATE | Modify session parameters, including before the call is answered (RFC 3311). Used for preconditions and session refresh. |
BYE | End an established dialog. |
CANCEL | Abort a pending INVITE that has no final response yet. |
REFER | Ask the recipient to contact a third party (transfer, conference). |
SUBSCRIBE / NOTIFY | Event packages: reg, conference, presence, dialog, message-waiting. |
MESSAGE | Pager-mode instant message; also carries SMS over IP (3GPP SMS in the body). |
OPTIONS | Capability query (RCS capability discovery) and keep-alive. |
INFO | Mid-dialog application information (for example USSI, some DTMF implementations). |
SIP response codes
| Code | Meaning | Typical IMS cause |
|---|---|---|
| 100 Trying | Request received, processing | Hop-by-hop; stops INVITE retransmission |
| 180 Ringing | Callee is being alerted | Sent after preconditions are met |
| 181 Call Is Being Forwarded | Call diverted | TAS applied call forwarding |
| 182 Queued | Call queued | Call waiting or queue |
| 183 Session Progress | Progress information, usually with SDP | Carries the SDP answer and drives preconditions; early media |
| 200 OK | Success | Registration accepted, call answered, PRACK/UPDATE/BYE confirmed |
| 202 Accepted | Accepted for processing | Response to REFER or SUBSCRIBE |
| 301 / 302 | Moved permanently / temporarily | Redirect (rare inside IMS) |
| 380 Alternative Service | Try something else | Network detected an emergency number: redial as emergency |
| 400 Bad Request | Malformed request | Syntax or header error, often after a software change |
| 401 Unauthorized | Authentication needed | Normal AKA challenge on REGISTER |
| 403 Forbidden | Refused, do not retry with same credentials | Not provisioned for IMS/VoLTE, barred, roaming not allowed |
| 404 Not Found | User does not exist | Wrong number/URI, unknown IMPU |
| 407 Proxy Authentication Required | Proxy wants credentials | Rare in 3GPP IMS |
| 408 Request Timeout | No timely response | Remote unreachable, paging failure, transport loss |
| 415 Unsupported Media Type | Body type not supported | Wrong Content-Type (for example, an XML body not understood) |
| 420 Bad Extension | Required option not supported | Peer does not support something in Require |
| 421 Extension Required | Peer requires an extension | For example, 100rel or precondition missing |
| 480 Temporarily Unavailable | Callee not reachable now | Not registered, device off |
| 481 Call/Transaction Does Not Exist | Unknown dialog | BYE or re-INVITE for a dialog the peer already dropped |
| 486 Busy Here | Callee busy | User busy, call waiting off |
| 487 Request Terminated | INVITE cancelled | Caller sent CANCEL before answer |
| 488 Not Acceptable Here | SDP not acceptable | Codec, media or precondition mismatch |
| 491 Request Pending | Glare | Both sides sent re-INVITE at once; retry after a random delay |
| 494 Security Agreement Required | sec-agree needed | Security-Client missing or no common algorithm |
| 500 Server Internal Error | Server failure | Core node fault |
| 503 Service Unavailable | Temporarily overloaded | Congestion or maintenance; honour Retry-After |
| 504 Server Time-out | Upstream server did not answer | HSS or next hop not responding |
| 580 Precondition Failure | Preconditions could not be met | Dedicated bearer could not be reserved |
| 600 Busy Everywhere | Busy on all devices | Global busy |
| 603 Decline | Callee rejected | User pressed reject, or barring |
Core SIP headers
| Header | What it does |
|---|---|
Via | Records the path the request took so responses return the same way; the branch parameter identifies the transaction. |
Route / Record-Route | A proxy that wants to stay on the path adds Record-Route; endpoints turn these into Route headers for later in-dialog requests. |
From / To | Logical caller and callee, each with a tag that identifies the dialog participant. |
Call-ID | Unique identifier for the call; with the two tags it identifies the dialog. |
CSeq | Sequence number plus method; orders requests and matches responses. |
Contact | Where to reach this UA directly; carries feature tags and +sip.instance. |
Max-Forwards | Hop limit to stop loops. |
Supported / Require / Proxy-Require | Extension negotiation (100rel, precondition, timer, sec-agree, gruu). |
RSeq / RAck | Sequence numbers for reliable provisional responses and their PRACK. |
Session-Expires / Min-SE | Session timer values. |
Reason | Why a request (for example, BYE or CANCEL) was sent; may carry a Q.850 cause. |
IMS-specific (P-) headers
| Header | What it does |
|---|---|
P-Preferred-Identity / P-Asserted-Identity | The UE suggests which IMPU to use; the P-CSCF replaces it with the network-verified identity used for caller ID. |
P-Access-Network-Info (PANI) | Access type and cell ID (or Wi-Fi info). Used for charging, emergency location and services. |
P-Visited-Network-ID | Tells the home network which visited network the UE is in. |
Path | Added at registration so terminating requests go back through the same P-CSCF. |
Service-Route | Returned in 200 OK to REGISTER; the UE uses it as the Route for originating requests (to its S-CSCF). |
P-Associated-URI | The IMPUs registered for this user. |
Security-Client / Security-Server / Security-Verify | IPsec security agreement (RFC 3329): offered algorithms, SPIs and ports. |
P-Charging-Vector / P-Charging-Function-Addresses | Charging correlation ID (ICID) and charging server addresses. |
P-Early-Media | Authorises and gates early media. |
Privacy | Requests that identity (and other headers) be withheld: CLIR. |
History-Info / Diversion | Records call forwarding hops. |
Accept-Contact / P-Asserted-Service | Route to UAs with a feature tag; identifies the service (MMTel ICSI). |
Transactions versus dialogs
- A transaction is one request plus all its responses, matched by the top Via
branchand the CSeq method. INVITE transactions end with ACK (for non-2xx the ACK is part of the transaction; for 2xx the ACK is a separate end-to-end request). - A dialog is the long-lived peer relationship between two UAs, identified by
Call-IDplus the From tag plus the To tag. It is created by a 2xx (or a reliable 18x creating an early dialog) to INVITE, spans many transactions (PRACK, UPDATE, re-INVITE) and ends with BYE. - One INVITE can create several early dialogs if it forks to several devices (different To tags); only one becomes confirmed when answered.
SIP timers
- T1 is the round-trip estimate: 500 ms in RFC 3261, but 3GPP TS 24.229 recommends 2 s for the UE over radio (with T2 = 16 s, T4 = 17 s).
- Over UDP, requests are retransmitted at T1, 2xT1, 4xT1 and so on until a response arrives.
- Timer B (INVITE timeout) and Timer F (non-INVITE timeout) are 64 x T1: 32 s by default, 128 s with the IMS T1 of 2 s. When they fire, the UE treats the transaction as failed (like a 408).
SDP offer/answer
- RFC 3264: the offerer lists media streams, codecs (payload types), addresses and ports; the answerer accepts a subset (in VoLTE, one audio codec) and supplies its own address. In VoLTE the offer is in the INVITE and the answer in the 183. A UA may also send an INVITE with no SDP, in which case the offer comes in the response and the answer in the ACK (or PRACK).
- Only one offer/answer can be outstanding at a time; a new offer before the previous one is answered causes 491 or 500.
- Key SDP lines:
c=connection address,m=media line with port and payload types,a=rtpmapcodec mapping,a=fmtpcodec parameters,a=ptime,b=ASbandwidth, direction attributes, precondition attributes. - Direction attributes:
sendrecv(normal),sendonly(I only send: I am holding),recvonly(I only receive: I am held),inactive(no media either way). - Port 0 on an m-line means that stream is rejected or removed (for example, declining a video upgrade).
SIP is like registered post between two offices. Each individual letter and its receipts form a transaction (identified by a tracking number, the Via branch and CSeq). The ongoing correspondence between two people about one project is the dialog (identified by the project reference, the Call-ID, plus each person's signature, the tags). The attachment describing the meeting room, time and language is the SDP. Via headers are the stamps each post office adds so replies find their way back, and Record-Route is a post office asking "send all future letters in this project through me".
QoS, bearers and policy control (PCC)
Voice over IP sounds good only if packets arrive on time. In LTE and 5G the network guarantees this with bearers (LTE) or QoS flows (5G), set up on demand by the policy framework. This is what makes VoLTE deterministic compared with over-the-top VoIP apps.
EPS bearer concepts
- Default bearer: created with each PDN connection, always on while the PDN exists, always non-GBR. It catches all traffic not matched by a dedicated bearer. The IMS APN's default bearer uses QCI 5.
- Dedicated bearer: created on demand for specific flows; may be GBR. The voice RTP stream uses a QCI 1 GBR dedicated bearer.
- TFT (Traffic Flow Template): packet filters (source and destination IP, ports, protocol) that map flows onto a bearer, in both uplink (the UE applies them) and downlink (the P-GW applies them).
- GBR / MBR: guaranteed and maximum bit rate for GBR bearers (for AMR-WB 23.85 with overhead, roughly 40 to 50 kbit/s each way).
- ARP (Allocation and Retention Priority): decides who gets admitted, and who can be pre-empted, under congestion. Emergency and priority calls get high ARP. ARP does not affect packet scheduling; QCI does.
- AMBR (Aggregate Maximum Bit Rate) limits the total of all non-GBR bearers per APN or per UE.
Standardised QCI table (LTE, TS 23.203)
| QCI | Type | Priority | Packet delay budget | Packet error loss rate | Example service |
|---|---|---|---|---|---|
| 1 | GBR | 2 | 100 ms | 10-2 | Conversational voice (VoLTE) |
| 2 | GBR | 4 | 150 ms | 10-3 | Conversational video (ViLTE) |
| 3 | GBR | 3 | 50 ms | 10-3 | Real-time gaming, V2X |
| 4 | GBR | 5 | 300 ms | 10-6 | Buffered streaming video |
| 65 | GBR | 0.7 | 75 ms | 10-2 | Mission-critical push-to-talk voice |
| 66 | GBR | 2 | 100 ms | 10-2 | Non-mission-critical push-to-talk voice |
| 5 | Non-GBR | 1 | 100 ms | 10-6 | IMS signaling (SIP) |
| 6 | Non-GBR | 6 | 300 ms | 10-6 | Buffered video, TCP apps (premium) |
| 7 | Non-GBR | 7 | 100 ms | 10-3 | Voice, video, interactive gaming (non-GBR) |
| 8 | Non-GBR | 8 | 300 ms | 10-6 | TCP apps (premium subscribers) |
| 9 | Non-GBR | 9 | 300 ms | 10-6 | Default internet data |
Do not invert the two IMS QCIs. QCI 1 is conversational voice: a GBR dedicated bearer with a 100 ms delay budget and 10-2 loss. QCI 5 is IMS signalling on the default bearer of the IMS APN. Among the everyday QCI 1–9 set, QCI 5 has scheduling priority 1 (QCI 1 is priority 2) so SIP is not starved by other default or non-GBR traffic such as QCI 9 internet; that is high priority relative to other default bearers, not a claim that signalling is "more important than voice". Voice quality is protected by the GBR reservation. Mission-critical QCIs (65, 69) have even tighter priority numbers. In 5G the 5QI values 1, 2, 5 and 9 keep the same meaning (5QI 1 is still voice, 5QI 5 is still SIP), and 5G adds delay-critical GBR 5QIs (such as 82 to 86) for URLLC.
The PCC chain that creates the voice bearer
UE-A ──SIP 183 (SDP answer)──► P-CSCF
│ Rx AAR: media components (IPs, ports, codec, bandwidth)
▼
PCRF (LTE) / PCF (5G, via N5)
│ derives PCC rule: QCI 1, GBR/MBR, ARP, TFT filters
│ Gx RAR (LTE) / N7 (5G)
▼
P-GW (PCEF) / SMF ──► UPF
│ Create Bearer Request (LTE) / PDU Session Modification (5G)
▼
MME ──► eNB: E-RAB setup | AMF ──► gNB: QoS flow + DRB
│
▼
UE: Activate Dedicated EPS Bearer Context (with TFT)
eNB/gNB enforce GBR scheduling on the air interface
- The P-CSCF also asks the PCRF to notify it of events on the bearer (for example, bearer loss or access network change), so the IMS layer can react to a lost media path.
- At call end, the P-CSCF sends Rx STR (session termination), and the PCRF removes the rule; the dedicated bearer is deleted.
- Rx gating: the PCRF can open or close the media gate so RTP only flows after the call is authorised.
5G QoS model
- EPS bearers become QoS flows inside one PDU session, each marked with a QFI (QoS Flow Identifier) on the N3 GTP-U tunnel.
- The SDAP layer in the UE and gNB maps QoS flows onto data radio bearers (DRBs); several flows can share a DRB.
- The PCF (policy), SMF (session control) and UPF (packet marking and enforcement) replace the PCRF, P-GW control and P-GW user plane.
- VoNR uses 5QI 1 for voice and 5QI 5 for IMS signaling, mirroring LTE.
The default bearer is the normal motorway lane: always open, but traffic jams affect it. When a call starts, the traffic controller (PCRF/PCF), acting on a request from the event organiser (P-CSCF), opens a reserved bus lane (the QCI 1 GBR bearer) and posts signs saying which vehicles may use it (the TFT). The road police (eNB/gNB scheduler) enforce the lane's guaranteed speed. ARP is the rule for which vehicles are allowed to push others out of the lane when space runs out, such as ambulances first.
IMS on Android (brief)
On Android the SIP stack itself usually lives in the vendor's IMS implementation (in the modem or a vendor daemon); the framework talks to it through a stable API. The full class-by-class dial path, vendor splits and the IMS-to-CS fallback code are covered in Call flows.
| Component | Role |
|---|---|
ImsService | Vendor or carrier service that exposes IMS to the framework. Bound by ImsResolver in the phone process. |
MmTelFeature | The voice, video and SMS-over-IMS feature of the ImsService: creates call sessions (ImsCallSessionImplBase), reports capabilities. |
RcsFeature | The RCS feature: capability exchange, presence, messaging hooks. |
ImsRegistrationImplBase | Reports registration state and access technology (LTE, NR, IWLAN) to the framework. |
ImsConfigImplBase / ProvisioningManager | Provisioning items such as VoLTE, VoWiFi and video enablement. |
ImsManager / ImsMmTelManager | Framework and app-facing APIs (for example, register for IMS registration callbacks, set the Wi-Fi calling mode). |
ImsPhone / ImsPhoneCallTracker | Framework call objects for IMS calls; GsmCdmaPhone delegates to them when IMS can serve the call. |
ImsReasonInfo | Failure and disconnect reasons, often mapped from SIP codes. |
CarrierConfigManager | Per-carrier flags, for example KEY_CARRIER_VOLTE_AVAILABLE_BOOL and KEY_CARRIER_WFC_IMS_AVAILABLE_BOOL. |
| QualifiedNetworksService / IWLAN | Decides whether the IMS APN runs on cellular or Wi-Fi, and brings up the ePDG tunnel for VoWiFi. |
Dialer ─► Telecom ─► TelephonyConnectionService ─► GsmCdmaPhone.dial()
│ IMS registered and usable?
yes ◄─────────┴─────────► no
│ │
ImsPhone ─► ImsPhoneCallTracker GsmCdmaCallTracker ─► RIL (CS)
│
ImsService / MmTelFeature (vendor) ─► SIP INVITE ... RTP
The ImsService API is like a standard wall socket in a building: the building (the Android framework) is wired once, and any vendor can plug in its own appliance (its IMS stack) as long as it fits the socket shape (MmTelFeature, RcsFeature, registration and config interfaces). In the real system, this lets Google update the framework and vendors update their IMS stacks independently.
ImsRegistrationImplBase plus MmTel capability status reaching ImsPhone). Go to Call flows for the class-level trace.Debugging IMS: a practical playbook
Most IMS interview scenarios are debugging stories. The winning habit is to work layer by layer and align timestamps: radio (RRC), NAS (attach, PDN, bearers), IMS (SIP), media (RTP), and framework (Android telephony logs).
Tools and logs
- Modem logs: Qualcomm QXDM/QCAT/PCAT, MediaTek ELT; these include decoded NAS, RRC, SIP and RTP statistics.
- Wireshark or tshark on SIP, RTP, RTCP, Diameter (Rx, Cx, Gx), GTP and IKEv2 captures, from the device or the core.
- Android:
adb logcat -b radio,dumpsys telephony.registry,dumpsys carrier_config, the IMS service's dumpsys. - Network side: SBC/P-CSCF call traces, HSS and PCRF logs, operator KPI dashboards.
Symptom to root cause map
| Symptom | Most likely layers | First things to check |
|---|---|---|
| No VoLTE, never registers | Provisioning, PDN, P-CSCF | Carrier config and provisioning flags, IMS VoPS bit, IMS PDN setup and PCO, whether any REGISTER is sent |
| Registration rejected (403, 401 loop) | Operator provisioning, SIM, AKA | HSS profile, IMPI/IMPU values, AKA result, SQN resync, roaming permission |
| Call setup fails with 488 or 580 | SDP or QoS | Offered versus accepted codecs and fmtp, precondition lines, dedicated bearer creation (Rx/Gx failures) |
| One-way or no audio | Media path | SDP addresses and ports, which direction has no RTP, bearer TFT correctness, firewall/NAT, codec mode mismatch, hold state, audio routing |
| Call drops mid-call | Radio, bearer, timers | RLF or handover failure, SRVCC failure, bearer or PDN release, RTP inactivity timer, session-timer refresh failure, BYE Reason header |
| Long call setup time | Paging, preconditions, retransmissions | Paging delay on MT side, time from 183 to bearer setup, SIP retransmissions (T1), DNS or HSS latency |
| VoWiFi drops on leaving Wi-Fi | Handover | Handover indication in the PDN request, same IP kept, registration on the new access, thresholds and timing |
Debugging a failed call is like tracing a lost parcel: you check each depot scan in order (radio, NAS, SIP, RTP) and find the last place it was seen and the first place it was not. Asking "was it ever handed over?" (did the REGISTER or INVITE leave the device?) and "who signed for it?" (which node answered and with what code?) finds the fault faster than guessing.
Voice quality and radio optimizations
Interviewers who have shipped VoLTE often skip SIP and ask how the call actually sounds. Quality is a delay-loss-rate triangle: the GBR bearer buys a delay budget, the codec hides remaining loss, and a handful of radio features keep the uplink alive at the cell edge.
Mouth-to-ear delay and G.114
ITU-T G.114 recommends one-way mouth-to-ear delay under about 150 ms for users not to notice; 150 to 400 ms is acceptable with growing annoyance; above 400 ms conversation becomes difficult (talker overlap). The budget is spent on codec framing (typically 20 ms plus look-ahead), packetization, uplink and downlink air interface (including HARQ), backhaul and core, far-end jitter buffer, and playout. QCI 1 / 5QI 1's 100 ms packet delay budget is the network slice of that path, not the whole mouth-to-ear number.
Jitter buffer, PLC and MOS
- Jitter buffer absorbs packet delay variation so frames can be played at a steady 20 ms cadence. A deeper buffer hides more jitter but adds delay (and can push the call past the G.114 target). Adaptive jitter buffers grow when RTCP or arrival statistics show variance, and shrink when the path is stable. EVS channel-aware mode needs extra depth so the redundant copy can arrive.
- PLC (Packet Loss Concealment) is the decoder inventing a plausible frame when a packet never arrives: repetition, pitch-based interpolation, or comfort noise. It hides isolated losses; a burst still sounds robotic. Combined with HARQ on the air and (for EVS) partial redundancy, PLC is why voice can use RLC UM instead of waiting for ARQ.
- MOS (Mean Opinion Score) is a 1-to-5 listening-quality scale. Lab tests use real listeners; operators predict MOS with the ITU-T E-model (G.107 / G.107.1 for wideband): an R-factor from delay, loss, jitter, codec impairment and echo, then mapped to MOS. A typical VoLTE KPI bar is MOS around 4.0 or better on AMR-WB or EVS in good radio.
Rate adaptation: CMR and ANBR
- CMR (Codec Mode Request) is an in-band bit in the AMR or EVS payload telling the sender to change mode (bit rate). Either end, or a transcoder, can send it when loss or congestion appears.
- ANBR (Access Network Bitrate Recommendation, TS 26.114 / TS 36.331 and the NR equivalents) is the RAN telling the UE a recommended uplink or downlink bit rate for the voice flow, typically after the gNB/eNB can no longer honour the GBR (notification control). The UE then issues a CMR or a bitrate recommendation toward the far end so the codec steps down before the air interface starts dropping frames.
- Without adaptation, a cell-edge UE keeps sending 23.85 kbit/s AMR-WB into a fading uplink and the far end hears chopping. With CMR/ANBR the call stays intelligible at a lower mode.
Radio features that make VoLTE work
| Feature | What it does | Why voice needs it |
|---|---|---|
| ROHC | PDCP compresses the 40 to 60 byte IP/UDP/RTP header to a few bytes. | Without it, headers dominate a 20 ms AMR-WB packet and cell-edge uplink and capacity collapse. |
| SPS (semi-persistent scheduling) | The eNB issues a periodic uplink or downlink grant (usually every 20 ms) instead of a fresh DCI every TTI. | Voice is a 50 packet/s stream; SPS cuts PDCCH load and grant latency. |
| TTI bundling | The UE repeats the same uplink transport block across 4 TTIs with incremental redundancy. | Cell-edge uplink: more energy per packet without raising UE power beyond P-max. |
| C-DRX | Connected-mode DRX aligned to the 20 ms voice period (on-duration around each grant). | Saves battery between frames without missing SPS occasions or SIP on QCI 5. |
| RLC UM | Unacknowledged mode: no RLC ARQ, no in-order stall waiting for a missing PDU. | Late voice is useless voice. HARQ plus PLC plus CMR handle residual loss; RLC AM would add delay. |
On NR the same ideas appear with different names: ROHC and RLC UM stay; SPS becomes configured grant or SPS-like periodic grants; TTI bundling becomes PUSCH repetition or slot aggregation; C-DRX is still tuned to 20 ms frames. See 5G NR for VoNR radio and EPS fallback.
VoLTE versus VoNR
| Aspect | VoLTE | VoNR |
|---|---|---|
| Access and core | LTE eNB, EPC | NR gNB, 5GC SA (NSA still uses VoLTE on the LTE anchor) |
| QoS | QCI 1 dedicated EPS bearer | 5QI 1 QoS flow inside the IMS PDU session |
| Policy chain | P-CSCF, Rx, PCRF, Gx, P-GW | P-CSCF, N5, PCF, N7, SMF, N4, UPF |
| SIP ladder and IMS core | Same | Same (preconditions, PRACK, UPDATE) |
| Radio | SPS, TTI bundling, C-DRX, ROHC, RLC UM | Configured grant, PUSCH repetition, C-DRX, ROHC, RLC UM; shorter slots if higher SCS |
| When coverage ends | SRVCC to 2G/3G CS, or the call drops | EPS fallback at setup; VoNR-to-VoLTE handover in call; 5G-SRVCC is rare |
| MT idle behaviour | MME paging, then LTE RRC setup | AMF paging, or fast RRC_INACTIVE resume |
Voice-centric versus data-centric usage setting
This is a UE setting (TS 24.301 for EPS, TS 24.501 for 5GS), not the same thing as the network's IMS VoPS bit.
- Voice-centric UE: the user expects a phone. If the camped RAT cannot provide voice (IMS VoPS not indicated and CS fallback not usable), the UE disables that RAT for this PLMN and reselects to one that can (2G/3G from LTE, or EPS from 5GS). This is why a "good LTE" cell with no VoLTE and no CSFB still loses the UE to 3G.
- Data-centric UE: the user expects data. The UE stays on LTE or NR even when voice is unavailable; a dial may fail or leave the RAT only for that call.
- Voice domain preference (CS only, IMS PS only, CS preferred, IMS preferred) is a separate NAS parameter that chooses which voice domain to try first. Usage setting decides whether the UE is allowed to remain on a data-only RAT.
The jitter buffer is the interpreter waiting a beat so words arrive in order; wait too long and the conversation feels lagged (G.114). PLC is guessing a muffled syllable when one word is lost. CMR/ANBR is asking the other person to speak more slowly when the line fades, instead of shouting into static. ROHC is stripping the envelope so more of the airtime carries speech; SPS is a standing reservation every 20 ms so you do not raise your hand for every sentence; TTI bundling is repeating the same sentence four times at the cell edge; C-DRX is putting the handset down between sentences; RLC UM is refusing to stall the conversation until a missing word is re-sent. MOS is the listener's score after the call.
IMS roaming: S8HR versus local breakout
GSMA IR.65 and IR.92 describe two ways to keep IMS voice when the UE is in a visited PLMN. Do not call local breakout "the" standardised model. S8HR (S8 Home Routed) is the model most operators actually deploy, because the visited network only has to home-route the IMS APN over S8.
| Aspect | S8HR (home-routed) | LBO (local breakout) |
|---|---|---|
| P-GW / UPF and P-CSCF | Home network | Visited network |
| IMS signalling and media path | UE to visited RAN/S-GW, then S8 to home P-GW and home P-CSCF | Local P-CSCF; IBCF interconnect to the home S-CSCF; media can stay local |
| What the VPLMN must support | S8 for APN ims, plus QoS for QCI 5 and QCI 1 | Visited IMS (P-CSCF/SBC), IBCF/TrGW, roaming interconnect, often a local ATCF |
| Service control | Home S-CSCF and TAS, as if the UE were at home | Home S-CSCF still controls services; P-CSCF adds P-Visited-Network-ID |
| Typical deployment | The common live model | Specified, far less common for VoLTE |
S8HR drawbacks you should name
- Emergency: the P-CSCF is in the home country, so routing
urn:service:sosto the visited PSAP is awkward. Devices typically use CS emergency, an emergency APN with local breakout, or operator-specific S8HR emergency procedures. Interviewers treat "S8HR plus emergency" as a follow-up. - Lawful intercept: the visited operator sees GTP on S8, not clear SIP or easily isolated RTP. Home-country LI works; visited-country LI of the IMS session needs extra architecture or is simply incomplete.
- No local ATCF: eSRVCC wants the ATCF/ATGW in the serving network, close to the UE. S8HR puts the P-CSCF at home, so a local ATCF is not inserted. Roaming eSRVCC is typically unavailable; a basic SRVCC transfer through the home SCC-AS has a long media path and a large voice gap, and many VPLMNs do not offer it.
- Trombone delay: RTP hairpins through the home P-GW. Intercontinental S8 can spend a large part of the G.114 150 ms budget before the far end is even reached.
LBO avoids those four problems and is why it looks attractive on a whiteboard. It loses on operational cost: every visited partner needs an IMS interconnect, not just an S8 tunnel. That is why S8HR won in the field.
S8HR is using the hotel phone that still rings your office switchboard in your home city: simple for the hotel (one trunk), but emergency services, local police recording, and a fast transfer to a local taxi radio all stay awkward, and every word travels home and back. LBO is the hotel running its own switchboard and handing you to your office only for the features your office owns. In the real system the hotel trunk is S8, the home switchboard is the home P-CSCF and P-GW, and the local switchboard is a visited P-CSCF plus IBCF.
Quick revision
- IMS is the SIP-based service core that separates access (LTE, NR, Wi-Fi), transport (EPC/5GC) and service control.
- P-CSCF: the UE's only SIP peer, IPsec endpoint, identity asserter, and the node that asks PCRF/PCF for the voice bearer.
- I-CSCF: home-network entry; uses Cx UAR (registration) and LIR (terminating calls) to find the S-CSCF.
- S-CSCF: registrar, authenticates with MAR, downloads the profile with SAR, runs iFC to invoke application servers.
- HSS (UDM in 5G) stores IMPI/IMPU, AKA vectors, iFC, S-CSCF name, STN-SR and C-MSISDN.
- TAS runs MMTel supplementary services; MRF handles announcements and conference mixing; BGCF/MGCF/IMS-MGW break out to the PSTN; IBCF guards interconnects.
- IMS runs on a separate APN (
ims): default bearer QCI 5 for SIP, dedicated GBR QCI 1 for voice, QCI 2 for video. - The P-CSCF address comes from the PCO (cellular) or the IKEv2 configuration payload (Wi-Fi).
- Registration: REGISTER, 401 with AKA challenge, IPsec SA, protected REGISTER, 200 OK, third-party REGISTER, SUBSCRIBE reg event.
- The IPsec SA is set up after the 401 using CK/IK; the P-CSCF strips CK/IK from the 401 before forwarding.
- SQN out of range leads to a sync failure with AUTS and a fresh challenge; a MAC failure means the UE rejected the network.
- MO ladder: INVITE, 100, 183 (SDP answer), PRACK, 200, bearer reserved, UPDATE, 200, 180, 200 OK, ACK, RTP, BYE, 200.
- Preconditions stop the phone ringing before both sides have a QCI 1 bearer; failure gives 580 Precondition Failure.
- PRACK makes a provisional response reliable (100rel, RSeq/RAck); UPDATE changes session state before answer.
- MT differs by paging first and by the UE sending 183, then 180 after resources are ready, then 200 on answer.
- Codecs: AMR-NB (narrowband), AMR-WB (HD Voice, mandatory for VoLTE), EVS (super-wideband/fullband, channel-aware mode).
- CANCEL aborts an unanswered INVITE (callee returns 487); BYE ends an established dialog.
- Hold is a re-INVITE with
sendonlyorinactive; resume usessendrecv. - Call forwarding and barring are configured over Ut using XCAP (HTTP), often authenticated with GBA; the TAS enforces them.
- Conference: INVITE to the conference factory URI, then REFER each party; transfer uses REFER.
- SRVCC moves an active IMS call to 2G/3G CS via MME, Sv, MSC server and SCC-AS using STN-SR and C-MSISDN.
- eSRVCC anchors media at the ATCF/ATGW in the serving network, cutting the voice gap to under about 300 ms.
- aSRVCC covers the alerting phase, bSRVCC the pre-alerting phase, vSRVCC video, rSRVCC CS back to LTE.
- VoWiFi: IKEv2/IPsec tunnel over SWu to the ePDG (EAP-AKA), S2b to the P-GW, then the same IMS; N3IWF in 5G.
- LTE to Wi-Fi handover keeps the call because the P-GW keeps the same IMS IP when the request is handover type.
- VoWiFi has no GBR bearer; it relies on DSCP EF and Wi-Fi WMM marking.
- Emergency: emergency PDN, emergency registration,
urn:service:sos, E-CSCF, LRF location, PSAP; 380 tells the UE to redial as emergency. - ViLTE adds an
m=videoline and a QCI 2 bearer; upgrade and downgrade are re-INVITEs. - RCS chat uses MSRP set up by SIP INVITE; capability discovery uses OPTIONS or presence; file transfer uses HTTP.
- Transaction = request plus responses (Via branch + CSeq); dialog = Call-ID + From tag + To tag.
- IMS T1 is 2 s on the UE, so Timer B and F are 128 s; large SIP requests should go over TCP.
- PCC chain: P-CSCF Rx/N5 to PCRF/PCF, Gx/N7 to P-GW/SMF, dedicated bearer or QoS flow down to the eNB/gNB.
- QCI 1 is conversational voice (GBR, 100 ms, 10-2 loss); QCI 5 is IMS signalling on the default bearer, with high scheduling priority relative to other default bearers such as QCI 9; ARP controls admission and pre-emption only.
- On Android, the vendor ImsService provides MmTelFeature and RcsFeature; ImsPhone handles IMS calls in the framework.
- G.114 mouth-to-ear target is about 150 ms; the QCI 1 PDB is only the network slice of that path.
- Jitter buffer trades delay for smoothness; PLC hides isolated loss; MOS/E-model scores listening quality.
- CMR (in-band) and ANBR (RAN bitrate recommendation) step the codec down at the cell edge.
- VoLTE radio: ROHC, SPS, TTI bundling, C-DRX aligned to 20 ms, RLC UM (no ARQ stall).
- VoNR keeps the same SIP ladder; QoS becomes a 5QI 1 flow, policy is N5/N7, coverage exit is EPS fallback or VoNR-to-VoLTE HO.
- Voice-centric UE leaves a RAT that cannot provide voice; data-centric stays. Usage setting is not the IMS VoPS bit.
- S8HR is the common IMS roaming model (home P-GW and P-CSCF). LBO is specified but not "the" GSMA model. S8HR costs: emergency, LI, no local ATCF, trombone delay.
Glossary
- 3GPP AAA server
- Authenticates and authorises non-3GPP (Wi-Fi) access using EAP-AKA against the HSS.
- AKA
- Authentication and Key Agreement: SIM-based challenge-response that authenticates both sides and derives CK and IK.
- AMR-WB
- Adaptive Multi-Rate Wideband codec (50 to 7000 Hz), the baseline HD Voice codec for VoLTE.
- ANBR
- Access Network Bitrate Recommendation: the RAN tells the UE a recommended codec bit rate when the GBR cannot be honoured.
- APN
- Access Point Name: identifies a packet data network such as
imsorinternet. - ARP
- Allocation and Retention Priority: decides bearer admission and pre-emption under congestion.
- ATCF / ATGW
- Access Transfer Control Function and Gateway: local anchors for signaling and media used by eSRVCC.
- BGCF
- Breakout Gateway Control Function: chooses where a call leaves IMS towards the PSTN.
- C-MSISDN
- Correlation MSISDN used by the SCC-AS to match the SRVCC transfer to the existing session.
- CMR
- Codec Mode Request: an in-band AMR/EVS signal asking the sender to change bit-rate mode.
- CSFB
- Circuit-Switched Fallback: an LTE UE without VoLTE moves to 2G/3G to make or receive a voice call.
- Dedicated bearer
- An on-demand EPS bearer, often GBR, with a TFT; voice uses a QCI 1 dedicated bearer.
- Default bearer
- The always-on non-GBR bearer created with each PDN connection; QCI 5 on the IMS APN.
- Dialog
- A long-lived SIP peer relationship identified by Call-ID, From tag and To tag.
- DSCP
- Differentiated Services Code Point: IP header marking for QoS; voice uses EF (46).
- E-CSCF
- Emergency CSCF: routes emergency sessions to the correct PSAP.
- Early media
- Media such as ringback tones or announcements sent before the call is answered.
- ePDG
- Evolved Packet Data Gateway: terminates the UE's IPsec tunnel over untrusted Wi-Fi and connects to the P-GW.
- eSRVCC
- Enhanced SRVCC with ATCF/ATGW anchoring for a shorter voice interruption.
- EVS
- Enhanced Voice Services codec: up to fullband audio, 5.9 to 128 kbit/s, robust channel-aware mode.
- GBA
- Generic Bootstrapping Architecture: reuses SIM AKA to create keys for HTTP services such as XCAP on Ut.
- GBR
- Guaranteed Bit Rate: a bearer or QoS flow with reserved capacity.
- GRUU
- Globally Routable User agent URI: addresses one specific device among several sharing an identity.
- HSS
- Home Subscriber Server: master subscriber database for identities, keys and service profiles.
- I-CSCF
- Interrogating CSCF: home-network entry point that finds the right S-CSCF using the HSS.
- IBCF
- Interconnection Border Control Function: border towards other IMS networks.
- iFC
- Initial Filter Criteria: rules in the user profile telling the S-CSCF which application servers to invoke.
- IKEv2
- Internet Key Exchange version 2: sets up the IPsec tunnel between the UE and ePDG.
- IMPI
- IP Multimedia Private Identity: the authentication identity, never used for routing.
- IMPU
- IP Multimedia Public Identity: SIP or tel URI used to reach the user.
- IMS
- IP Multimedia Subsystem: the 3GPP SIP-based core for voice, video and messaging over IP.
- ISIM
- IMS Subscriber Identity Module: SIM application holding IMS identities and the home domain.
- Jitter buffer
- Receiver buffer that absorbs packet delay variation so voice frames play at a steady cadence.
- LBO
- Local breakout IMS roaming: visited P-GW and P-CSCF, with IBCF interconnect to the home S-CSCF. Specified, not the usual live model.
- LRF
- Location Retrieval Function: provides location and PSAP routing for emergency calls.
- MGCF
- Media Gateway Control Function: converts SIP to ISUP/BICC and controls the IMS-MGW.
- MMTel
- Multimedia Telephony: the IMS voice and video service with its supplementary services.
- MOS
- Mean Opinion Score: 1-to-5 listening-quality rating, often predicted from the E-model (ITU-T G.107).
- MRF
- Media Resource Function: announcements, tones, conference mixing and transcoding.
- MSRP
- Message Session Relay Protocol: carries RCS chat and file content in sessions set up by SIP.
- N3IWF
- Non-3GPP Interworking Function: 5G equivalent of the ePDG.
- P-CSCF
- Proxy CSCF: the UE's first and only SIP contact point in IMS.
- PCO
- Protocol Configuration Options: NAS container that delivers the P-CSCF address and DNS during PDN setup.
- PCRF / PCF
- Policy and Charging Rules Function (LTE) / Policy Control Function (5G): turn session information into QoS rules.
- PLC
- Packet Loss Concealment: the decoder invents a plausible frame when an RTP packet is lost.
- PRACK
- Provisional Response Acknowledgement: makes a 1xx response such as 183 reliable.
- Precondition
- SDP mechanism that delays alerting until QoS resources are reserved on both sides.
- PSAP
- Public Safety Answering Point: the emergency call centre.
- QCI / 5QI
- QoS Class Identifier (LTE) / 5G QoS Identifier: a number standing for delay, loss and priority characteristics.
- RCS
- Rich Communication Services: GSMA rich messaging over IMS.
- ROHC
- Robust Header Compression: shrinks IP/UDP/RTP headers over the radio for voice efficiency.
- RTP / RTCP
- Real-time Transport Protocol carries media; its control protocol reports loss, jitter and delay.
- S-CSCF
- Serving CSCF: registrar and session controller that runs iFC.
- S8HR
- S8 Home Routed: the common IMS roaming model; P-GW and P-CSCF stay in the home network and the IMS APN is hauled over S8.
- SBC
- Session Border Controller: edge product providing security, NAT traversal and topology hiding, often hosting the P-CSCF.
- SCC-AS
- Service Centralization and Continuity Application Server: anchors sessions for access transfer and SRVCC.
- SDP
- Session Description Protocol: describes media addresses, ports, codecs and direction.
- SIP
- Session Initiation Protocol: text-based signaling that creates, modifies and ends sessions.
- SPS
- Semi-Persistent Scheduling: a periodic radio grant (usually every 20 ms) used for VoLTE instead of a fresh DCI every TTI.
- SRVCC
- Single Radio Voice Call Continuity: hands an active IMS call to the 2G/3G CS domain.
- STN-SR
- Session Transfer Number for SRVCC: routes the MSC server's transfer INVITE to the SCC-AS or ATCF.
- TAS
- Telephony Application Server: runs MMTel supplementary services.
- TFT
- Traffic Flow Template: packet filters mapping IP flows onto a bearer.
- Transaction
- One SIP request and all its responses, matched by the Via branch and CSeq.
- Ut
- Interface between the UE and the TAS/XCAP server for supplementary service settings.
- Usage setting
- UE policy, voice-centric or data-centric, that decides whether the UE may stay on a RAT that cannot provide voice. Not the same as the network IMS VoPS indication.
- ViLTE
- Video over LTE: IMS video calling with a dedicated video bearer.
- VoLTE / VoNR / VoWiFi
- IMS voice over LTE, over 5G NR, and over Wi-Fi.
- XCAP
- XML Configuration Access Protocol: HTTP-based reading and writing of XML settings documents.
Interview questions
Fundamentals
What is IMS and what problem does it solve?
IMS (IP Multimedia Subsystem) is a 3GPP, SIP-based control framework for real-time voice, video and messaging over IP. LTE has no circuit-switched domain, so operators needed carrier-grade voice over packets with guaranteed QoS, supplementary services, emergency calls, charging and roaming. IMS separates service control from access and transport, so one core serves VoLTE, VoNR and VoWiFi.
What are VoLTE, VoNR and VoWiFi, and how are they related?
All three are the same IMS voice service over different access: VoLTE over LTE radio with a QCI 1 bearer, VoNR over 5G SA with a 5QI 1 QoS flow, VoWiFi over Wi-Fi through an IPsec tunnel to the ePDG (or N3IWF). The SIP signaling, the IMS core and the call ladder are the same; only the access leg and QoS mechanism change.
Explain the roles of the P-CSCF, I-CSCF and S-CSCF.
- P-CSCF: the UE's only SIP peer; IPsec endpoint, asserts identity, talks to PCRF/PCF for the voice bearer, detects emergency calls; often inside an SBC.
- I-CSCF: entry to the home network; queries the HSS (UAR, LIR) to find or assign the S-CSCF.
- S-CSCF: registrar and session controller; authenticates the user, downloads the profile, runs iFC to invoke application servers, routes calls.
What does the HSS store and which interfaces does it use?
IMPI and IMPU identities, AKA authentication vectors (from the shared key K), the service profile with iFC, the assigned S-CSCF name, and SRVCC data (STN-SR, C-MSISDN). It uses Cx (Diameter) to the I/S-CSCF, Sh to application servers, and S6a to the MME. An SLF picks the right HSS if there are several. In 5G the UDM/UDR take this role.
What is the TAS?
The Telephony Application Server (MMTel AS) runs supplementary services such as call forwarding, barring, call waiting, hold, conference, CLIP/CLIR and transfer. The S-CSCF sends calls to it over ISC when the user's iFC match. It also hosts the XCAP server for the Ut interface.
What is the IMS APN and why is it separate from the internet APN?
A dedicated PDN connection (APN ims) carrying only IMS signaling and media. It is isolated so it can get its own QoS and security policy, reach the private P-CSCF, be charged separately, and keep working when the user disables mobile data or runs out of allowance. It is usually IPv6.
Which QCI values does VoLTE use?
Do not invert them. QCI 1 is conversational voice: a GBR dedicated bearer (100 ms delay budget, 10-2 loss). QCI 5 is IMS SIP signalling on the default bearer of the IMS APN (non-GBR, 100 ms). QCI 5's scheduling priority (1 among QCI 1–9) is high relative to other default bearers such as QCI 9 internet; voice quality is protected by the GBR reservation, not by treating QCI 5 as "the voice bearer". Video adds QCI 2. VoNR uses the same numbers as 5QI.
How is the P-CSCF address discovered?
On cellular, from the PCO (Protocol Configuration Options) in the PDN connectivity or PDU session establishment response. Alternatives are DHCPv6/DHCP plus DNS, or static configuration. Over VoWiFi, it comes in the IKEv2 configuration payload from the ePDG. Without a P-CSCF, registration cannot start.
Give a high-level walkthrough of IMS registration.
Bring up the IMS PDN, get the P-CSCF from PCO, send REGISTER, receive 401 with an AKA challenge, the ISIM computes RES and CK/IK, IPsec SAs are set up with the P-CSCF, send the protected REGISTER, receive 200 OK, the S-CSCF does third-party registration to application servers, the UE subscribes to the reg event, and it re-registers before expiry.
What is the difference between IMPI and IMPU?
The IMPI (private identity) is used only for authentication and looks like an NAI (for example, imsi@ims.mncXXX.mccYYY.3gppnetwork.org). The IMPU (public identity) is a SIP or tel URI others use to call you. One IMPI can have several IMPUs, and IMPUs in an implicit registration set are registered together.
What is an ISIM and what happens if the SIM has none?
The ISIM is a SIM application with IMS identities (EF_IMPI, EF_IMPU, EF_DOMAIN) and AKA credentials. If absent, the UE uses the USIM and derives a temporary IMPI and IMPU from the IMSI (and the home domain from MCC/MNC), then runs AKA with the USIM.
List the main messages in a VoLTE mobile-originated call.
INVITE (SDP offer), 100 Trying, 183 Session Progress (SDP answer), PRACK, 200 OK for PRACK, dedicated bearer set up, UPDATE (precondition met), 200 OK for UPDATE, 180 Ringing, 200 OK for INVITE, ACK, then RTP. To end: BYE and 200 OK.
What is the difference between 180 Ringing and 183 Session Progress?
180 means the callee is being alerted. 183 carries session progress information, usually SDP, before alerting. In VoLTE the 183 carries the SDP answer and drives precondition handling; it can also carry early media such as announcements.
What is SDP?
Session Description Protocol, the body inside SIP that describes media: connection address (c=), media lines with ports and payload types (m=), codec mapping (a=rtpmap), codec parameters (a=fmtp), direction (sendrecv etc.), bandwidth and precondition attributes. It follows the offer/answer model.
What carries the actual voice in VoLTE?
RTP over UDP over IP on the QCI 1 bearer, typically one 20 ms codec frame per packet (50 packets per second), with RTCP for quality reports. Headers are compressed over the air with ROHC. Codecs are AMR-WB, EVS or AMR-NB.
Which codecs are used in VoLTE and VoNR?
AMR-NB (narrowband legacy), AMR-WB (wideband "HD Voice", mandatory in GSMA IR.92) and EVS (up to super-wideband/fullband, 5.9 to 128 kbit/s, with channel-aware mode for lossy radio). DTMF uses RTP telephone-event.
What protocol and ports does SIP use?
UDP, TCP, or TLS (SIPS). Default port 5060 (5061 for TLS). In IMS, the UE and P-CSCF use protected client and server ports agreed during the security negotiation, with IPsec ESP on top. Large messages should use TCP.
What is SRVCC in one sentence?
Single Radio Voice Call Continuity hands an active IMS voice call from LTE (or NR) to the 2G/3G circuit-switched domain when the UE leaves IMS voice coverage, so the call does not drop.
What is VoWiFi and how does the UE reach IMS over Wi-Fi?
VoWiFi is IMS voice over Wi-Fi. The UE builds an IKEv2/IPsec tunnel over any internet connection to the operator's ePDG (authenticated with EAP-AKA using the SIM), the ePDG connects to the P-GW over S2b, and the UE then registers and calls with the same IMS core as VoLTE.
What is the ePDG?
The Evolved Packet Data Gateway terminates IPsec tunnels from UEs on untrusted non-3GPP access (the SWu interface), authenticates them via the 3GPP AAA server with EAP-AKA, and connects them to the P-GW over S2b so they can use operator APNs like ims.
What is ViLTE?
Video over LTE: an IMS call whose SDP includes an m=video line (H.264/H.265) as well as audio. Video gets its own dedicated bearer (QCI 2 in the standard model) while voice stays on QCI 1. Adding or removing video is done with a re-INVITE.
What is RCS?
Rich Communication Services, the GSMA standard for rich messaging over IMS (Universal Profile): one-to-one and group chat, file transfer, delivery and read receipts, typing indicators and business messaging. Chat uses MSRP sessions set up with SIP; file transfer uses HTTP; capability discovery uses SIP OPTIONS or presence.
How does a UE put a call on hold?
It sends a re-INVITE (or UPDATE) inside the dialog with SDP a=sendonly (or a=inactive); the other side answers with recvonly (or inactive). To resume, it sends a=sendrecv. The network may play hold music via the TAS/MRF.
What is the difference between CANCEL and BYE?
CANCEL aborts an INVITE that has not had a final response (the call is still ringing); the callee returns 487 Request Terminated for the INVITE. BYE ends a dialog that is already established (after 200 OK and ACK).
What is an SBC and why is it placed in front of the IMS core?
A Session Border Controller is an edge product that provides security (DoS protection, message screening), topology hiding, NAT traversal, protocol normalisation, media anchoring and sometimes transcoding. It usually implements the P-CSCF towards UEs and the IBCF towards other operators, protecting the core.
What does "IMS voice over PS supported" mean?
It is an indication in the LTE attach/TAU accept (or 5G registration accept) telling the UE whether the network supports IMS voice in this area. If it is not set, the UE should not use VoLTE there and will use CSFB or another domain for voice. It is a network capability bit, not the UE's voice-centric or data-centric usage setting.
What is G.114 and what delay should you quote for VoLTE?
ITU-T G.114 recommends one-way mouth-to-ear delay under about 150 ms if users are not to notice it; 150 to 400 ms is usable with growing annoyance. That number includes codec, packetization, air interface, core, and the jitter buffer. The QCI 1 / 5QI 1 packet delay budget of 100 ms is only the network part of the path.
Going deeper
What is the iFC and how does the S-CSCF use it?
Initial Filter Criteria are trigger rules in the user's service profile, downloaded from the HSS at registration (SAR/SAA). Each rule has a priority, a trigger point (conditions on SIP method, headers, Request-URI, session case such as originating or terminating) and a target application server with default handling if it does not respond. When a request matches, the S-CSCF forwards it over ISC to that AS (for example, the TAS), which returns it for further processing.
Explain IMS-AKA in detail.
The S-CSCF gets an authentication vector (RAND, AUTN, XRES, CK, IK) from the HSS via MAR/MAA. It sends RAND and AUTN in the nonce of a 401 and gives CK/IK to the P-CSCF. The ISIM verifies AUTN (authenticating the network and checking the sequence number), computes RES and derives CK and IK. RES is used as the digest password (AKAv1-MD5) in the second REGISTER; the S-CSCF compares it with XRES. CK/IK set up the IPsec SAs between UE and P-CSCF.
What happens on an AKA sequence number synchronisation failure?
If the SQN in AUTN is outside the SIM's accepted window, the SIM generates an AUTS token. The UE sends a REGISTER with the auts parameter. The S-CSCF passes RAND and AUTS to the HSS in a new MAR; the HSS resynchronises its SQN and sends fresh vectors; the S-CSCF issues a new 401 challenge.
How are the IPsec security associations negotiated in IMS registration?
Using the security agreement mechanism (RFC 3329, sec-agree). The UE lists supported algorithms, SPIs and protected ports in Security-Client. The P-CSCF returns its choice in Security-Server with the 401. Both derive keys from CK/IK and create two pairs of ESP SAs. The UE then sends the second REGISTER over the SAs with Security-Verify echoing the server's list, which protects against downgrade attacks.
What is third-party registration?
After a successful registration, the S-CSCF evaluates iFC for REGISTER and sends a REGISTER on the user's behalf to the matching application servers (for example, the TAS, SMS-over-IP AS or RCS AS). They learn the user is online and can get registration details, sometimes including the original REGISTER body.
Why does the UE subscribe to the reg event package?
So the network can tell it about changes to its own registration: network-initiated de-registration (for example, after an HSS change or S-CSCF restart), requests to re-authenticate, or other contacts registered for the same IMPU. Without it, the UE could think it is registered while the network has dropped it. The P-CSCF also subscribes to clean up its state.
What headers come back in the 200 OK to REGISTER and why do they matter?
Service-Route: the UE must put these in Route for originating requests so they reach its S-CSCF.P-Associated-URI: the registered IMPUs; the first is usually the default identity.Expires(or Contact expires): the granted registration time, driving re-registration.- Optionally GRUUs (
pub-gruu,temp-gruu).
Why are preconditions (183, PRACK, UPDATE) used in VoLTE?
To make sure QoS resources (the QCI 1 bearers) are reserved at both ends before the callee is alerted. This prevents a phone ringing and being answered when there is no media path, and lets the call fail cleanly with 580 Precondition Failure if resources cannot be reserved. UPDATE tells the peer that local resources are now ready.
What is PRACK and why is it needed?
Provisional responses (1xx) are normally unreliable over UDP. RFC 3262 lets a UA send a provisional response reliably (with Require: 100rel and an RSeq); it is retransmitted until the other side sends PRACK with a matching RAck. VoLTE needs this for the 183 carrying the SDP answer, since losing it would break precondition negotiation.
When and how is the QCI 1 dedicated bearer created during a call?
When the P-CSCF sees the SDP offer/answer (typically on the 183), it sends a Diameter Rx AAR with the media components to the PCRF. The PCRF builds a PCC rule (QCI 1, GBR/MBR, ARP, packet filters) and sends it via Gx RAR to the P-GW, which sends Create Bearer Request through the S-GW to the MME. The MME asks the eNB to set up the E-RAB and sends Activate Dedicated EPS Bearer Context Request with the TFT to the UE. This happens on both originating and terminating sides.
How does the mobile-terminated flow differ from mobile-originated?
If the callee is idle, the INVITE arriving at the P-GW triggers downlink data notification and paging, so the UE first returns to connected mode. The terminating S-CSCF runs terminating iFC (forwarding, call waiting). The UE sends 183 with the SDP answer, handles the incoming PRACK and UPDATE, then sends 180 once resources are ready and 200 OK when the user answers; it receives the ACK.
What is the difference between a SIP transaction and a dialog?
A transaction is one request and all its responses, matched by the top Via branch and CSeq method. A dialog is the ongoing relationship between two UAs, identified by Call-ID plus From tag plus To tag; it is created by a 2xx (or a reliable 1xx creating an early dialog) to INVITE, spans many transactions such as PRACK, UPDATE and re-INVITE, and ends with BYE.
What do Route and Record-Route do?
A proxy that wants to see all later requests in a dialog adds itself in Record-Route on the initial request. Both endpoints store the route set and put it in Route headers for later in-dialog requests (re-INVITE, BYE), so they pass through the same P-CSCF and S-CSCF. Service-Route and Path are the registration-time equivalents.
Explain the SDP offer/answer model.
RFC 3264: the offerer lists media streams, codecs, addresses and ports; the answerer picks what it accepts (one codec per stream in VoLTE) and gives its own address. Only one offer can be outstanding. If the INVITE has no SDP, the offer comes in the reliable response and the answer in PRACK or ACK. Port 0 rejects a stream. Direction attributes control hold.
What do P-Asserted-Identity and P-Preferred-Identity do?
The UE can indicate which of its IMPUs to use in P-Preferred-Identity. The P-CSCF checks it against the registered set and replaces it with P-Asserted-Identity, a network-verified identity trusted inside the IMS core and used for caller ID, charging and services. With CLIR, Privacy: id tells the terminating side not to show it.
What is P-Access-Network-Info used for?
It carries the access type (for example, 3GPP-E-UTRAN-FDD, 3GPP-NR, IEEE-802.11) and the cell ID or Wi-Fi information. The network uses it for charging, lawful intercept, service decisions (for example, Wi-Fi-specific rules) and emergency location. After an LTE and Wi-Fi handover, the UE updates it with a re-REGISTER or in-dialog request.
How do CLIP and CLIR work at the SIP level?
The caller's identity is in P-Asserted-Identity (and From). CLIP simply presents it. CLIR adds Privacy: id (and often From: "Anonymous" <sip:anonymous@anonymous.invalid>); the terminating P-CSCF or TAS removes the identity before delivering to the callee. The default CLIR setting is stored on the TAS via XCAP.
How are call transfer and conference signalled?
Transfer uses REFER: the transferor sends REFER with Refer-To set to the target (blind), or with a Replaces parameter for consultative transfer; the transferee INVITEs the target and reports progress with NOTIFY. Conference: the UE INVITEs the conference factory URI on the TAS (the MRF mixes media), then sends REFER for each existing call so the server invites those parties; the UE can subscribe to the conference event package.
What is the Ut interface and XCAP?
Ut is the interface between the UE and the TAS/XCAP server used to read and change supplementary service settings (forwarding, barring, CLIR default, network call waiting). XCAP maps XML document nodes to HTTP URIs: GET reads, PUT writes, DELETE removes. Authentication is typically GBA or HTTP digest.
What is the difference between default and dedicated bearers?
A default bearer is created with each PDN connection, is always on and non-GBR, and carries any traffic not matched elsewhere; no TFT is required. A dedicated bearer is created on demand for specific flows, can be GBR, and uses a TFT to capture its packets. In VoLTE, SIP rides the IMS default bearer (QCI 5) and voice rides a dedicated QCI 1 bearer.
What is a TFT?
A Traffic Flow Template is a set of packet filters (remote and local IP, ports, protocol, direction) attached to a bearer. The UE applies uplink filters and the P-GW applies downlink filters so that, for example, RTP to the far end's IP and port goes on the QCI 1 bearer. A wrong TFT can leave media on the wrong bearer or dropped in one direction.
What is ARP and how does it differ from QCI?
ARP (Allocation and Retention Priority) decides whether a bearer is admitted and whether it can pre-empt or be pre-empted when resources are short. QCI (or 5QI) decides how packets are treated once admitted: delay budget, loss rate, scheduling priority. An emergency call has high ARP so it gets resources; its packets still get QCI 1 treatment.
How do SRVCC and eSRVCC differ?
In basic SRVCC, the MSC server's transfer INVITE goes to the SCC-AS in the home network, which re-INVITEs the remote party with the new media address; that path can be long, especially when roaming, so the voice gap is large. eSRVCC places the ATCF (signaling) and ATGW (media) in the serving network at call setup. At SRVCC time only the local leg changes at the ATGW, the remote side is untouched, and the interruption is typically under 300 ms.
What are STN-SR and C-MSISDN?
Both are SRVCC subscription data sent from the HSS to the MME. STN-SR (Session Transfer Number for SRVCC) is the number the MSC server dials to reach the SCC-AS (or the ATCF for eSRVCC) for the transfer. C-MSISDN (Correlation MSISDN) lets the SCC-AS/ATCF match the transfer request with the user's existing IMS session.
What are SWu, S2a and S2b?
SWu is the IKEv2/IPsec interface between the UE and the ePDG over untrusted Wi-Fi. S2b connects the ePDG to the P-GW (GTPv2 or PMIPv6). S2a connects a trusted WLAN gateway (TWAG) directly to the P-GW, with no ePDG, for operator-controlled Wi-Fi.
How is the UE authenticated when setting up VoWiFi?
Twice. First, the IKEv2 tunnel to the ePDG uses EAP-AKA (via the 3GPP AAA server and HSS) with the SIM credentials. Second, inside the tunnel, the normal IMS registration runs IMS-AKA with the S-CSCF, and IPsec SAs are set up with the P-CSCF, so SIP travels inside two layers of IPsec.
What are the Wi-Fi calling preference modes?
Wi-Fi preferred (use Wi-Fi when good), cellular preferred (use VoLTE; Wi-Fi only without usable cellular) and Wi-Fi only (never cellular voice). Operators may add roaming-specific modes. The UE's policy, thresholds and operator rules (carrier config, ANDSF, URSP) decide the actual access.
How does an IMS emergency call differ from a normal VoLTE call?
It uses a separate emergency PDN (request type emergency) with high ARP, an emergency registration (Contact with sos) or none at all (anonymous emergency call), a Request-URI of urn:service:sos, routing by the P-CSCF to the E-CSCF in the serving network (not the home S-CSCF), location from PANI, Geolocation/PIDF-LO or LRF, and PSAP selection by the LRF. It can fall back to CS emergency.
What is early media and what problems can it cause?
Media sent before answer, such as operator ringback tones or announcements, signalled with SDP in a 18x and authorised with P-Early-Media. Problems: the UE plays local ringback while the network sends early media (double audio), or mutes early media and the user hears silence; charging disputes; clipping of the start of the call when switching from early to final media.
What is a jitter buffer, and how does it trade off against delay?
It is a receiver buffer that holds incoming RTP frames so they can be played at a steady 20 ms cadence despite delay variation. A deeper buffer hides more jitter and gives EVS channel-aware redundancy time to arrive, but it adds mouth-to-ear delay and can breach the G.114 ~150 ms target. Adaptive buffers grow when arrival variance is high and shrink when the path is stable.
Voice-centric versus data-centric: what is the usage setting?
A UE policy (TS 24.301 / 24.501), not the IMS VoPS bit. A voice-centric UE must have a voice domain: if the camped RAT cannot provide IMS voice and CS fallback is not usable, it disables that RAT for the PLMN and reselects (LTE to 2G/3G, or 5GS to EPS). A data-centric UE stays on the data RAT even without voice. Voice domain preference (CS only, IMS only, CS preferred, IMS preferred) is a separate parameter that chooses which domain to try first.
How does VoLTE differ from VoNR?
The SIP ladder, IMS core and codecs are the same. VoLTE uses a QCI 1 EPS bearer and Rx/Gx on LTE/EPC. VoNR uses a 5QI 1 QoS flow in the IMS PDU session and N5/N7 on NR/5GC SA. Radio names change (SPS and TTI bundling versus configured grant and PUSCH repetition). Coverage exit is SRVCC on VoLTE, versus EPS fallback at setup or VoNR-to-VoLTE handover in call. NSA does not do VoNR; voice stays VoLTE on the LTE anchor.
Advanced
Walk through the full Cx Diameter exchange across registration and a terminating call.
- UAR/UAA (I-CSCF): is this user allowed to register, and which S-CSCF (or which capabilities) serves them?
- MAR/MAA (S-CSCF): fetch authentication vectors; also used with AUTS for resynchronisation.
- SAR/SAA (S-CSCF): register the S-CSCF as serving and download the user profile with iFC; also used at de-registration.
- LIR/LIA (I-CSCF on terminating requests): which S-CSCF currently serves this IMPU?
- PPR/PPA (HSS-initiated): push an updated profile.
- RTR/RTA (HSS-initiated): force de-registration.
Where do CK and IK travel during registration, and why does the P-CSCF strip them?
The HSS sends CK and IK to the S-CSCF in the MAA. The S-CSCF puts them in the 401 (as ck and ik parameters in WWW-Authenticate) towards the P-CSCF over the trusted core. The P-CSCF stores them to build the IPsec SAs and removes them before forwarding the 401 to the UE, because the UE derives them itself from the ISIM and they must never cross the radio in clear text.
Describe the SDP precondition attributes and how they evolve during call setup.
a=curr gives the current QoS status (local and remote, none/send/recv/sendrecv), a=des the desired status and strength (mandatory, optional, none), and a=conf asks the peer to report when its status changes. In the INVITE, UE-A says local current none, desired mandatory. UE-B's 183 answers with its own status and may request confirmation. Once each side's bearer is up, it sends UPDATE (or the answer to it) with a=curr:qos local sendrecv. When the desired status is met on both sides, UE-B alerts and sends 180.
What are aSRVCC, bSRVCC and mid-call SRVCC, and why were they needed?
Basic SRVCC only transferred a single active, answered call. aSRVCC (Rel-10) transfers calls in the alerting phase (180 sent or received but unanswered), so a user walking out of coverage while the phone rings does not lose the call. bSRVCC (Rel-11) covers the pre-alerting phase (after INVITE but before 180). Mid-call SRVCC (Rel-10) transfers held calls and conference state, which requires the MSC to understand multiple sessions.
How does the ATCF become part of the session so eSRVCC can work?
At registration, the P-CSCF routes REGISTER through the ATCF (in the serving network), which adds itself to the Path and allocates an STN-SR that it provides to the SCC-AS; the SCC-AS updates the HSS/MME with this ATCF STN-SR. At call setup, the ATCF stays in the signaling path and decides whether to anchor media at the ATGW. During SRVCC, the MSC server sends the transfer INVITE to that STN-SR; the ATCF correlates it with the session and switches the ATGW media from the PS leg to the CS leg, without changing the remote side.
Explain in detail how a VoLTE to VoWiFi handover preserves the IMS IP address.
The IMS PDN is anchored at the P-GW, and the HSS/AAA stores which P-GW serves the IMS APN for this UE. When the UE sets up the IKEv2 tunnel, it includes the IMS APN and its current IP (a handover indication) in IKE_AUTH. The ePDG, via AAA, selects the same P-GW and sends Create Session Request with the Handover Indication. The P-GW recognises an existing session and moves it to S2b, keeping the same IP, then releases the LTE bearers. Because the Contact IP is unchanged, the SIP registration and dialog continue; the UE updates PANI with a re-REGISTER or re-INVITE.
What is the difference between trusted and untrusted non-3GPP access?
The operator decides whether a Wi-Fi network is trusted. Untrusted access (most public and home Wi-Fi) requires the UE to build an IPsec tunnel to the ePDG (N3IWF in 5G), so the operator does not rely on the Wi-Fi network's security. Trusted access (operator-controlled Wi-Fi with strong link security such as EAP-AKA over 802.1X) connects through a TWAG over S2a (TNGF in 5G) without an extra UE tunnel.
How do the Rx and Gx interfaces cooperate during a VoLTE call?
On Rx the P-CSCF (application function) sends an AAR with media components derived from SDP (flow descriptions, codec, bandwidth, media type). The PCRF authorises it, derives a PCC rule and pushes it on Gx (RAR) to the PCEF in the P-GW, which triggers dedicated bearer creation. The P-CSCF also subscribes to events such as loss of bearer or change of access network; the PCRF reports them in RAR towards the P-CSCF. At call end, the P-CSCF sends STR and the PCRF removes the rule, deleting the bearer.
How does 5G QoS differ from LTE bearers for voice?
In 5G, QoS flows identified by QFI replace dedicated EPS bearers. All flows of a PDU session share one N3 GTP-U tunnel with the QFI marked in each packet; the SDAP layer maps flows onto DRBs, possibly several flows per DRB. The P-CSCF uses N5 (or Rx) to the PCF, which uses N7 to the SMF; the SMF programs the UPF (N4) and the gNB (via AMF/N2). VoNR voice uses 5QI 1, signaling 5QI 5. Reflective QoS can also let the UE derive uplink rules from downlink packets.
Why do IMS UEs use a T1 of 2 seconds, and what are the consequences?
Radio links have longer and more variable round-trip times, including paging and connection setup, so TS 24.229 recommends T1 = 2 s (T2 = 16 s, T4 = 17 s) for the UE instead of RFC 3261's 500 ms. Retransmissions are therefore less aggressive, saving radio resources, but Timer B and F become 128 s. If a P-CSCF is dead, it takes longer to detect, so UEs often have operator-specific timers for switching to a backup P-CSCF.
When should the UE switch SIP from UDP to TCP, and why does this matter for IMS?
RFC 3261 section 18.1.1 says a request within 200 bytes of the path MTU (or over 1300 bytes if MTU is unknown) must go over a congestion-controlled transport such as TCP. IMS messages with many headers, SDP with several codecs, and IPsec overhead easily exceed this. Fragmented UDP over IPsec is often dropped by middleboxes, causing registration or INVITE timeouts, so correct TCP switching (and correct MTU from PCO) is an important interoperability item.
What is GRUU and why does IMS need it?
A Globally Routable User agent URI identifies a specific device instance among several registered under the same IMPU (for example, a phone and a watch sharing a number). It is built from the +sip.instance identifier (often IMEI-based). Public GRUUs are stable; temporary GRUUs hide identity. IMS uses them to target a specific device for transfer, conferencing and multi-device scenarios.
What happens when two INVITEs or re-INVITEs collide (glare)?
If a UA receives a re-INVITE while its own offer is outstanding in the same dialog, it replies 491 Request Pending. Each side waits a random time (the Call-ID owner waits 2.1 to 4 s, the other 0 to 2 s) before retrying, which resolves the collision. It commonly appears during simultaneous hold/resume or session refresh plus codec change.
How do session timers and RTP inactivity timers differ?
Session timers (RFC 4028, Session-Expires, Min-SE, refresher role) are signaling-level: one side must refresh the dialog with re-INVITE or UPDATE before expiry, or the call is torn down with BYE. RTP inactivity timers are media-level: if no RTP/RTCP arrives for a set time, the UE or network ends the call. The first catches dead signaling paths; the second catches dead media paths (for example, after a failed handover).
How does IMS interwork with the PSTN for a call to a landline?
The S-CSCF (after ENUM/number analysis finds no IMS user) sends the INVITE to the BGCF, which selects an MGCF in its own network or forwards to another network's BGCF. The MGCF converts SIP to ISUP or BICC towards the PSTN and controls the IMS-MGW over H.248 to convert RTP to TDM. SIP responses are mapped from ISUP messages (ACM to 180, ANM to 200, REL causes to SIP codes).
Why is EVS channel-aware mode useful, and what are its limits?
At 13.2 kbit/s, channel-aware mode sends a partial redundant copy of an earlier frame inside a later packet. If a packet is lost, the receiver can rebuild it from the redundant copy after the jitter buffer delay, improving quality at the cell edge or on lossy Wi-Fi. It costs some quality at zero loss and needs a deeper jitter buffer; both ends and the network must support EVS, or transcoding may remove the benefit.
How does SMS over IP work?
The UE sends the 3GPP SMS PDU (RP-DATA) inside a SIP MESSAGE with content type application/vnd.3gpp.sms. The S-CSCF uses iFC to route it to the IP-SM-GW, which interworks with the SMSC. Delivery reports come back in another MESSAGE. The UE shows support with the +g.3gpp.smsip feature tag at registration.
How does terminating access domain selection (T-ADS) work?
For an incoming call, the SCC-AS decides whether to deliver it over IMS (PS) or CS. It considers IMS registration state, whether the current access supports IMS voice (IMS VoPS, obtained from the HSS/MME), the UE's capabilities and operator policy. If IMS voice is not possible (for example, the UE is in an LTE area without VoPS), it routes the call to CS via the CS Routing Number so the UE receives it by CSFB or on 2G/3G.
What changes in IMS when the UE is roaming?
The common deployed model is S8HR (S8 Home Routed), described in GSMA IR.65 and IR.92: the IMS APN is home-routed, so the P-GW and P-CSCF stay in the home network and behaviour looks like a home call, but media trombones over S8. Do not call local breakout "the" GSMA-standardised model; IR.65 defines both, and S8HR is what most operators actually turn on. LBO puts the P-GW and P-CSCF in the visited network, adds P-Visited-Network-ID, keeps the home S-CSCF for service control, and uses IBCFs for interconnect. S8HR drawbacks: emergency routing to the visited PSAP is harder, visited-country lawful intercept of IMS is limited, there is no local ATCF so eSRVCC while roaming is typically unavailable, and mouth-to-ear delay grows on long S8 paths.
What does the P-CSCF do when the UE's voice bearer is lost mid-call?
It learns about it through the Rx event subscription (loss of bearer from the PCRF). Depending on operator policy, it may wait briefly for recovery (for example, during a handover), then send BYE towards both parties with a Reason header, or let the UE decide. On the UE side, the modem reports the bearer or PDN loss, and the IMS stack ends or tries to recover the call.
How does the network handle an emergency call from a UE with no SIM?
Where local regulations allow, the UE performs an emergency attach (identified by IMEI), gets an emergency PDN, and sends an unauthenticated emergency INVITE to urn:service:sos without IMS registration. The P-CSCF recognises it and routes to the E-CSCF, which obtains location via the LRF and routes to the PSAP. No callback number is available, which is why some countries forbid SIM-less emergency calls.
What is the role of the SCC-AS beyond SRVCC?
It anchors all IMS sessions of a user that may need continuity: PS-to-CS transfer (SRVCC), CS-to-PS (rSRVCC), terminating access domain selection, and support for ICS (IMS Centralized Services, where CS-attached users get IMS services). Because the remote leg stays anchored at the SCC-AS, the access leg can be replaced without the far end noticing.
Which radio optimizations does VoLTE depend on, and why is voice on RLC UM?
ROHC shrinks IP/UDP/RTP headers so a 20 ms frame is not header-dominated. SPS gives a periodic 20 ms grant without a DCI every TTI. TTI bundling repeats the uplink transport block across 4 TTIs at the cell edge. C-DRX sleeps between those 20 ms occasions. Voice uses RLC UM because a late frame is useless: RLC AM would stall for ARQ. Residual loss is handled by HARQ, PLC and CMR/ANBR, not by RLC retransmissions.
What are CMR and ANBR?
CMR is an in-band codec mode request in the AMR or EVS payload telling the sender to change bit rate. ANBR is the RAN's access-network bitrate recommendation to the UE when the eNB or gNB can no longer guarantee the GBR (often via notification control). The UE then sends CMR or a bitrate recommendation toward the far end so the codec steps down before the air interface starts dropping frames.
S8HR versus LBO: which is deployed, and what does S8HR cost?
Both are in GSMA IR.65, but S8HR is the common deployed model: the IMS APN is home-routed, so P-GW and P-CSCF stay at home and the VPLMN only needs S8 plus QCI 5/1. Do not call LBO "the" standardised model. S8HR costs: emergency routing to the visited PSAP is hard; visited-country LI of IMS is limited; there is no local ATCF so roaming eSRVCC is typically unavailable; media trombones through the home P-GW and can spend the G.114 budget. LBO fixes those four at the price of a visited IMS and IBCF interconnect.
Scenario & debugging
IMS registration fails with 403 Forbidden. How do you debug it?
A 403 is a policy decision from the IMS core, so do not blame the modem or RF first. Check, in order: the IMS PDN is up and the right APN is used; the P-CSCF came from PCO; AKA succeeded (403 after the second REGISTER suggests authorisation, not authentication); the IMPI/IMPU values (ISIM files or IMSI-derived) match what the HSS expects; the subscriber is provisioned for VoLTE and allowed while roaming; carrier config and device provisioning flags. Read the SIP trace for a Warning or Reason header, and compare with a working SIM on the same network.
The VoLTE icon is shown, but calls go over CS. How do you debug?
First confirm the real IMS state: the icon may be stale while registration has expired or was terminated by a reg-event NOTIFY. Check that re-REGISTER fires before expiry and gets 200 OK, that the MMTel voice capability is reported as available to the framework, that the IMS VoPS bit is set in the current cell, and the framework's IMS-versus-CS decision (for example, IMS not considered in service, or a carrier config forcing CS for certain numbers). Also check whether the IMS attempt started and then fell back to CS because of a specific SIP failure or a local reason; see Call flows for the fallback path.
A VoLTE call connects but has one-way audio. How do you find the cause?
Find which direction has no RTP by capturing on both legs (device RTP statistics or a core capture). Then check: the SDP addresses and ports on both sides (a private or wrong IP in SDP); whether the QCI 1 bearer's TFT matches the actual RTP flow in both directions; firewalls or SBC media anchoring dropping inbound RTP; a hold state left as sendonly after a failed re-INVITE; codec mismatches such as AMR octet-aligned versus bandwidth-efficient; SRTP key issues; and finally local audio routing (microphone muted, wrong audio device). Walk backwards from the point where packets disappear.
A call is answered but both parties hear nothing. What do you suspect?
Total silence usually means the media path never formed: the dedicated bearer failed while the call proceeded without preconditions; SDP addresses are unreachable (IPv4/IPv6 mismatch, wrong SBC media address); incompatible codec parameters so frames cannot be decoded; or the audio HAL never started the voice stream. Check Rx/Gx and bearer setup logs, RTP counters on the device and SBC, and the audio framework logs around answer time.
Calls fail on one carrier with 488 Not Acceptable Here. What do you check?
488 means the SDP was not acceptable. Compare the device's offer with what the carrier needs: codecs and their fmtp (EVS bandwidth and bit-rate ranges, AMR-WB mode-set, octet-align), bandwidth lines, precondition attributes, telephone-event, video parameters. Put a failing INVITE next to a working one from another device on the same network. Often the fix is a carrier config or IMS profile change on the device.
Calls fail with 580 Precondition Failure. What does it mean and where do you look?
One side could not reserve QoS resources, so the call could not proceed without a media path. Look at the dedicated bearer setup: Rx AAR rejected by the PCRF (policy or subscription), Gx failures, the P-GW or MME rejecting Create Bearer, the eNB refusing the E-RAB (admission control, congestion, ARP too low), or the UE rejecting the bearer (TFT errors). Correlate the time between 183 and the failure with NAS and core logs.
Calls drop exactly when the user leaves the building. How do you root-cause it?
First decide which transition is happening. If the user was on VoWiFi, it is likely a Wi-Fi to LTE handover problem (see the next question). If on VoLTE, it is likely leaving LTE coverage: check measurement reports, whether SRVCC is configured and triggered (Handover Required with SRVCC indication, PS to CS Request on Sv), whether the MSC and SCC-AS/ATCF completed the transfer, and whether the drop happened at handover command or after. If SRVCC is not deployed (or 2G/3G is switched off), the call drops on radio link failure; the fix is network-side.
A VoWiFi call drops when moving to LTE. How do you debug?
The usual root cause is a broken IP anchor: the LTE PDN request for the IMS APN was sent as an initial request instead of handover, so the UE got a new IP and the SIP dialog was lost. Check the request type in NAS, whether the same P-GW and IP were kept, whether LTE had IMS VoPS, whether the UE started the handover early enough (Wi-Fi thresholds and hysteresis), and whether re-registration or re-INVITE on LTE succeeded. Put IKEv2 teardown, NAS messages and SIP on one timeline.
IMS registration keeps cycling between registered and deregistered. What could cause it?
Possibilities: re-REGISTER failing near expiry (timeouts, IPsec SA renegotiation problems), the P-CSCF restarting or failing keep-alives, AKA resync loops, the IMS PDN flapping due to radio instability or back-off timers, network-initiated de-registration via reg-event NOTIFY, or the device toggling IMS because of carrier config or entitlement changes. Correlate SIP with PDN and radio events to see which layer drops first.
The caller hears ringing but the callee's phone never rings. Where do you look?
The ringback may be network-generated early media or a local tone, so signaling reached at least part of the path. On the terminating side check: whether the callee is IMS registered, whether paging succeeded, whether the terminating dedicated bearer and preconditions completed (the callee will not alert until they do), and whether terminating iFC diverted or barred the call. Check whether the 180 actually came from the callee's device or from a network node. Trace the terminating P-CSCF's INVITE delivery.
REGISTER requests time out with no response at all. What do you check?
Confirm the REGISTER actually leaves the device (device-side capture) and reaches the right P-CSCF IP. Check the IMS PDN routing and DNS, IPv6 versus IPv4 P-CSCF selection, MTU and fragmentation (large UDP REGISTERs, especially the protected one over IPsec), IPsec SA parameters and ports after the 401, firewalls, and whether the UE tries the next P-CSCF from the PCO list. With IMS T1 = 2 s, a dead P-CSCF takes a long time to detect.
Registration loops on 401 Unauthorized and never succeeds. What is going on?
The S-CSCF keeps rejecting the response. Check the modem's AKA result: MAC failure (UE rejects the network, wrong K or OP/OPc on SIM or HSS), SQN sync failure with AUTS (should resolve after one resync; if not, the HSS is not processing AUTS), or RES mismatch caused by using the wrong IMPI or realm in the digest. Also verify the second REGISTER is sent over the SA with the correct Security-Verify.
After enabling airplane mode and disabling it, VoLTE takes minutes to come back. Why?
Possible reasons: the UE did not de-register cleanly (no REGISTER with Expires 0), so the network has stale state; back-off timers from earlier PDN or registration rejections (T3396, T3346) delay the new attempt; the network waits for the old binding to expire; the SIM or ISIM reads are slow at boot; or the framework waits for carrier config before enabling IMS. Look at the time between attach, IMS PDN, first REGISTER and 200 OK to see which step is slow.
Call setup takes 6 to 8 seconds on VoLTE. How do you reduce it?
Break the delay down: MT paging delay (paging cycle, DRX); the time from INVITE to 183 (routing, HSS and DNS latency, TAS processing); the time from 183 to UPDATE (dedicated bearer setup through PCRF, P-GW and eNB); SIP retransmissions caused by loss (with a 2 s T1 each loss adds seconds); and local processing on the UE. Fixes include tuning paging and DRX, speeding up bearer setup, avoiding UDP fragmentation, and keeping the terminating UE in connected mode where appropriate.
Call forwarding settings fail to load in the phone's settings menu, but VoLTE calls work. Why?
Call forwarding settings use the Ut/XCAP interface, not SIP. Ut often runs over the internet APN or an xcap APN and uses GBA authentication. If mobile data is off, the APN is not configured, the BSF/GBA bootstrap fails, DNS for the XCAP server fails, or the operator blocks Ut while roaming, the settings fail while calls still work. Check carrier config options that allow Ut with data off, and capture the HTTP exchange.
Audio is choppy on VoWiFi only. How do you investigate?
VoWiFi has no GBR bearer, so look at the Wi-Fi and internet path: RSSI and retries, Wi-Fi power-save behaviour, WMM queue use and DSCP marking (EF for voice) on both inner and outer IPsec headers, jitter and loss in RTCP reports, router bufferbloat, and ePDG location (a distant ePDG adds delay). Compare with the same Wi-Fi using a different device, and check the jitter buffer and codec (EVS channel-aware mode helps with loss).
An emergency call over Wi-Fi fails or reaches the wrong PSAP. What do you check?
Check whether the operator allows emergency over Wi-Fi at all, or requires cellular when available; whether an emergency address was provisioned for Wi-Fi calling; whether PANI and the Geolocation/PIDF-LO location were included; whether the emergency PDN over the ePDG was set up; and whether the P-CSCF routed to the E-CSCF. Wrong PSAP usually means wrong or stale location. Also confirm the device falls back to cellular or CS emergency if IMS emergency fails.
An operator reports that SRVCC success rate dropped after a network upgrade. How do you approach it?
Split by failure point using counters and traces: the eNB SRVCC trigger, MME PS to CS Request and Response on Sv, MSC target preparation, the transfer INVITE to STN-SR (SCC-AS or ATCF), and UE execution. Check that STN-SR and C-MSISDN are still delivered by the HSS, the ATCF still gets included at registration, and target 2G/3G neighbour lists are still correct. Correlate the timing of the upgrade with specific cause codes and compare device types to rule out a UE issue.
Calls drop about 30 minutes into long conversations. What could cause it?
A regular time points to a timer. The most common is a session timer refresh failure: Session-Expires is 1800 s and the refresher's re-INVITE or UPDATE fails or is not sent, so the call is torn down. Other options: IPsec SA lifetime expiring without rekey, NAT or firewall binding timeouts for RTP (especially over Wi-Fi), or charging or credit control limits. Check the BYE Reason header and the SIP messages just before the drop.
Video calls work, but upgrading a voice call to video always fails. What do you check?
The upgrade is a re-INVITE adding an m=video line. Check whether the other party's response is 488 (unsupported codec or profile), 491 (glare), or a rejection with port 0 (user declined). Also check whether the network authorises the QCI 2 bearer (Rx AAR for the video component), carrier config video flags, and device capability (feature tags at registration must include video). A network rejecting the QCI 2 bearer can also make the upgrade fail.
The IMS APN goes down in the middle of a call. What happens and how should the device recover?
The QCI 1 bearer is released with the PDN, so RTP stops. The modem reports the PDN loss (for example, a data call list change through RIL), and the IMS stack ends the call with a reason such as media path lost. The device should re-establish the IMS PDN (respecting any back-off timer), re-register and restore service. SRVCC is triggered by radio conditions, not by a PDN loss, so it does not save this call.
How would you test a new VoLTE launch end to end before going live?
Cover each layer: device (IMS profile, codecs, carrier config, provisioning), radio (VoLTE features such as ROHC, TTI bundling, DRX, QCI 1 admission), core (IMS APN, PCRF rules, dedicated bearer setup), IMS (registration, iFC, TAS services, XCAP), interworking (PSTN breakout, SRVCC or CSFB, roaming, emergency), and VoWiFi handover if offered. Track KPIs such as registration success, call setup success and time, drop rate, SRVCC success and MOS. Run per-carrier interoperability tests and drive tests at cell edges.
Audio is robotic at the cell edge but SIP looks fine. What do you check?
The signalling bearer is not the media path. Check uplink coverage (PHR, MCS, BLER on the QCI 1 grant), whether TTI bundling or PUSCH repetition is on, whether ROHC is active, RTCP loss and jitter, jitter-buffer depth and PLC, and whether CMR/ANBR ever stepped the codec down. A UE stuck at AMR-WB 23.85 into a fading uplink will sound chopped while 183/200 look perfect. Compare MOS or E-model estimates with a log that includes RTP statistics.
The phone leaves LTE for 3G even though data still works. Why?
Classic voice-centric behaviour: IMS VoPS is not indicated (and CSFB is not usable), so a voice-centric UE disables E-UTRAN for that PLMN and reselects to 2G/3G. Confirm the usage setting, the VoPS bit in Attach/TAU Accept, CSFB support, and that this is not simply a reselection-priority issue. A data-centric UE would have stayed on LTE and failed the next voice attempt instead.