Questo documento tratta di sistemi VoIP. I recenti avvenimenti come la diffusione di Internet a basso costo, la nuova integrazione di di processori dedicati per la compressione della voce (vedi DSP), hanno cambiato le esigenze del generico utente, permettendo alla tecnologia VoIP di diffondersi. Questo howto cerca di tracciare le linee guida dell'architettura VoIP.
Sono ben accolti suggerimenti e critiche alla @fatamorgana mia Email
Copyright (C) 2000,2001 Roberto Arcomano. This document is free; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This document is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You can get a copy of the GNU GPL here
20-30 anni fa Internet non esisteva. Le comunicazioni interattive si basavano sul telefono, ai costi delle linee PSTN.
Lo scambio di dati era molto costoso (soprattutto per lunghe distanze) e nessuno immaginava al video interattivo (esisteva soltanto la televisione, che, com'é noto, non é interattiva).
Pochi anni fa abbiamo assistito ad alcuni importanti fenomeni: PCs diffusi a larga scala, nuove tecnologie per comunicare come i telefoni cellulari e, finalmente, la grande rete: Internet; la gente ha iniziato ad utilizzare i primi servizi email, chat, ecc. e il business é rinato con il web permettendo alle persone di acquistare prodotti via Internet con un " click" .
Oggi assistiamo ad una vera e propria rivoluzione nel campo della comunicazione: tutti iniziano ad usare il PC con Internet nel lavoro e nel tempo libero per scambiare dati (come immagini, suoni, documenti) e, in alcuni casi, per parlare usando applicativi come Microsoft Netmeeting o Internet Phone. In particolare inizia a diffondersi un'idea comune che potrebbe rappresentare il futuro e che permette la comunicazione vocale in tempo reale: VoIP.
Non possiamo prevedere il futuro, ma lo immaginiamo con molti computers, Internet quasi ovunque ad alta velocità e persone che dialogano tra loro (audio and video) in tempo reale. Dobbiamo soltanto sapere quale mezzo si utilizzerà: UMTS, VoIP (con l'estensione video) o altro ancora? Comunque sia bisogna accettare il fatto che Internet é cresciuta in una maniera impressionante negli ultimi anni, é gratis (al meno dal punto di vista di " mezzo internazionale" ) e potrebbe essere il giusto mezzo di comunicazione del futuro.
VoIP sta' per 'V'oice 'o'ver 'I'nternet 'P'rotocol. Come dice il termine VoIP prova a far passare la voce (prettamente quella umana) attraverso i pacchetti IP e in definitiva attraverso Internet. La tenologia VoIP può avvalersi di schede hardware acceleratrici per raggiungere tale scopo ed é possibile il suo l'utilizzo in ambiente PC.
Molti anni fa é stato scoperto che per mandare un generico segnale lontano era possibile utilizzare il formato digitale: prima di mandarlo dobbiamo digitalizzarlo con un ADC (convertitore analogico-digitale), trasmetterlo, e trasformarlo di nuovo in formato analogicon con un DAC (convertitore digitale-analogico) per utilizzarlo.
VoIP lavoro proprio in questo modo, digitalizzano la voce i pacchetti, mandandoli in rete e riconvertendoli in voce una volta giunti a destinazione.
I vantaggi del formato digitale sono notevoli: possiamo comprimere i dati, instradarli (utilissimo su Internet), convertirli nuovamente in un formato più consono al mezzo utilizzato e così via; sappiamo anche che il segnale digitale é più " resistente" ai disturbi rispetto a quello analogico (vedi GSM contro TACS).
Le reti TCP/IP sono costituite di pacchetti IP contenenti un'intestazione (per controllare la comunicazione) e di una parte dati: VoIP utilizza questo paradigma per attraversare la rete ed arrivare a destinazione.
Voce (sorgente) - - ADC - - - - Internet - - - DAC - - Voce (dest)
Quando usi la linea telefonica, si paga una tariffa dipendente dal tempo utilizzato ad un gestore di telefonia fissa (o mobile): più tempo si sta' e più si paga. Inoltre é possibile parlare soltanto con una persona alla volta.
Al contrario, con la tecnologia VoIP puoi parlare tutto il tempo che vuoi (l'importante é che anche l'altra persona sia connessa ad Internet nello stesso istante), a che distanza vuoi (senza differenza di costo) e con la possibilità di parlare con più persone contemporaneamente (la cosiddetta conferenza).
Se non sei ancora convinto considera che, nello stesso istante, puoi scambiare dati con le stesse persone, mandando immagini, grafici e video e documenti.
Sfortunatamente vi sono alcune problematiche di carattere tecnico nell'interazione tra l'architettura VoIP e Internet.Come si può facilmente immaginare, la comunicazione vocale richiede una sorta di tempo reale per funzionare bene (non si può parlare, aspettare alcuni secondi ed ascoltare la risposta in ritardo): questo, però va in contrasto con la filosofia architetturale di Internet che può essere composta di molti routers (computers utilizzati per instradare pacchetti IP), circa 20-30 o più e che può portare ad un tempo medio di accesso (RTT, round trip time) molto elevato rendendo necessarie delle modifiche strutturali.
Nei prossimi capitoli proveremo a capire come risolvere questo grosso problema. In generale, però dobbiamo essere consci del fatto che é molto difficile " garantire" una banda su Internet per le applicazioni multimediali.
Ecco alcune importanti informazioni sulla tecnologia VoIP, necessarie per comprenderla bene.
Per configurare una comunicazione VoIP abbiamo bisogno:
Architettura base Voce )) ADC - Algoritmo di compressione - Assembl. RTP in TCP/IP ----- ----> | <---- | Voce (( DAC - Algoritmo di decompress. - Disass. RTP da TCP/IP -----
Questo viene fatto dall'hardware, tipicamente da un ADC integrato.
Oggi pressoché ogni scheda audio permette di convertire in 16 bit una banda di 22050 Hz (per il campionamente della quale abbiamo bisogno di 44100 Hz per il teorema del campionamento) ottendendo una velocità di 2 bytes * 44100 (campioni al secondo) = 88200 Bytes/s, 176.4 kBytes/s per i flussi dati stereo.
Per il VoIP non abbiamo certamente bisogno di 22 kHz di banda (ne', tantomento, di 16 bit di risoluzione dei campioni): vediamo allora quali codifiche utilizzare.
Vediamo quali formati di digitalizzazione e compressione utilizziamo.
PCM, Pulse Code Modulation, Standard ITU-T G.711
ADPCM, Adaptive differential PCM, Standard ITU-T G.726
Converte soltanto la differenza tra il pacchetto attuale e quello precedente richiedendo 32 kbps (vedi Standard ITU-T G.726).
LD-CELP, Standard ITU-T G.728 CS-ACELP, Standard ITU-T G.729 and G.729a MP-MLQ, Standard ITU-T G.723.1, 6.3kbps, Truespeech ACELP, Standard ITU-T G.723.1, 5.3kbps, Truespeech LPC-10, fino a 2.5 kbps!!
Gli ultimi protocolli sono i più significativi perché garantiscono un basso utilizzo di banda utilizzando metodi di codifica alla sorgente: inoltre le codifiche G.723.1 hanno un MOS molto elevato (Mean Opinion Score, utilizzato per misurare la fedeltà vocale) ma attenzione alle prestazioni richieste, finoa 26 MIPS (milioni di istruzioni al secondo)!
Adesso che abbiamo i dati " grezzi" , per incapsularli nello stack TCP/IP, seguiamo la seguente struttura:
VoIP data packets RTP UDP IP I,II layers
I Pacchetti di voce risiedono in pacchetti RTP (Protocollo di trasporto Real-Time) che a loro volta giacciono su pacchetti UDP-IP.
Prima di tutto notiamo che VoIP non utilizza il protocollo TCP in quanto troppo pesante per le applicazioni multimediali, quindi l'unica alternativa é l'UDP.
Tuttavia, nei pacchetti UDP, non possiamo ordinare i pacchetti in ordine di arrivo (che é una necessità importantissima nel VoIP) perché non vi é il concetto di " connessione" , ogni pacchetto é indipendente dall'altro (concetto di datagramma); quindi dobbiamo introdurre un nuovo protocollo, l' RTP, capace di gestire queste problematiche.
Real Time Transport Protocol 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |V=2|P|X| CC |M| PT | sequence number | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | timestamp | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | synchronization source (SSRC) identifier | +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ | contributing source (CSRC) identifiers | | .... | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Dove:
Per una descrizione approfondita del protocollo RTP e di tutte le applicazioni relative si veda i relativi RFCs 1889 e 1890 .
Nell'ambiente VoIP vengono utilizzati altri protocolli, come l'RSVP, che può gestire la Qualità del Servizio (QoS).
RSVP é un protocol di segnalazione che permette di riservare una certa quantità di banda e di latenza massima in ogni nodo (router) di rete attraversato che lo supporta.
Per informazioni dettagliate sull'RSVP si veda l' RFC 2205
Abbiamo detto molte volte che le applicazioni VoIP richiedono un flusso di dati in tempo reale.
Sfortunatamente, TCP/IP non può garantire tale flusso (può solo effettuare il massimo sforzo per cercare di conseguirlo). Abbiamo quindi bisogno di introdurre degli artifizi e delle politiche di schedulazione che possano gestire i pacchetti in OGNI router che attraversano.
Ecco allora:
Una esaustiva descrizione sulla QoS può essere trovata sui Differentiated Services
presso lo IETF.
Il protocollo H323 viene utilizzato, ad esempio, dall'applicativo Microsoft Netmeeting per creare chiamate VoIP.
Questo protocollo permette ad una serie di elementi di " parlare"
tra loro:
H323 permette anche la gestione del video.
Per quanto riguarda la voce, l'h323 é compatibile con le codifiche G.711, G.722, G.723, G.728 e G.729, mentre per il video supporta i protocolli h261 and h263.
Maggiori informazioni sul protocollo h323 sono disponibili sugli Standards presso Openh323 , su at questo sito web h323 , mentre la descrizione dello standard ufficiale é reperibile dalle ITU H-series Recommendations .
L'h323 viene implementato in molto prodotti software come Microsoft Netmeeting , Net2Phone , DialPad , ... e altri prodotti freeware che puoi trovare sul sito web Openh323 .
Per creare un piccolo sistema VoIP hai bisogno del seguente hardware:
Tutto questo deve essere presente in 2 copie in quanto vogliamo simulare una comunicazione tra 2 entità.
Gli strumenti sopra citati sono i minimi richiesti per una connessione VoIP: più avanti vedremo che avremo bisogno di un hardware maggiore per avere successo una situazione reale su Internet
La scheda audio deve necessariamente essere full duplex, altrimenti non sarà possibile ascoltare nulla mentre si parla!
In aggiunta si possono utilizzare schede acceleratrici per permettere la gestione di un flusso dati compresso (see Par 4.3).
Possiamo usare schede acceleratrici per ottimizzare il protocollo di trasmissione. Due di queste (ed anche le uniche direttamente gestire dal kernel di Linux fino adesso) sono
La Quicknet PhoneJack é una scheda audio che utilizza algoritmi standard per la compressione di streams audio quali G.723.1 ed altri (section 4.3) fino a 4.1 kbps di velocità
Può essere connessa direttamente ad una cornetta (POTS port) o ad una coppia microfono - altoparlante.
E' disponibile con slots ISA e PCI.
La Quicknet LineJack lavora come la PhoneJack ma ha funzionalità addizionali (vedi più avanti).
Per ulteriori informazioni si veda il sito web Quicknet .
La Quicknet LineJack può essere connessa ad una linea PSTN permettondo di creare un gateway VoIP.
Dopodiché bisogna usare un software che ne permetta il controllo (vedi dopo).
Vediamo quale software possiamo installare utilizzando rispettivamente:
Sotto Win9x abbiamo il classico Microsoft Netmeeting oppure Internet Phone, DialPad e altri ancora mentre Quicknet ci offre il suo Internet Switchboard (scaricabile dal sito web Quicknet ) che utilizza, appunto, le schede Quicknet.
Esiste anche software libero scaricabile da OpenH323 .
Sotto Linux possiamo utilizzare soltanto il software libero (per il momento) sempre scaricabile da OpenH323 : simph323 o ohphone che può lavorare con l'hardware Quicknet.
Attenzione: tutto il codice sorgente Openh323 deve essere compilato in una directory home (oppure sarà necessario settare una variabile d'ambiente al valore opportuno). Il tempo di compilazione potrebbe essere molto elevato e potrebbe richiedere una quantità non indifferente di RAM (un Pentium 133 con 16 MB di ram non é consigliabile!).
Per gestire le caratteristiche di un gateway (far comunicare una rete VoIP con una rete PSTN) é necessario installare un qualche tipo di software:
Come gatekeeper:
In aggiunta riporto del software compatibile h323:
Qui vediamo come configurare le schede hardware acceleratrici sotto Linux e Windows.
Come abbiamo visto la Quicknet Phonejack é una scheda audio con proprietà di accelerazione VoIP. Supporta:
La PhoneJack é una scheda ISA (o PCI) da installare sul Pc. Può anche lavorare senza IRQ.
Sotto Windows bisogna installre:
tutto ciò si trova sul sito web Quicknet
Dopo che Internet Switchboard é stato installato, hai bisogno di registrarti alla Quicknet per poter usufruire di tutte le funzionalità della tua scheda.
Quando alzi la cornetta Switchboard si sveglia e rimane in attesa del numero di telefono da comporre (direttamente dalla cornetta). In tal caso si può:
Internet Swichboard é compatibile h323, quindi puoi usare software commerciale come Microsoft Netmeeting dall'altro " capo" .
Al posto di Internet Switchboard si può usare anche un applicativo free come openphone (con interfaccia grafica) o ohphone (linea di comando).
Sotto Linux devi installare:
Con Internet Switchboard (e anche con gli altri applicativi) puoi:
Questa scheda é molto simile alla precedente, e, in aggiunta, supporta le funzionalità di gateway. In effetti la Linejack presenta, oltre ai connettori classici della PhoneJack, anche un connettore per la linea telefonica PSTN.
L'unico appunto che vale la pena di sottolineare é la necessità di utilizzare un applicativo in grado di gestire anche tale linea PSTN: PSTNGw (for Linux and Windows) e Internet Switchboard .
In questo capitolo vedremo come configurare una sistema VoIP, semplice al principio, via via poi più complesso.
A (Win9x+Scheda audio) - - - B (Win9x+Scheda audio) 192.168.1.1 - - - 192.168.1.2 192.168.1.1 chiama 192.168.1.2.
A e B devono avere:
In questa prospettiva A può effettuare una chiamata h323 verso B (se B ha Netmeeting attivo) usando il suo indirizzo IP 192.168.1.2. Dopodiché B, se vuole, può rispondere e i pacchetti VoIP iniziano a transitare.
Se utilizzi Microsoft Windows in una lan, puoi chiamare una macchina utilizzando il servizio nomi NetBIOS, che può funzionare su NetBEUI o su TCP/IP. Tutto ciò di cui hai bisogno, quindi, é di chiamare il nome dell'altro computer per effettuare la connessione.
A - - - B 192.168.1.1 - - - 192.168.1.2 Mario - - - Paola Mario chiama Paola.
Tutto ciò é possibile in quanto la chiamata NetBIOS di Mario verso Paola viene convertita in chiamata IP.
Gli esempi sopra citati sono molto semplici da implementari ma scarsamente scalabili.
In una rete più grande quale Internet é impossibile effettuare chiamate con gli indirizzi, in quanto difficilmente conosco l'indirizzo IP del destinatario (che nella maggior parte dei casi, essendo dinamico, cambia ad ogni nuova connessione al provider). Oltretutto il servizio di nomi NetBIOS non funziona poiché i messaggi da esso usati sono di tipo broadcast, che notoriamente non attraversano i routers.
L'idea dei nomi NetBIOS può essere riutilizzata anche in ambiente Internet con l'ausilio di un server WINS: le macchine possono essere configurate in modo tale da chiedere ad un unico server la risoluzione dei nomi in indirizzi.
I PCs che utilizzano lo stesso server WINS saranno in grado di comunicare fra loro.
A (Server WINS é S) - - - - I - - - - B (Server WINS é S) N T E - - - - - S (Server WINS) C (Server WINS é S) - - - - R N E - - - - D (Server WINS é S) T Comunicazione su Internet
A, B, C e D appartengono a sottoreti differenti, ma possono chiamarsi l'un l'altro utilizzando i loro nomi NetBIOS. Il requisito fondamentale, come precedentemento detto é che tutti gli hosts utilizzino la stessa macchina come Server WINS (S appunto).
Nota: I servers WINS non hanno performance eccezionali dato che si basano sul protocollo NetBIOS (che a livello locale continua a fare uso dei broadcasts) e dovrebbe essere utilizzato soltanto per unire piccole e poche sottoreti.
Un problema di carenza di indirizzi IP viene normalmente risolto utilizzando il cosiddetto masquering (anche chiamato NAT, network address translation): esiste soltanto un IP pubblico (che Internet può " vedere" direttamente), le altre macchine vengono " mascherate"
utilizzando tale IP.
A - - - B - - - Router con NAT - - - Internet C - - - Questo non funziona
Nell'esempio A,B e C possono navigare, pingare, usare posta, news e altri servizi su Internet, ma NON possono fare una chiamata VoIP verso l'esterno. Questo perché il protocollo h323 manda l'indirizzo IP a livello applicazione, quindi la risposta non arriverà mai al chiamante (che utilizza un indirizzo IP privato).
Soluzioni:
A - - - Router con NAT B - - - + - - - Internet C - - - modulo ip_masq_h323 Questo funziona
A - - - B - - - PhonePatch - - - Internet C - - - Questo funziona
Con Linux (usato come terminale h323) puoi sperimentare tutte le prove fatte precedentemente eccetto quelle dietro un router-NAT con il modulo ip_masq_h323 poiché (come già detto) Ohphone non funziona con tale modulo: sarai quindi costretto ad usare Phonepatch. Par 5.7
" ohphone -l|--listen [opzioni]"
" ohphone [opzioni]... indirizzo"
Inoltre, quanto lanciamo ohphone, possiamo digitare dei comandi direttamente sull'interprete (come, ad esempio, decrementare l'AEC, Automatic Echo Cancellation).
Puoi provare le funzionalità di gatekeeper.
Esempio (Terminale H323) A - - - \ (Terminale H323) B - - - D (Gatekeeper) / (Terminale H323) C - - - Configurazione del Gatekeeper
Notiamo che il gatekeeper é soltanto in grado di risolvere i nomi in indirizzi, non può unire hosts che non già siano raggiungibili (a livello IP), in altre parole il gatekeeper non può operare da router NAT.
Puoi trovare il gatekeeper qui : sono richieste le librerie Openh323 .
E' necessario lanciare il programma almeno con l'opzione -d (come demone) o -x (per eseguirlo in foreground).
E' anche disponibile un file di configurazione (.ini) qui .
Come abbiamo già detto, un gateway é un'entità che può far comunicare una rete VoIP ad una PSTN permettendoci di effettuare una chiamata da Internet verso un comune telefono.Abbiamo quindi bisogno della scheda gateway (Quicknet LineJack) e del relativo software:
Sul sito web OpenH323 troviamo:
Se l'eseguibile non funziona avrai bisogno di scaricare i sorgenti e compilarli dopo aver opportunamente scaricato e compilato anche le librerie Openh323 , entrambi su una home directory.
Da tutto quello che abbiamo detto non abbiamo ancora risolto i problemi legati alla banda, come cioé creare un flusso di dati in tempo reale. Sappiamo che non possiamo risolverlo finché non abilitiamo i protocolli per la gestione della banda su ogni router che attraversiamo, allora cosa possiamo fare?
Prima di tutto cerchiamo di utilizzare l'lagoritmo di compressione che più ci aiuta ad occupare meno banda possibile (come, ad esempio, l' LPC-10 che riesce a consumare appena 2.5 kbps, circa 313 bytes/s).
Dopo di ché iniziamo a classificare i nostri pacchetti (iniziando dal campo TOS del protocollo IP), con il valore più alto possibile coì da ottenere dai router la priorità massima possibile.
Importante: tutto questo NON ci mette al sicuro garantendoci una banda sufficiente per la nostra conversazione, perché finché non si crea un'infrastruttura in grado di gestire shaping, prenotazione di banda e così via non sarà mai possibile avere una garanzia assoluta, in effetti TCP/IP non é un protocollo real time.
A possible solution could be starts with little WAN at guaranteed bandwidth and get larger step by step.
Possiamo infine notare un'ultima cosa: anche i cosiddetti servizi garantiti come le linee PSTN non sono in grado di gestire tutti clienti che hanno nello stesso istante: per esempio una cella GSM non può sopportare più di un centinaio o un migliaio di utenti alla volta.
Comunque sia il servizio VoIP può essere considerato un buon punto di partenza, in alternativa al servizio offerto dalle linee PSTN.