SIP (Session Initiation Protocol)
Informazioni di Base
SIP (Session Initiation Protocol) è un protocollo di segnalazione e controllo delle chiamate ampiamente utilizzato per stabilire, modificare e terminare sessioni multimediali, inclusi voce, video e messaggistica istantanea, su reti IP. Sviluppato dall'Internet Engineering Task Force (IETF), SIP è definito in RFC 3261 ed è diventato lo standard de facto per VoIP e comunicazioni unificate.
Alcune caratteristiche chiave di SIP includono:
Protocollo basato su testo: SIP è un protocollo basato su testo, il che lo rende leggibile dall'essere umano e più facile da debuggare. Si basa su un modello di richiesta-risposta, simile a HTTP, e utilizza metodi come INVITE, ACK, BYE e CANCEL per controllare le sessioni di chiamata.
Scalabilità e Flessibilità: SIP è altamente scalabile e può essere utilizzato in implementazioni di piccola scala così come in ambienti aziendali di grandi dimensioni e carrier-grade. Può essere facilmente esteso con nuove funzionalità, rendendolo adattabile a vari casi d'uso e requisiti.
Interoperabilità: L'ampia adozione e standardizzazione di SIP garantiscono una migliore interoperabilità tra dispositivi, applicazioni e fornitori di servizi diversi, promuovendo una comunicazione senza soluzione di continuità su varie piattaforme.
Design Modulare: SIP funziona con altri protocolli come RTP (Real-time Transport Protocol) per la trasmissione multimediale e SDP (Session Description Protocol) per descrivere sessioni multimediali. Questo design modulare consente una maggiore flessibilità e compatibilità con diversi tipi di media e codec.
Server Proxy e di Reindirizzamento: SIP può utilizzare server proxy e di reindirizzamento per facilitare il routing delle chiamate e fornire funzionalità avanzate come il trasferimento di chiamata, il trasferimento di chiamata e i servizi di segreteria telefonica.
Presenza e Messaggistica Istantanea: SIP non è limitato alla comunicazione vocale e video. Supporta anche la presenza e la messaggistica istantanea, consentendo una vasta gamma di applicazioni di comunicazione unificata.
Nonostante i suoi numerosi vantaggi, SIP può essere complesso da configurare e gestire, specialmente quando si tratta di attraversare NAT e problemi di firewall. Tuttavia, la sua versatilità, scalabilità e il supporto esteso nell'industria lo rendono una scelta popolare per VoIP e comunicazioni multimediali.
Metodi SIP
I metodi SIP principali definiti in RFC 3261 includono:
INVITE: Usato per inizializzare una nuova sessione (chiamata) o modificare una esistente. Il metodo INVITE trasporta la descrizione della sessione (tipicamente utilizzando SDP) per informare il destinatario sui dettagli della sessione proposta, come tipi di media, codec e protocolli di trasporto.
ACK: Inviato per confermare la ricezione di una risposta finale a una richiesta INVITE. Il metodo ACK garantisce l'affidabilità delle transazioni INVITE fornendo un riconoscimento end-to-end.
BYE: Usato per terminare una sessione stabilita (chiamata). Il metodo BYE è inviato da una delle parti nella sessione per indicare che desiderano terminare la comunicazione.
CANCEL: Inviato per annullare una richiesta INVITE in sospeso prima che la sessione sia stabilita. Il metodo CANCEL consente al mittente di annullare una transazione INVITE se cambia idea o se non riceve risposta dal destinatario.
OPTIONS: Usato per interrogare le capacità di un server SIP o di un agente utente. Il metodo OPTIONS può essere inviato per richiedere informazioni su metodi supportati, tipi di media o altre estensioni senza effettivamente stabilire una sessione.
REGISTER: Usato da un agente utente per registrare la sua posizione attuale con un server di registrazione SIP. Il metodo REGISTER aiuta a mantenere un mapping aggiornato tra l'URI SIP di un utente e il suo indirizzo IP attuale, consentendo il routing e la consegna delle chiamate.
Nota che per chiamare qualcuno non è necessario utilizzare il REGISTER per nulla.
Tuttavia, è possibile che per effettuare un INVITE il chiamante debba autenticarsi prima o riceverà una risposta 401 Unauthorized
.
Oltre a questi metodi principali, ci sono diversi metodi di estensione SIP definiti in altri RFC, come:
SUBSCRIBE: Definito in RFC 6665, il metodo SUBSCRIBE è utilizzato per richiedere notifiche sullo stato di una risorsa specifica, come la presenza di un utente o lo stato della chiamata.
NOTIFY: Anche definito in RFC 6665, il metodo NOTIFY è inviato da un server per informare un agente utente sottoscritto su modifiche dello stato di una risorsa monitorata.
REFER: Definito in RFC 3515, il metodo REFER è utilizzato per richiedere che il destinatario esegua un trasferimento o faccia riferimento a un terzo. Questo viene tipicamente utilizzato per scenari di trasferimento di chiamata.
MESSAGE: Definito in RFC 3428, il metodo MESSAGE è utilizzato per inviare messaggi istantanei tra agenti utente SIP, consentendo la comunicazione basata su testo all'interno del framework SIP.
UPDATE: Definito in RFC 3311, il metodo UPDATE consente di modificare una sessione senza influenzare lo stato del dialogo esistente. Questo è utile per aggiornare i parametri della sessione, come codec o tipi di media, durante una chiamata in corso.
PUBLISH: Definito in RFC 3903, il metodo PUBLISH è utilizzato da un agente utente per pubblicare informazioni sullo stato dell'evento su un server, rendendolo disponibile ad altre parti interessate.
Codici di Risposta SIP
1xx (Risposte Provvisorie): Queste risposte indicano che la richiesta è stata ricevuta e il server sta continuando a elaborarla.
100 Trying: La richiesta è stata ricevuta, e il server sta lavorando su di essa.
180 Ringing: Il chiamato sta venendo avvisato e risponderà alla chiamata.
183 Session Progress: Fornisce informazioni sul progresso della chiamata.
2xx (Risposte di Successo): Queste risposte indicano che la richiesta è stata ricevuta, compresa e accettata con successo.
200 OK: La richiesta è stata completata con successo, e il server l'ha soddisfatta.
202 Accepted: La richiesta è stata accettata per l'elaborazione, ma non è ancora stata completata.
3xx (Risposte di Reindirizzamento): Queste risposte indicano che è necessaria un'ulteriore azione per soddisfare la richiesta, tipicamente contattando una risorsa alternativa.
300 Multiple Choices: Ci sono più opzioni disponibili, e l'utente o il client deve sceglierne una.
301 Moved Permanently: La risorsa richiesta è stata assegnata a un nuovo URI permanente.
302 Moved Temporarily: La risorsa richiesta è temporaneamente disponibile presso un URI diverso.
305 Use Proxy: La richiesta deve essere inviata a un proxy specificato.
4xx (Risposte di Errore del Cliente): Queste risposte indicano che la richiesta contiene una sintassi errata o non può essere soddisfatta dal server.
400 Bad Request: La richiesta era malformata o non valida.
401 Unauthorized: La richiesta richiede l'autenticazione dell'utente.
403 Forbidden: Il server ha compreso la richiesta ma si rifiuta di soddisfarla.
404 Not Found: La risorsa richiesta non è stata trovata sul server.
408 Request Timeout: Il server non ha ricevuto una richiesta completa entro il tempo in cui era disposto ad attendere.
486 Busy Here: Il chiamato è attualmente occupato e non può rispondere alla chiamata.
5xx (Risposte di Errore del Server): Queste risposte indicano che il server non è riuscito a soddisfare una richiesta valida.
500 Internal Server Error: Il server ha riscontrato un errore durante l'elaborazione della richiesta.
501 Not Implemented: Il server non supporta la funzionalità richiesta per soddisfare la richiesta.
503 Service Unavailable: Il server non è attualmente in grado di gestire la richiesta a causa di manutenzione o sovraccarico.
6xx (Risposte di Fallimento Globale): Queste risposte indicano che la richiesta non può essere soddisfatta da nessun server.
600 Busy Everywhere: Tutte le destinazioni possibili per la chiamata sono occupate.
603 Decline: Il chiamato non desidera partecipare alla chiamata.
604 Does Not Exist Anywhere: La risorsa richiesta non è disponibile in nessun punto della rete.
Esempi
Esempio di SIP INVITE
Esempio di REGISTRAZIONE SIP
Il metodo REGISTER viene utilizzato nel Protocollo di Iniziazione della Sessione (SIP) per consentire a un agente utente (UA), come un telefono VoIP o un softphone, di registrare la propria posizione presso un server di registrazione SIP. Questo processo consente al server di sapere dove instradare le richieste SIP in arrivo destinate all'utente registrato. Il server di registrazione fa generalmente parte di un server proxy SIP o di un server di registrazione dedicato.
Ecco un esempio dettagliato dei messaggi SIP coinvolti in un processo di autenticazione REGISTRAZIONE:
Richiesta REGISTER iniziale da UA al server di registrazione:
Questo messaggio di REGISTRAZIONE iniziale viene inviato dall'UA (Alice) al server del registrar. Include informazioni importanti come la durata di registrazione desiderata (Scade), l'SIP URI dell'utente (sip:alice@example.com), e l'indirizzo di contatto dell'utente (sip:alice@192.168.1.100:5060).
Risposta 401 Non autorizzato dal server del registrar:
Il server del registrar risponde con un messaggio "401 Unauthorized", che include un'intestazione "WWW-Authenticate". Questa intestazione contiene le informazioni necessarie affinché l'UA possa autenticarsi, come il dominio di autenticazione, nonce e algoritmo.
Richiesta di REGISTRAZIONE con credenziali di autenticazione:
L'UA invia un altro richiesta REGISTER, questa volta includendo l'header "Authorization" con le credenziali necessarie, come il nome utente, il dominio, il nonce e un valore di risposta calcolato utilizzando le informazioni fornite e la password dell'utente.
Ecco come viene calcolata la risposta di autorizzazione:
Risposta di registrazione avvenuta con successo dal server del registrar:
Dopo che il server del registrar verifica le credenziali fornite, invia una risposta "200 OK" per indicare che la registrazione è avvenuta con successo. La risposta include le informazioni di contatto registrate e il tempo di scadenza della registrazione. A questo punto, l'agente utente (Alice) è registrato con successo presso il server del registrar SIP e le richieste SIP in arrivo per Alice possono essere instradate all'indirizzo di contatto appropriato.
Esempio di Chiamata
Non è menzionato, ma l'Utente B deve aver inviato un messaggio REGISTER a Proxy 2 prima di poter ricevere chiamate.
Last updated