Session Initiation Protocol
Il protocollo SIP (Session Initiation Protocol) instaura, modifica e rilascia una sessione. Esso trova applicazione non solo nella telefonia su IP e nei servizi telefonici supplementari, ma anche nella video-comunicazione, nei giochi interattivi, nella messaggistica instantanea. Il protocollo è stato sviluppato a partire dal 1999 (Request for Comment 2543 e 3261) per iniziativa di IETF e fa parte della Internet Multimedia Conferencing Suite.
Il protocollo SIP ha fondamentalmente le seguenti funzioni:
- Invitare gli utenti a partecipare ad una sessione:
- localizzare gli utenti
- acquisire le preferenze degli utenti
- negoziare le capabilities
- trasportare una descrizione della sessione
- Instaurare le connessioni di sessione
- Gestire eventuali modifiche dei parametri di sessione
- Rilasciare le parti
- Cancellare la sessione in qualunque momento si desideri.
SIP è un protocollo text-based, orientato al Web, simile ad HTTP, con una struttura client-server. Per instaurare una sessione, avviene un three-way handshaking (concettualmente simile a quello che avviene con il protocollo TCP). Alcune delle caratteristiche importanti del protocollo SIP:
- è impiegabile sia in contesti client-server sia in contesti peer to peer.
- è facilmente estendibile e programmabile
- lavora sia con server stateless sia con server stateful.
- e' indipendente dal protocollo di trasporto.
Un messaggio SIP è una richiesta o una risposta; una sequenza di una richiesta e una o più risposte è detta transazione: una transazione è identificabile da un transaction-ID, un identificativo che ne specifica la sorgente, la destinazione e il numero di sequenza.
Il protocollo SIP supporta la mobilità ed è dialog-oriented: un dialogo è una relazione persistente tra entità paritetiche che si scambiano richieste e risposte in un contesto comune.
Esempio di un messaggio SIP
Gli utenti SIP sono risorse identificabili o localizzabili mediante URI o URL che contengano informazioni sul dominio, sul nome-utente, sull'host o il numero col quale l'utente partecipa alla sessione. Gli indirizzi sono stile e-mail. Esempi fittizzi possono ad esempio essere:
Un messaggio SIP è costituito da un'intestazione e da un corpo (rispettivamente detti header e body). A titolo esemplificativo, consideriamo il seguente messaggio di Invite, in cui header e body sono separati da una riga vuota:
INVITE sip:utente@___domain.com SIP/2.0 Via: SIP/2.0/UDP 134.102.18.1 From: <sip:zioMauro@dominio.com>; tag = 4711 ''//identifica l'originatore della richiesta '' To: Michele <sip:utente@___domain.com> ''//identifica la destinazione logica di una richiesta'' Call-Id: 12345678@134.102.18.1 ''//è un valore costante che identifica l'invito'' Cseq: 49 Invite ''//ordina le transazioni (..la prossima richiesta avrà Cseq=50)'' Content-Length: 117 ''//il body consiste in 117 byte '' Content-Type: application /sdp ''//tipo di media descritto secondo il protocollo [[SDP]]'' Subject: felicitazioni! ''//l'oggetto del messaggio'' Contact: sip:zioMauro@134.102.18.1:4050 ''//l'indirizzo al quale si desidera ricevere richieste'' transport = udp ''//specifica il protocollo di trasporto, nell'esempio [[UDP]]'' v = 0 ''//indica la versione in uso'' o = jack 7564657 9823872 IN IP4 134.102.18.1 ''//l'owner della risorsa con un ID di sessione'' c = IN IP4 134.102.18.1 ''//tipo di rete, la versione del protocollo IP e l'IP stesso '' t = 0 0 ''//tempo di start e di stop'' m = audio 4754 RTP/AVP 0 ''//tipo di media, num. di porto, protocollo di trasporto e formato '' a = rtpmap: 0 PCMU/8000 ''//attributi audio\video.. se ce ne fossero '' s = festa ''//subject della sessione''
Cenni ai messaggi SIP più frequenti
Altri messaggi SIP frequenti sono:
- Register: messaggi inviato da uno User Agent quando vuole registrare presso un Registrar Server il proprio punto di ancoraggio alla rete.
- Bye: utilizzato per porre fine ad un dialogo SIP
- Cancel: per terminare un dialogo se la sessione non ha ancora avuto inizio.
- Invite: già discusso in precedenza, serve ad invitare un utente a partecipare ad una sessione.
- Ack: è un messaggio di riscontro
- Trying e Ringing: messaggi provvisori;mantengono i parametri della richiesta a cui rispondono.
- Subscribe e Notify: utilizzati in contesti peer to peer.
Architettura di una rete SIP
Le entità essenziali di una rete SIP sono:
- SIP User Agent: è un end-point e può fungere da client o da server; i due ruoli sono dinamici, nel senso che nel corso di una sessione un client può fungere da server e viceversa. Quando funge da client, dà inizio alla transazione originando richieste. Quando funge da server, ascolta le richieste e le soddisfa, se possibile. Uno User Agent è in sostanza una macchina a stati, che evolve in dipendenza di messaggi SIP, e registra informazioni rilevanti del dialogo. Il dialogo ha inizio quando si risponde positivamente al messaggio di Invite e termina con un messaggio di Bye
- Registrar Server: è un server dedicato o collocato in un proxy. Quando un utente è iscritto ad un dominio, invia un messaggio di registrazione del suo attuale punto di ancoraggio alla rete ad un Registrar Server.
- Proxy Server: è un server intermedio; può rispondere direttamente alle richieste oppure "ruotarle" ad un client, ad un server o ad un ulteriore proxy. Un proxy server analizza i parametri di instradamento dei messaggi e "nasconde" la reale posizione del destinatario del messaggio - essendo quest'ultimo indirizzabile con un nome convenzionale del dominio di appartenenza.
I proxy possono essere stateless o stateful. Quando uno User Agent invia sistematicamente le proprie richieste ad un proxy "vicino" (di default) allora il proxy viene detto Outbound-Proxy. Viceversa, un Inbound-Proxy è un proxy che instrada le chiamate entranti in un dominio. Infine un Forking-Proxy può instradare una stessa richiesta in parallelo o in sequenza a più destinazioni.
- Redirect Server: reinstrada le richieste SIP consentendo al chiamante di contattare un set alternativo di URIs.
- Location Server: è un database contentente informazioni sull'utente, come il profilo, l'indirizzo IP, l'URL.