try hiccup

Diameter: the protocol that runs VoLTE's back office

Short version: SIP decides what a call wants; Diameter decides whether the network will let it happen and who pays. Authentication, subscriber lookup, policy, charging and the voice bearer itself all ride on Diameter — which is why a VoLTE call can die without a single SIP message ever looking wrong.

Where it came from

Diameter (RFC 6733, originally RFC 3588 — the name is a dry joke: twice RADIUS) was built to replace RADIUS for authentication, authorisation and accounting. It fixed the things that made RADIUS unfit for a carrier core: it runs over TCP or SCTP (port 3868) instead of fire-and-forget UDP, every request gets an answer, peers monitor each other with watchdogs, failover is defined rather than improvised, and the message format extends cleanly. 3GPP then adopted it as the control-plane glue of LTE and IMS, which is where nearly everyone meets it today.

The building blocks

The interfaces that matter for voice

InterfaceBetweenWhat it decides
S6aMME ↔ HSSCan this device attach to LTE at all, and with what subscription data. Fails here and the phone has no data, never mind voice.
Cx / DxI/S-CSCF ↔ HSS (SLF)IMS registration: does the user exist, which S-CSCF serves them, and the AKA vectors to authenticate them.
ShApplication server ↔ HSSService data for supplementary services — where the TAS reads and writes forwarding rules and the like.
RxP-CSCF ↔ PCRFThe voice bearer trigger: the P-CSCF describes the media from the SDP, the policy function decides whether a dedicated bearer gets built.
GxPCRF ↔ PGWThe enforcement half of Rx: policy rules pushed down so the packet core actually installs the bearer and its QoS.
Ro / Rf (Gy)Network ↔ chargingOnline (credit-checked, can refuse mid-call) and offline (records after the fact) charging.

Reading a Diameter capture

Diameter is binary, so you read it with a decoder rather than your eyes — but the questions are always the same three. Did the request reach the right place? Follow Destination-Realm and watch a DRA rewrite hop-by-hop ids. What did the answer say? Result-Code 2001 is DIAMETER_SUCCESS; 3xxx codes are routing/protocol failures (3002 UNABLE_TO_DELIVER is the classic "nobody peers with that realm"), 4xxx are transient, 5xxx are permanent refusals — and 3GPP applications often put the truth in Experimental-Result-Code instead, e.g. 5001 USER_UNKNOWN from an HSS. Did it answer at all? Watchdog DWR/DWA pairs tell you whether the peering itself was alive.

What Diameter failure looks like from the SIP side

hiccup decodes the Diameter it finds alongside your SIP — Cx, Rx and friends — so "the SIP looks fine" and "the Result-Code was 5001" can sit in the same timeline. Self-hosted, free for individual users.

upload a trace