Tra le nozioni fondamentali da apprendere per chi si avvicina al mondo delle chiamate VoIP con il protocollo SIP, vi sono quelle relative agli scenari tipici delle conversazioni telefoniche SIP. Durante il percorso formativo della VoIP Academy VoipVoice, le prime nozioni che normalmente forniamo ai frequentanti sono relative alla lingua parlata dal protocollo SIP e alla sintassi utilizzata. Il tutto è meno complicato di quanto potrebbe sembrare ed è fondamentale per comprendere il funzionamento di qualunque telefono o centralino IP. Conoscere il Protocollo SIP consente di utilizzare con facilità qualunque dispositivo, a prescindere dall’interfaccia di configurazione utilizzata.
In altri articoli di approfondimento abbiamo già esaminato le Richieste e le Riposte SIP che costituiscono la base di funzionamento del protocollo. Abbiamo inoltre osservato la Struttura di un tipico messaggio SIP e quella della sezione SDP.
Dopo aver appreso le regole di base del protocollo SIP, la prima cosa da fare è quella di analizzare i flussi tipici di una chiamata VoIP che è normalmente organizzata in messaggi di richiesta, alternati a messaggi di risposta. L’INVITE è il messaggio di richiesta tipico con il quale si avvia una chiamata. I tipici messaggi di richiesta per la chiusura di una chiamata, sono invece BYE e CANCEL. Oggi vorrei soffermarmi proprio su queste due tipologia di richiesta.
Il CANCEL informa Alessia che Raffaele sta concludendo la sessione prematuramente e che Alessia deve fare lo stesso dal suo lato. In altre parole, il telefono di Alessia deve smettere di squillare e tornare nello stato di inattività.
In questa situazione è fondamentale rendersi conto che il 200 OK che segue immediatamente dopo la richiesta di CANCEL, non è riferito alla richiesta iniziale di INVITE ma è la risposta con la quale Alessia riconosce di aver ricevuto il CANCEL (Annullamento) e di aver iniziato il processo di smantellamento della sessione. Questo processo viene eseguito interrompendo lo squillo e restituendo una risposta SIP 487 (Richiesta Terminata) a Raffele. Il 487 è la risposta finale per la sequenza INVITE. Questo fa sì che Raffaele risponda con un ACK di conferma.
È assolutamente fondamentale che la risposta di 487 venga inviata. In caso contrario, Raffaele (e qualsiasi proxy tra Raffaele e Alessia) non rilascerebbe correttamente la sessione, facendo in modo che la chiamata rimanga “sospesa”.
Chiusura di una chiamata con BYE (sessione stabilita)
Raffaele ha chiamato Alessia e Alessia ha risposto. Hanno parlato per un po’ di tempo e, alla fine Alessia ha salutato e riagganciato. La sessione è iniziata con un INVITE e si è conclusa con un BYE. Si tratta di una situazione abbastanza tipica. Si noti che BYE viene utilizzato per chiudere una sessione stabilita tra i due interlocutori. In linguaggio SIP, una sessione si definiste “stabilita” quando l’INVITE ha ricevuto una risposta finale di 200 OK.
Chiusura di una chiamata con CANCEL (sessione non stabilita)
Diamo ora uno sguardo a uno scenario diverso. Immaginate che Raffaele chiami Alessia, ma questa volta Alessia non possa risponde al telefono. Raffaele potrebbe attendere che la chiamata raggiunga il timeout, ma non ha il tempo di attendere e quindi riattacca semplicemente. Cosa accade in questo caso? Abbiamo visto che la richiesta di BYE viene usata per concludere (rilasciare) una sessione stabilita. Chiaramente questa chiamata non ha ricevuto una risposta finale di 200 OK, ma solo risposte provvisorie di 100 Trying (tentativo in corso) e 180 (squillo in corso). Il telefono di Alessia sta quindi squillando, in virtù del messaggio di risposta 180 (ringing). È qui che entra in gioco la richiesta di CANCEL (ANNULLA). A differenza di un BYE, CANCEL chiude una sessione che non ha ancora ricevuto una risposta finale. Il Flusso di richieste e risposte SIP avrà questo aspetto: