# Session Initiation Protocol

Session Initiation Protocol (in acronimo SIP), nelle telecomunicazioni, indica protocollo di rete di controllo del livello applicativo usato per creare, modificare, e terminare sessioni tra uno o più partecipanti.
Queste sessioni includono chiamate telefoniche via Internet (Voip), distribuzioni multimediali, e videoconferenze. SIP viene comunemente usato per instaurare o terminare chiamate video o vocali e permette di modificare le caratteristiche di chiamate in corso come l'indirizzo IP e la porta, l'invito di ulteriori partecipanti e aggiungere o cancellare media stream. Gli elementi principali della rete SIP sono: user agent, proxy server, registrar, redirect server, session border controller, gateway. Gli URI identificano ogni elemento di una rete SIP usando lo schema: sip://username:password@host:port oppure sips://username:password@host:port (nel caso si usi la crittografia TLS).

## Descrizione

SIP gestisce in modo generale una sessione di comunicazione tra due o più entità, ovvero fornisce meccanismi per instaurare, modificare e terminare (rilasciare) una sessione. Attraverso il protocollo SIP possono essere trasferiti dati di diverso tipo (audio, video, messaggistica testuale ecc). Inoltre, il SIP favorisce un'architettura modulare e scalabile, ovvero capace di crescere con il numero degli utilizzatori del servizio. Queste potenzialità hanno fatto sì che il SIP sia, oggi, il protocollo VoIP più diffuso nel mercato residenziale e business, sorpassando di molto, altri protocolli quali H.323 ed MGCP.
Intorno al SIP sono sorti diversi tipi di utilizzatori, pensati per facilitare la fruizione della telefonia VoIP da parte di tutte le categorie di persone. Alcuni esempi sono gli ATA (Analog Telephone Adapter), capaci di convertire la segnalazione elettrica di un normale telefono analogico in un flusso di dati IP, e, dall'unione tra telefono tradizionale e ATA, gli IP Phones, telefoni dalle funzionalità elevate ai quali non arriva il doppino telefonico ma i cavi di rete. Evoluzione ulteriore sono i soft-phones, applicazioni software per personal computer che emulano le funzioni di un telefono VoIP.

## Panoramica del protocollo

SIP supporta cinque sfaccettature per l'avvio e la terminazione di una connessione:
* Locazione dell'utente: determinazione degli end system usati nella comunicazione;
* Disponibilità dell'utente: identificazione della disponibilità delle parti ad impegnarsi in una comunicazione;
* Capacità dell'utente: identificazione di media e parametri utilizzati;
* Impostazione della sessione: avviso, instaurazione dei parametri di una sessione su chiamate;
* Gestione della sessione: trasferimento e terminazione di una sessione, modifica dei parametri della sessione, e invocazione dei servizi.
SIP non è un sistema per le comunicazioni integrato verticalmente, ma piuttosto può essere usato come componente in altri protocolli IETF per costruire un'architettura multimediale completa (di solito includono il protocollo RTP per la comunicazione trasparente in sistema real-time e fornitura di feedback in QoS, oppure RTSP per il controllo della consegna di contenuti in streaming). SIP non fornisce servizi, ma primitive per implementarli. Per esempio esso può individuare un utente e consegnargli un oggetto opaco alla sua locazione corrente.

### Caratteristiche

Storicamente SIP utilizza il protocollo di trasporto UDP con porta di default 5060. Recenti revisioni di questo standard permettono anche l'utilizzo attraverso TCP e TLS
Il protocollo SIP ha fondamentalmente le seguenti funzioni:
* Localizzazione degli utenti
** acquisire le preferenze degli utenti
* Invitare gli utenti a partecipare ad una sessione:
** negoziare le capability
** 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.
Il modello usato per la sintassi del protocollo SIP è text-based, derivato dall'HTTP. 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
* eventuali server possono essere sia stateless sia stateful.
* è 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.

## Architettura di una rete SIP

Le entità essenziali di una rete SIP sono:
* SIP User Agent: Schema di chiamata tra User Agents è 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 inoltrarle 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 contenente informazioni sull'utente, come il profilo, l'indirizzo IP, l'URL.

## Applicazioni

Esso trova applicazione nella telefonia su IP e nei servizi telefonici supplementari, nella video-comunicazione, nei giochi interattivi, nella messaggistica istantanea. Il protocollo è stato sviluppato, ufficialmente, a partire dal 1999 (RFC 2543 e 3261) per iniziativa di IETF e fa parte della Internet Multimedia Conferencing Suite.
Ad oggi l'utilizzo prevalente è nella telefonia su IP, per cui SIP è spesso sinonimo di un sistema dedicato a questa applicazione.

## Software che sfrutta il protocollo SIP

Esistono diversi software in grado di sfruttare il protocollo SIP:
* VOIspeed UCloud
* Gizmo5
* openSIPS
* Asterisk
* Ekiga
* Wengo
* Fring
* Google Talk
* Microsoft Lync (rinominato poi in Skype for Business che terminerà il suo ciclo di vita nel 2021)
* 3CX, su 3cx.com.
Solo alcuni di questi sono software libero.
Per lo stack Android sono mantenuti i seguenti progetti open source:
* IMDDroid, su code.google.com.
* SipUA, su code.google.com.
* SipDroid, su code.google.com.
* CSipSimple, su code.google.com.