2022 Mobile Core and IMS · intermediate
IMS Stopped Looking Like a PBX Once I Split P-CSCF, I-CSCF and S-CSCF
The three CSCF roles made IMS easier to understand when I treated them as separate signalling responsibilities instead of one oversized SIP server.
My first mistake with IMS was trying to map the whole system onto a PBX. SIP was visible everywhere, so it was tempting to imagine the CSCFs as a complicated replacement for Asterisk. That model hides the point of the architecture. The P-CSCF, I-CSCF and S-CSCF have different responsibilities, and separating those roles made the signalling path much easier to follow.
The P-CSCF is the UE's first contact point into IMS. From the device perspective it is the SIP proxy that receives registration and session signalling. It also sits at an important policy and security boundary because it is close to the access network and maintains the signalling relationship toward the subscriber.
The I-CSCF is more like an entrance into the home IMS domain. During registration it can consult subscriber information and help select the S-CSCF that will serve the user. That role made more sense once I stopped expecting it to behave like the final registrar or application server. It is part of finding and hiding the internal serving topology.
The S-CSCF is where the subscriber's serving session-control state becomes central. It handles registration state, processes SIP signalling for the served user and can invoke service logic according to the operator's configuration. In a simple lab the same software stack may host several of these functions, but that does not mean their protocol roles are interchangeable.
Tracing a REGISTER through the components was the most useful exercise. The request entered through the P-CSCF, reached the home-domain side through the I-CSCF, and was ultimately handled by the selected S-CSCF with subscriber information from the HSS involved in the process. The return response followed the signalling path back toward the UE.
This architecture also explained why normal SIP knowledge remained useful without being sufficient. Request-URI, Via, Route, Record-Route, authentication challenges and dialog state still matter, but IMS adds network roles, subscriber databases, Diameter interfaces, access policy and standardized service procedures around them.
Once I stopped asking which IMS box is "the SIP server," the system became much easier to reason about. The better question is which function owns the decision I am debugging: access proxying, home-domain entry, serving session control, subscriber data, policy or application logic.