Il Protocollo SDP (Session Description Protocol) è definito dalla IETF mediante la RFC 4566. In genere questo protocollo viene inserito all’interno di un altro protocollo con lo scopo di definire i parametri per lo scambio dei flussi multimediali.
Una chiamata VoIP effettuata con il protocollo SIP utilizza, nel suo complesso altri protocolli oltre a quello SIP. In particolare, nel complesso di una chiamata VoIP SIP, dobbiamo sempre considerare almeno 4 protocolli che lavorano in sinergia tra di loro, per permettere l’esecuzione di una chiamata SIP:
- SIP (Session Initiation Protocol): avvia, modifica e conclude la chiamata.
- SDP (Session Description Protocol): definisce i parametri per lo scambio dei media (flussi audio o audio-video).
- RTP (Real time Transfer Protocol): si occupa dell’effettivo trasporto dell’audio o del video.
Il Protocollo SIP utilizza al proprio interno il protocollo SDP (Session Description Protocol) al fine di definire i parametri per lo scambio dei flussi multimediali tra due o più dispositivi (endpoint). Il protocollo SIP non si occupa quindi di trasportare fisicamente l’audio della chiamata. Esso delega al Protocollo SDP la definizione dei parametri di chiamata (IP, porta, codec audio utilizzati da ognuno dei due endpoint della chiamata).
Scopi del Protocollo SDP in ambito SIP
Nell’ambito del protocollo SIP, lo scopo del protocollo SDP in esso incapsulato, è quello di definire le informazioni per ciascuno dei due punti di comunicazione multimediale. Il protocollo SDP è presente nella sezione “body message” di alcuni messaggi SIP di richiesta e di risposta (Es. Invite, 183 e 200…). Le informazioni principali che vengono scambiate sono:
- L’indirizzo IP sul quale ciascuna parte si attende di ricevere il flusso multimediale
- La porta sulla quale ciascuna parte si attende di ricevere il flusso multimediale
- Il tipo di media che ciascuna parte si aspetta di ricevere. Tipicamente, in ambito SIP si tratta di audio
- La tipologia di protocollo con il quale ciascuna delle parti si aspetta di scambiare informazioni. In ambito SIP, lo scambio avviene tipicamente in SDP
- La tipologia di codec audio da impiegare per la compressione e la trasmissione.
La struttura del Protocollo SDP
Il protocollo SDP può essere suddiviso in tre parti. La prima parte annuncia i dettagli della sessione ed è denominata “Descrizione della sessione”; la seconda parte è denominata “Descrizione temporale” che annuncia i dettagli sui tempi relativi alla sessione; l’ultima parte è denominata “Descrizione dei media”, che comunica i dettagli sul media che verrà trasmesso in streaming in una determinata sessione annunciata. Di seguito è riportato un elenco delle sintassi comunemente utilizzate nel protocollo SDP
Descrizione della sessione
v= (versione del protocollo) o= (proprietario/creatore e identificativo di sessione). s= (nome dellasessione) i= (informazioni sulla sessione)* u= (URI di descrizione)* e=(indirizzo email – dettagli di contatto)* p= (numero di telefono – recapiti)* c= (informazioni sulla connessione - non richieste se incluse nella descrizione del supporto)* b= (informazioni sulla larghezza di banda della sessione)* z= (regolazioni fuso orario)* k= (chiave di crittografia)* a= (zero o più righe di attributo di sessione)*
Descrizione Temporale
t= (tempo in cui la sessione è attiva) r= (cicli di ripetizioni)*
Descrizione del Media
m= (nome del media/indirizzo di trasporto) i= (titolo del media)* c= (informazioni sulla connessione – non richieste se incluse nella descrizione della sessione)* b= (informazioni sulla larghezza di banda)* k= (chiave di crittografia)* a= (zero o più righe di attributi multimediali)*
* Campi opzionali
Significato e Descrizione dei singoli Campi impiegati nel Protocollo SDP
Descrizione della Sessione
- v=<versione> : specifica la versione del protocollo di descrizione della sessione. Come specificato nella RFC 4566, per il momento esiste una sola versione, ovvero la Versione 0. Non esistono versioni minori.
- o=<username><sess-id><sess-version><nettype><addrtype><unicast-address> Dettagli sull’originatore e identificazione della sessione.
<username> – Il login dell’utente. Il NON DEVE contenere spazi
<sess-id> – Una stringa numerica utilizzata come identificatore univoco per la sessione
<sess-version> – Una stringa numerica usata come numero di versione per questa descrizione della sessione
<nettype> – Stringa di testo, che specifica il tipo di rete, ad es. IN per internet
<addrtype> – Stringa di testo che specifica il tipo di indirizzo dell’originator EgIP4 o IP6
<unicast-address> – L’indirizzo della macchina da cui ha origine la sessione, che può essere sia l’FQDN che l’indirizzo IP. - s=<nome della sessione> – È possibile specificare un solo nome sessione per la descrizione della sessione. Non deve essere vuoto; pertanto, se non viene assegnato alcun nome alla sessione, è necessario utilizzare un singolo spazio vuoto come nome della sessione.
- i=<descrizione della sessione> – Nella descrizione della sessione è possibile specificare un solo campo “i” a livello di sessione. Il campo “i” può essere utilizzato nella sessione o nella descrizione dei media. È principalmente destinato all’etichettatura dei flussi multimediali quando viene utilizzato nella sezione di descrizione dei media. Può essere una descrizione leggibile dall’uomo.
- u=<uri> – L’URI (Uniform Resource Identifier) specificato nel campo “u”, è un puntatore a informazioni aggiuntive sulla sessione.
- e=<indirizzo email>
- p=<numero-telefono> – Specifica le informazioni di contatto per la persona responsabile della conferenza.
- c=<nettype> <addrtype> <connection-address> – Le informazioni sulla connessione possono essere incluse nella descrizione della sessione o nella descrizione del supporto. Una descrizione di sessione DEVE contenere almeno un campo “c=” in ogni descrizione media o un singolo campo “c=” a livello di sessione
<nettype> Una stringa di testo che descrive il tipo di rete, ad es. IN per internet.
<addrype> Una stringa di testo che descrive il tipo di indirizzo utilizzato in connection-address; Es. IP4 o IP6.
<connection-address> Viene specificato un indirizzo IP multicast incluso TTL, ad es. 235.2.36.42/127 - b=<bwtype>:<bandwidth> – Il campo Bandwidth può essere utilizzato sia nella descrizione della sessione, specificando la larghezza di banda totale dell’intera sessione, sia può essere utilizzato anche nella descrizione media, per sessione media.
<bwtype> Il tipo di larghezza di banda può essere CT; limite superiore totale della larghezza di banda da utilizzare per la conferenza, o AS; specifica dell’applicazione, quindi sarà il concetto dell’applicazione di larghezza di banda massima.
<bandwidth> viene interpretato come kilobit al secondo per impostazione predefinita. - z=<adjustment time> <offset> <ora di regolazione> <offset> – Per programmare una sessione ripetuta che specifica un passaggio dall’ora legale all’ora solare o viceversa, è necessario specificare la differenza dall’ora di origine.
- k=<metodo>:<chiave di crittografia> – Se il canale è sicuro e affidabile, è possibile utilizzare SDP per trasmettere le chiavi di crittografia. È possibile specificare una chiave per l’intera sessione o per ogni descrizione del supporto.
<method> Indica il meccanismo che viene utilizzato per ottenere la chiave di crittografia da fonti esterne o dalla codifica della chiave data. Esistono diversi metodi, come prompt e URI.
<encryption key> La chiave di crittografia o, se l’URI viene utilizzato come metodo, l’URI da cui è possibile recuperare la chiave.> - a=<attributo>:<valore> – Gli attributi possono essere definiti a “livello di sessione” o “livello multimediale” o entrambi. Gli attributi a livello di sessione vengono utilizzati per pubblicizzare informazioni aggiuntive che si applicano alla conferenza nel suo insieme. Gli attributi a livello di media sono specifici per i media, cioè informazioni pubblicitarie sul flusso di media.
Descrizione del Tempo
- t=<start-time>:<value> – Specifica gli orari di inizio e fine di una sessione. Se una sessione è attiva a intervalli irregolari, è possibile utilizzare più voci di tempo.
- r=<intervallo di ripetizione> <durata attiva> <offset da ora di inizio> – Se una sessione deve essere ripetuta a intervalli fissi, viene utilizzato il campo “r”. Di default tutti i valori dovrebbero essere specificati in secondi, ma per rendere la descrizione più compatta, il tempo può essere dato anche in unità diverse, come giorni, ore o minuti; es. r=6g 2h 14m.
Descrizione del Media
- m=<media> <port>/<number of ports> <proto> <fmt> – Questo campo viene utilizzato nella sezione della descrizione del supporto per pubblicizzare le proprietà del flusso multimediale, come la porta che utilizzerà per la trasmissione, il protocollo utilizzato per lo streaming e il formato o codec.
<media> Utilizzato per specificare il tipo di media, generalmente può essere audio, video, testo ecc.
<porta> La porta a cui verrà inviato il flusso multimediale. È inoltre possibile specificare più porte se viene utilizzata più di 1 porta.
<proto> Il protocollo di trasporto utilizzato per lo streaming, ad esempio RTP (protocollo in tempo reale).
<fmt> Il formato del supporto inviato, ad esempio in quale codec è codificato il supporto; ad es. PCMU, GSM ecc.