Nell’artico riguardante il VoIP, ho introdotto SIP (Session Initiation Protocol) come un protocollo di controllo che si occupa di segnalazione durante una comunicazione VoIP.
E’ un protocollo della IETF del livello applicazione descritto
nella RFC 3261 che si
occupa della creazione, gestione e chiusura di una comunicazione VoIP (o di altre sessioni multimediali o
testuali).
In quest’articolo, vedremmo gli elementi principali di SIP,
analizzeremmo i suoi messaggi e il suo funzionamento.
Elementi
Gli elementi principali di SIP sono:
SIP User Agent: sono gli
attori della comunicazione. Possono essere usati sia in modalità server
(rispondere alle richieste) sia client (inviare delle richieste).
Registrar Server: E’ un server che riceve da parte degli user agent iscritti a un dominio
il loro attuale indirizzo IP che servirà poi per localizzarli. Inoltre usa i servizi
di un server AAA per l’autenticazione.
Proxy Server: è un server intermedio serve a spedire i messaggi a domini esterni.
Può essere Outbound (Riceve tutte le chiamate uscenti di un User Agent
vicino) o Inbound (Instrada le chiamate entranti in un dominio destinato a un
User Agent vicino.)
Redirect Server: Usato per re instradare le richieste SIP verso destinazioni alternative (per
esempio in assenza del destinatario).
Location Server: è un database contenente informazioni sull'utente, come il profilo, l'indirizzo IP,
l'URL.
In generale tutti questi server sono riuniti in un unico server
chiamato SIP server.
Fin cui possiamo intuire che gli user agent comunicano fra loro mandandosi
dei messaggi e usano dei server per la localizzazione e l’instradamento di
questi messaggi. Come sono fatti questi
messaggi?
Messaggi
I messaggi di SIP sono testuali
e simili a quelli usati da HTTP per lo scambio di pagine web.
Ecco il formato dei messaggi SIP:
L’intestazione contiene informazioni sull’user
agent sorgente e l’user agent destinatario del messaggio.
La linea vuota indica la fine
dell’intestazione.
Il payload usa il protocollo SDP
(Session description protocol) e descrive i parametri della sessione nel caso
fosse multimediale (opzionale nel messaggio).
Ora vediamo i tipi di messaggi.
Tipi di messaggi SIP
INVITE: invitare un utente a partecipare a una comunicazione.
ACK: Notificare la ricezione di una risposta.
BYE: Terminare una comunicazione.
CANCEL: Anulare una richiesta (INVITE) prima ancora di averne
ricevuta la risposta.
OPTIONS: Chiedere informazioni sulle capacità di un user
agent.
REGISTER: Registrare l’attuale indirizzo di un user agent
SUBSCRIBE: Richiedere lo stato di un user agent.
NOTIFY: informare
dello stato di un UA
MESSAGE: mandare
un messaggio (testo/XML) usato per l'istant messaging.
Ora vediamo i tipi di risposte.
Tipi di risposte
Le risposte sono classificate con un codice di tre cifre, dove la
prima indica la categoria. Le categorie principali sono:
1xx Risposte
provvisorie:
100 Ricerca
del destinatario in corso.
180 Il Telefono
SIP del destinatario sta suonando.
182 Richiesta
in coda.
2xx Risposte
positive:
200 OK.
3xx Re direzione:
300 Scelta multipla
305 Uso del Proxy
4xx Errori
nel client:
404 destinatario
non trovato.
407 errore
di autenticazione nel Proxy.
5xx Errori
nel server:
503 Servizio non disponibile
505 Versione di SIP non supportata
6xx Errori
generici:
600 destinatario occupato su tutti gli
indirizzi.
603 chiamata rifiutata.
Ora che sappiamo un po’ di più sui messaggi scambiati, come
funziona il SIP.
Funzionamento
La comunicazione in SIP è un insieme di dialoghi e transazioni.
Per transazione intendiamo l’insieme dei messaggi scambiati fra la prima richiesta e la risposta finale mentre il dialogo è un flusso di messaggi richiesta-risposta fra due user agent.
Per l’inizio di una comunicazione SIP usa una transazione
trapezoidale simile a un handshake a tre vie.
SIP usa i sia TCP sia UDP per il trasporto dei messaggi. In
modalità TCP, si può anche aggiunge la cifratura usando TLS.
SIP deve poter localizzare un user agent associando il suo nome
utente al suo indirizzo.
Come si svolge il Name Mapping?
Per associare un nome utente a un indirizzo come fa SIP? Prendiamo
un esempio pratico.
Un nome utente è della forma
utente@dominio.ext
Dove dominio può essere il nome del server, l’indirizzo IP …
Per risolvere il problema SIP fa l’uso di tre servizi del server
DNS (NAPTR, SRV, A/AAAA.)
NAPTR
È un record del server DNS che definisce quale protocollo di
trasporto, deve essere usato per un certo servizio. Per il nostro caso il
servizio è SIP e i protocolli di trasporto possibili sono:
TLS/TCP, TCP, UDP
Esempio
foo.com 43200 IN NAPTR 60 50 "s"
"SIP+D2U" "" _sip._udp.foo.com
SRV
È un record del server DNS che definisce i parametri con quali
accedere a un servizio. I parametri sono il server e la priorità.
Esempio
_sip._udp.foo.com 43200 IN SRV 10 10 5060
sipserver.foo.com.
A/AAAA
Questo è il record che si guarda per ultimo. Il record in
questione ci da l’indirizzo per accedere ad un server.
Esempio
ns.foo.com. 43200 IN A 10.0.0.20
Per fare il name mapping SIP consulta questi tre record se sono
presenti in quest’ordine NAPTR, SRV, A/AAAA.
Possiamo finire l’artico dicendo che SIP è protocollo di segnalazione
semplice e leggero e fra l’altro è usato nel software Google Talk.
Segnaliamo anche che SIP usa lo standard Enum E.164 per
permettere a telefoni tradizionali (PSTN) o IP di comunicare con un utente SIP
ma questa è un’altra storia.
Se hai qualche dubbio aspetto le tue domande o chiarimenti.
Riferimenti
e approfondimenti:
http://it.wikipedia.org/wiki/Session_Initiation_Protocol
http://www.voip-info.org/wiki/view/SIP
http://voip.html.it/articolo06.aspx
http://www.siptutorial.net/SIP/index.html
http://www.alma-web.net/index.php/faq/23-linux/27-il-protocollo-sip.html
Benvenuto caro Lettore!
UF è un blog di ingegneria informatica pieno di articoli più o menoo tecnici. Iscriviti per rimanere aggiornato all'uscità dei prossimi articoli.