add IMS slides

This commit is contained in:
Harald Welte 2021-07-23 17:15:18 +02:00
parent b0e4869b54
commit 2c45402182
1 changed files with 215 additions and 0 deletions

View File

@ -0,0 +1,215 @@
High-Level intro IMS, VoLTE, VoWFi
==================================
:author: Harald Welte <laforge@gnumonks.org>
:copyright: 2021 by Harald Welte (License: CC-BY-SA)
:backend: slidy
:max-width: 45em
== Overview
What this talk is about
* IMS basics
* How IMS is used in VoLTE
* How IMS is used in VoWiFi
== Evolution of telephone signaling
* circuit-switched
** PSTN
** ISDN Call Control (Q.931 + ISUP)
** GSM L3 CC Call Control (derived from Q.931)
** BICC in core networks
* packet-switched
** H.323
** IETF SIP
** ITU SIP-I as ISUP replacement in telco networks
** 3GPP IMS (based on SIP)
== IMS: IP Multimedia System
* predates LTE
* specified at 2G + 3G time
* idea was to
** do voice over packet switched GPRS/UMTS services
** use one shared telephony system for both cellular and wired (DSL, Cable) access
== IMS and VoLTE / VoWiFi
* VoLTE is a marketing term for IMS over a LTE access network
* VoWiFi is a marketing term for IMS accesss over untrusted networks
** *untrusted* basically means not operated by a commercial telecom operator
== Basic IMS Core Network
* primarily a set of SIP proxies / switches (P-CSCF, I-CSCF, S-CSCF)
* subscriber configuratoin stored in HSS (like in LTE)
* optionally augmented by media gateways
** for interworking with PSTN / ISDN circuit switched interfaces
** for interworking with 2G/3G circuit switched domain
.IMS Core Network
[graphviz]
----
digraph G {
rankdir=LR;
Sub_A [label="Subscriber\nA"];
Sub_B [label="Subscriber\nB"];
Sub_C [label="Subscriber\nC"];
Sub_D [label="Subscriber\nD"];
subgraph cluster_A {
label = "IMS core";
PCSCF [label="P-CSCF",shape="square"];
ICSCF [label="I-CSCF",shape="square"];
SCSCF [label="S-CSCF",shape="square"];
}
HSS [label="HSS",shape="square"];
Sub_A -> PCSCF [dir=none,label="SIP"];
Sub_B -> PCSCF [dir=none,label="SIP"];
Sub_C -> PCSCF [dir=none,label="SIP"];
Sub_D -> PCSCF [dir=none,label="SIP"];
PCSCF -> ICSCF [dir=none,label="SIP"];
ICSCF -> SCSCF [dir=none,label="SIP"];
ICSCF -> HSS [dir=none,label="DIAMETER"];
SCSCF -> HSS [dir=none,label="DIAMETER"];
}
----
== P-CSCF: Proxy Call Session Control Function
* IP address to which IMS clients sent SIP traffic
* also serves as IPsec endpoint in case of VoLTE
* forwards SIP to I-CSCF
== I-CSCF: Interrogating Call Session Control Function
* resolve which S-CSCF shall be used to serve the subscriber
** involves interrogation of HSS via DIAMETER
* forwards SIP to S-CSCF it has resolved
== S-CSCF: Service Call Session Control Function
* anchor to which the subscribers actually register
* confirms subscriber authorization with HSS (via DIAMETER)
* in charge of actual call control
== SIP dialect used in IMS
* don't assume it is just plain old SIP like you know it from VoIP
* various 3GPP specific additions and extensions
* for example, introduction of EAP-AKA for authentication via ISIM card
== IMS in VoWiFi
* Introduction of the `ePDG` network element
* resembles a bit the P-GW/GGSN in 3GPP use case, but with the public internet as "RAN"
* acts as IPsec tunnel endpoint from/to clients
* IPsec IKE has been extended by 3GPP
** to use USIM/ISIM (UMTS AKA) based authentication
** to derive IPsec encryption keys from UMTS AKA
[graphviz]
----
digraph G {
rankdir=LR;
Sub_A [label="Subscriber\nA"];
ePDG [label="ePDG",shape="square"];
subgraph cluster_A {
label = "IMS core";
PCSCF [label="P-CSCF",shape="square"];
ICSCF [label="I-CSCF",shape="square"];
SCSCF [label="S-CSCF",shape="square"];
}
HSS [label="HSS",shape="square"];
Sub_A -> ePDG [dir=none,label="SIP/TCP/IP/IPSEC"];
ePDG -> PCSCF [dir=none,label="SIP/TCP/IP"];
ePDG -> HSS [dir=none,label="DIAMETER"];
PCSCF -> ICSCF [dir=none,label="SIP"];
ICSCF -> SCSCF [dir=none,label="SIP"];
ICSCF -> HSS [dir=none,label="DIAMETER"];
SCSCF -> HSS [dir=none,label="DIAMETER"];
}
----
== IMS in VoWiFi
* ePDG IP address discovery
** hardcoded in UE, or
** configurable in UE, or
** DNS based resolution via epdg.epc.mncXXX.mccYYY.pub.3gppnetwork.org
Once ePDG is discovered, IKE Phase 1 is started to set up IPsec SA
* typically NAT-T (UDP encapsulated ESP) is used
* typically both encryption and integrity protection used
== IMS in VoLTE
* you would assume it's simply accessing the IMS core via E-UTRAN + EPC
** but...you underestimate the mind-boggling complexity that is required for 3GPP specs
* EPC supports QoS, so we must make use of that
** dedicated bearers wit different QoS for
*** default bearer (background IP, QCI=8/9)
*** IMS signaling (high reliability, QCI=5)
*** IMS user plane (low latency, QCI=1)
* IMS registration establishes QCI=5 bearer
* call setup establishes QCI=1 bearer
== dedicated bearers in LTE
* in 2G/3G, we know PDP contexts
** PDP context resembles IP tunnel between MS/UE and GGSN
** you can establish multiple concurrent PDP contexts to different GGSNs, each with its own IP
* LTE extends this with the notion of EPS bearers and TFTs
** think of those like sub-flows within a PDP context
** you connect to one APN but have multiple concurrent EPS bearers to that APN
** each EPS bearer comes with a set of packet filter rules that determie to which bearer a given packet gets mapped. Those packet filter rules are called TFTs.
== IMS in VoLTE
[graphviz]
----
digraph G {
rankdir=LR;
Sub_A [label="Subscriber\nA"];
EUTRAN [shape="square"];
PGW [label="P-GW for IMS APN",shape="square"];
PCRF [label="PCRF",shape="square"];
subgraph cluster_A {
label = "IMS core";
PCSCF [label="P-CSCF",shape="square"];
ICSCF [label="I-CSCF",shape="square"];
SCSCF [label="S-CSCF",shape="square"];
}
HSS [label="HSS",shape="square"];
Sub_A -> PGW [dir=none,label="EPS bearers for QCI=1/QCI=5"];
PGW -> PCSCF [dir=none,label="SIP/TCP/IP (opt. IPsec)"];
PGW -> HSS [dir=none,label="DIAMETER"];
PCRF -> HSS [dir=none,label="DIAMETER"];
PGW -> PCRF [dir=none,label="DIAMETER"];
PCSCF-> PCRF [dir=none,label="DIAMETER"];
PCSCF -> ICSCF [dir=none,label="SIP"];
ICSCF -> SCSCF [dir=none,label="SIP"];
ICSCF -> HSS [dir=none,label="DIAMETER"];
SCSCF -> HSS [dir=none,label="DIAMETER"];
}
----
== IMS Open Source Software
In case you want to play with this:
* https://github.com/fasferraz/SWu-IKEv2
* FHoSS: Fraunhofer HSS with IMS related features (Java)
* Kamailio: SIP softswitch that can serve as P/I/S-CSCF
* doubango: IMS library / framework for client side
* imsdroid: Android stand-alone IMS client application using doubango framework
== EOF
End of File