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 e' 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:

  • e' impiegabile sia in contesti client-server sia in contesti peer to peer.
  • e' 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 e' 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.