Capitolo 4

Transcript

Capitolo 4
Capitolo 4
Sorgente streaming
Con l’evoluzione delle applicazioni multimediali e delle tecnologie di rete,
anche nel mondo della telefonia cellulare è cresciuta l’esigenza di poter
comunicare con un’integrazione sempre più ampia fra dati, voce,
animazioni e filmati portando a prodotti di rete multimediali quali la
telefonia, la televisione o la videoconferenza semplificando eventuali
applicazioni quali ad esempio l’apprendimento a distanza, la simulazione
distribuita, il telelavoro.
Per sviluppare questo settore è necessario occuparsi quindi della
comunicazione in tempo reale.
4.1 Protocolli per il traffico real time
Il trasferimento di dati in tempo reale pone di fronte a diverse
problematiche:
•
si richiede una larghezza di banda disponibile notevolmente più
elevata rispetto al tradizionale invio di testo e grafica;
•
non è permesso un tempo di latenza superiore ai 250 ms per non creare
disagio agli utenti, ma questo è complicato anche dal fatto che in caso
di congestione si è spesso costretti a perdere del tutto delle
informazioni generando fastidiosi “gap”;
58
4 – Sorgente streaming
•
le informazioni sono di tipo “bursty” e quindi non basta aumentare la
banda, ma va fatto un accurato dimensionamento dei buffer;
•
la disponibilità delle risorse necessarie non è sicura in ogni momento.
C’è da notare che per i dati in tempo reale l’affidabilità non è così
importante quanto invece la tempestività della consegna: in caso di
congestione della rete alcuni pacchetti possono andare persi e la qualità,
seppur inferiore, sarà in ogni caso accettabile, mentre se il protocollo
insiste nell’assicurare l’affidabilità, i pacchetti che vengono ritrasmessi
possono aumentare la congestione stessa e rallentare o bloccare del tutto
l’applicazione ricevente.
Per la comunicazione real time in Internet è stato introdotto un modello
avanzato chiamato “Integrated Services” che si basa essenzialmente su
cinque protocolli:
•
•
RSVP (Resource reSerVation Protocol): provvede a riservare le
risorse necessarie alla trasmissione;
SIP (Session Initiation Protocol): si occupa dell’apertura e della
chiusura delle connessioni;
•
RTP (Real-time Transport Protocol): gestisce l’effettivo trasferimento
dei dati;
•
RTCP (Real-time Control Protocol): consente
informazioni sulla qualità della trasmissione;
•
RTSP (Real Time Streaming Protocol): consente di controllare il
flusso delle informazioni trasmesse.
di
ottenere
4.1.1 Resource reSerVation Protocol (RSVP)
Il protocollo RSVP [15] ha la funzione di trasmettere le informazioni sulle
prenotazioni, da un nodo della rete all’altro. In ogni nodo, (computer o
router nel caso delle reti fisse), è installato un daemon (programma sempre
in esecuzione) RSVP che assegna le risorse di rete nel controllore di
59
4 – Sorgente streaming
traffico. Nel protocollo RSVP ci sono due tipi di messaggi importanti: i
messaggi Path ed i messaggi Resv. I primi sono trasmessi dalla sorgente
verso la destinazione, contengono informazioni sul flusso da trasmettere e
servono a stabilire il percorso che seguiranno i dati. Opzionalmente,
possono servire a reperire informazioni sulle caratteristiche del percorso
seguito dalla sorgente verso la destinazione, per dare maggiori
informazioni al ricevitore sul tipo di prenotazione da eseguire. I messaggi
Resv sono trasmessi nel senso contrario e servono ad eseguire la
prenotazione stessa.
4.1.2 Session Initiation Protocol (SIP)
SIP [16] è un protocollo di segnalazione di livello applicazione introdotto
dalla IETF. Esso è utilizzato per instaurare, modificare o chiudere
chiamate in tempo reale, come videoconferenze, attraverso reti di tipo IP,
cui possono partecipare anche parecchi utenti.
E’ un protocollo di tipo testuale che eredita molto da altri protocolli di
Internet, come SMTP (Simple Mail Transfer Protocol) e HTTP (Hypertext
Transfer Protocol).
Una caratteristica fondamentale di SIP è che è indipendente dal tipo di
protocollo utilizzato a livello trasporto, ma soprattutto è molto veloce:
impiega circa 1,5 roundtrip per instaurare una chiamata. In particolare,
quando sovrapposto al protocollo UDP, consente di ottenere particolari
semplificazioni per quanto riguarda il traffico multicast.
SIP si basa su di un’architettura di tipo client/server. Le entità principali
che costituiscono questo protocollo sono:
•
User Agent (UA);
•
SIP Proxy Server;
•
SIP Redirect Server;
•
Registrar.
60
4 – Sorgente streaming
Gli User Agent costituiscono i punti terminali (endpoints) dell’architettura
in esame e, nel momento in cui viene inviata una richiesta di servizio alla
rete, esso si comporta da client mentre funge da server quando deve
rispondere ad una richiesta pervenutagli dalla rete stessa.
I server intermedi tra i due User Agent sono in grado di svolgere le
funzioni di un Proxy o di un Redirect Server.
Nel primo caso il server riceve la richiesta avanzatagli dallo User Agent e
la inoltra a quello successivo (o eventualmente allo User Agent di
destinazione); inoltre, queste entità sono in grado di mantenere
informazioni circa l’accredito del costo del servizio che viene fornito.
Nel caso del Redirect Server, quest’ultimo non fa altro che rispondere alle
richieste avanzategli da un certo User Agent fornendo l’indirizzo del
server di destinazione. Inoltre i SIP server sono in grado di contattare
entità esterne per chiedere informazioni per il routing, o anche relative a
chi ha richiesto un certo servizio.
Il Registrar è l’entità presso cui uno User Agent si registra fornendo le
opportune informazioni; sia la richiesta di registrazione sia la conferma
della stessa avvengono secondo un protocollo non SIP.
La segnalazione che questo protocollo genera è costituita da messaggi che
possono essere di due tipi:
a) di richiesta;
b) di risposta.
Un messaggio di richiesta è costituito da:
•
tipo di richiesta (Request Line);
•
intestazione (Header);
•
corpo del messaggio (Message Body).
Un messaggio di risposta è costituito da:
•
stato in cui il server si trova (Status Line);
61
4 – Sorgente streaming
•
intestazione (Header);
•
corpo del messaggio (Message Body).
Nei messaggi di richiesta il tipo di richiesta e l’intestazione specificano le
caratteristiche del servizio, del protocollo utilizzato e gli indirizzi; il corpo
del messaggio può anche essere vuoto.
Per specificare il tipo di richiesta il protocollo utilizza la seguente
terminologia:
•
Invite: per invitare un utente a partecipare ad una chiamata;
•
Bye: per terminare una chiamata;
•
Option: viene utilizzato per richiedere al server informazioni circa le
sue capacità;
•
Ack: conferma che il client ha ricevuto la richiesta precedentemente
inviatagli;
•
Register: fornisce la mappa di risoluzione degli indirizzi in modo tale
che un server possa sapere dove si trova un certo utente;
•
Cancel: annulla una richiesta in precedenza avanzata ma senza
abbattere la connessione.
4.1.3 Real-time Transport Protocol (RTP)
Il terminale di trasmissione di un’applicazione multimediale aggiunge
sempre un campo di intestazione ai dati audio e video che intende
trasmettere, prima di passarli al protocollo di trasporto. Questi campi di
intestazione comprendono numeri di sequenza, etichette temporali di
sincronizzazione e altre informazioni utili; poiché quasi tutte le
applicazioni di rete multimediali hanno bisogno di informazioni di questo
tipo per offrire un servizio accettabile, è risultato utile definire una
struttura di pacchetto standardizzata, in modo da garantire
l’interoperabilità fra sistemi di videoconferenza prodotti da case differenti.
Tale standard è RTP [17] e fornisce informazioni di trasporto adatte a
62
4 – Sorgente streaming
quelle applicazioni che trasmettono dati audio, video o di simulazione in
tempo reale, offrendo servizi di rete unicast o multicast. RTP non richiede
allocazione di risorse e non garantisce qualità di servizio per i servizi in
tempo reale.
Inoltre, ammesso che i pacchetti arrivino a destinazione, non è comunque
detto che giungano nell’ordine con cui sono stati spediti.
Si consideri, ad esempio, l’uso di RTP per il trasporto della voce. Si
supponga che la sorgente vocale sia codificata con lo standard PCM a 64
kbps, sia cioè campionata, quantizzata e digitalizzata e inoltre che
l’applicazione raccolga i dati codificati in blocchi della durata di 20
millisecondi, ossia 160 byte a blocco. L’applicazione fa precedere ogni
unità dati da un’intestazione RTP, la quale contiene la codifica audio
utilizzata, un numero di sequenza e un’etichetta temporale (timestamp).
I dati insieme all’intestazione formano il pacchetto RTP.
Infine RTP fa sì che ogni sorgente, come videocamera o microfono, venga
assegnata un proprio flusso indipendente di pacchetti (stream).
4.1.4 Real Time Streaming Protocol (RTSP)
RTSP [18] è un protocollo di livello applicazione e il suo obiettivo è di
fornire dei servizi su audio e video allo stesso modo di come HTTP fa con
testo e grafica.
La sua struttura è per l’appunto simile a quella di HTTP, anche se ha
bisogno di alcune caratteristiche che si differenziano, fra cui:
•
ha bisogno del mantenimento di STATI (init, ready, playing,
recording);
•
sia il client sia il server possono fare delle richieste; non è quindi
asimmetrico.
RTSP consente di controllare la trasmissione sia di singoli flussi di dati
real time, sia di insiemi di flussi sincronizzati che compongono un unico
contenuto multimediale (ad esempio audio + video).
63
4 – Sorgente streaming
Come tutti i protocolli di comunicazione, anche in RTSP è possibile
distinguere due tipi differenti di messaggi, che godono di particolari
proprietà: richiesta dal client al server e risposta dal server al client.
Le richieste contengono i metodi, gli oggetti su cui stanno lavorando
questi ultimi e dei parametri che hanno lo scopo di descrivere
ulteriormente i metodi i quali risultano fra loro idempotenti a meno che
non sia esplicitato altrimenti. L’uso dei metodi inoltre permette di
richiedere che il media server conservi lo stato della comunicazione.
4.1.5 Real Time Control Protocol (RTCP)
Il protocollo RTCP [19] viene utilizzato nelle applicazioni di rete
multimediali insieme al protocollo RTP. L’uso di RTCP è particolarmente
utile nel caso di applicazioni multicast, in cui uno o più trasmettitori
inviano dati audio e video ad una molteplicità di ricevitori. I pacchetti
RTCP, data una sessione RTP, vengono trasmessi da ciascun partecipante
alla sessione a tutti gli altri.
I pacchetti RTCP si distinguono da quelli RTP in quanto non trasportano
dati di tipo audio o video, ma vengono spediti periodicamente e
contengono rapporti di trasmissione e ricezione. Tali rapporti forniscono
informazioni relative alla qualità di servizio della sessione, alla sorgente
dei dati e delle informazioni di tipo statistico utili all’applicazione, tra cui
il numero di pacchetti mandati, il numero di pacchetti perduti e il jitter di
interarrivo. In ogni caso, RTP non specifica cosa l’applicazione dovrebbe
fare con queste informazioni di feed-back. I trasmettitori, ad esempio,
potrebbero sfruttare le statistiche per modificare la loro frequenza di
trasmissione; i ricevitori invece per scopi diagnostici.
Per ogni flusso di pacchetti RTP che riceve, il partecipante ad una sessione
genera un rapporto di ricezione (Receiver Report). Quindi raggruppa tali
rapporti in un singolo pacchetto RTCP che viene poi inoltrato nella rete.
Per ogni flusso di pacchetti RTP che trasmette, il partecipante ad una
sessione crea e trasmette un pacchetto RTCP contenente un rapporto di
trasmissione (Sender Report). Infine per ogni flusso di pacchetti RTP
64
4 – Sorgente streaming
trasmesso, il trasmettitore crea e trasmette anche un pacchetto di
descrizione della sorgente (Source DEScription).
Infine, tutti i pacchetti RTCP possono essere concatenati in modo da
contenere rapporti di trasmissione, di ricezione o di descrizione delle
sorgenti.
4.2 Modelli di traffico
Esistono molti tipi di applicazioni ognuna con caratteristiche differenti;
esse generano flussi di dati che verranno poi trasmessi attraverso la rete.
Nel momento in cui si progetta una specifico sistema di comunicazione,
per simularne le prestazioni, si utilizzano tipi di traffico di differenti
applicazioni, modellati statisticamente.
Benché sia molto difficile emulare esattamente la generazione dei
pacchetti di tutte i possibili servizi e tutte le possibili applicazioni, esistono
alcuni modelli di traffico per le più importanti applicazioni IP.
Di particolare interesse sono le nuove applicazioni multimediali in virtù
delle loro caratteristiche di adattabilità (alle condizioni della rete mediante
opportune variazioni della codifica) e di interattività.
Il modello del traffico vocale, ad esempio, può essere descritto mediante
una catena di nascita e morte in cui il processo casuale degli arrivi delle
richieste di servizio abbia legge di distribuzione di Poisson e la durata
della connessione sia un ulteriore processo casuale con distribuzione
esponenziale.
La conversazione vocale può essere descritta da una sequenza di tratti di
segnale vocale (talkspurt), separati da impulsi di silenzio. Durante un
discorso si può assumere che ciascuno degli interlocutori rimanga in
silenzio per più del 40% della durata della conversazione stessa.
In altre parole una sorgente di traffico vocale può essere descritta da un
modello markoviano a due stati impulsivi: silenzio e parlato.
65
4 – Sorgente streaming
Durante il periodo di silenzio la sorgente, com’è intuitivo, non genera
pacchetti, mentre durante il periodo di parlato genera pacchetti con
velocità costante.
Questo tipo di traffico può essere più semplicemente simulato mediante
una sorgente di tipo ON-OFF in cui, la durata dei periodi di attività e di
silenzio, siano delle variabili casuali con distribuzione esponenziale e
valore medio rispettivamente TON e TOFF.
La dimensione dell’unità dati dipende sostanzialmente dal tipo di codifica
utilizzato. In particolare esistono delle codifiche adattative (AMR) in cui il
bit rate della sorgente può variare all’interno di un ben preciso intervallo,
in modo tale da offrire un servizio di trasmissione del segnale vocale ad
elevata qualità.
In generale, con il massimo valore di bit rate, le unità dati sono costituite
da circa 32 byte; a questi bisogna aggiungere le intestazioni dovute a RTP,
UDP e IP di dimensioni che vanno da 40 a oltre 60 byte (a seconda della
versione di IP utilizzata).
La correlazione è un’importante caratteristica di alcuni tipi di flussi di dati
come quello cui darebbe luogo una videoconferenza o comunque un
servizio real time.
La complessità del traffico generato da una videotelefonata deriva, in
modo del tutto naturale, dall’integrazione, su di un singolo canale di
comunicazione, di un certo numero di sorgenti di tipo diverso (voce,
video) che differiscono tra loro, in modo anche significativo, a causa dei
requisiti richiesti.
Più in dettaglio, le varie sorgenti che condividono il medesimo canale di
comunicazione differiscono per il fatto che, mentre alcune generano
traffico con bit rate costante (CBR, come la voce), altre generano traffico
con bit rate variabile (VBR, come il video).
Le applicazioni real time producono un flusso continuo di dati che
vengono codificati e pacchettizzati ma, a differenza delle applicazioni non
real time, in questo caso non ha più senso parlare di pacchetti; è più
ragionevole parlare di flusso continuo o streaming di dati.
66
4 – Sorgente streaming
Il traffico video è per sua natura a bit rate costante che diviene variabile
nel momento in cui viene compresso.
Di tecniche di compressione ve ne sono molte e non se ne discuterà in
questo contesto, tuttavia va precisato che tutte quante si basano su tipi di
codifica differenziale: si trasmette un’immagine e quindi, per un certo
intervallo, si trasmettono le differenze tra quest’ultima e quelle successive.
Ciò è possibile grazie a due importanti caratteristiche del traffico video di
seguito elencate.
La prima è costituita dalla forte correlazione tra due frame successivi; il
valore tipico della lunghezza di correlazione è compreso tra 10 e 20 frame.
La seconda caratteristica è che il segnale video ha un bit rate che si
mantiene attorno ad un certo valore e solo molto raramente cresce in modo
drastico per poi ritornarvi dopo un breve intervallo di tempo (uno o due
frame).
Quest’ultimo effetto si deve al cambiamento della scena che comporta
numerosissime differenze tra due immagini successive.
4.2.1 Traffico Streaming
Per streaming s’intende “un flusso di dati continuo”.
I vari media possono essere trasmessi come semplici file; spesso, però,
questi hanno dimensioni consistenti e di conseguenza i tempi di attesa
iniziali sarebbero molto lunghi. Questo tipo di trasmissione non è adatto
alla maggior parte delle applicazioni: per esempio non si può pensare di
scaricare un film per vederlo.
D’altro canto, sorgenti come la radio o la televisione vogliono raggiungere
prima possibile i loro ascoltatori o telespettatori: in questo caso viene
prodotto un flusso di pacchetti, campionando periodicamente.
In quasi tutti i casi si utilizza una tecnica nota come streaming che opera
nel modo seguente:
•
i pacchetti vengono trasmessi uno di seguito all’altro con tempo di
interrarivo nullo;
67
4 – Sorgente streaming
•
viene stimata la qualità della trasmissione;
•
i pacchetti che giungono correttamente al ricevitore vengono inseriti in
un buffer;
viene riprodotto il media prelevando i pacchetti dal buffer di cui sopra,
mentre si continua a ricevere PDU dello stesso flusso.
•
Il media non è più in un file ma in uno stream.
Il mezzo di trasporto, per la distribuzione dei flussi multimediali, deve
garantire requisiti tecnici e funzionali che possono essere impliciti
nell’architettura della rete di telecomunicazione oppure possono essere
ottenuti attraverso l’utilizzo di uno o più protocolli cooperanti, ma devono
sussistere:
•
•
ampiezza di banda garantita;
latenza ridotta;
•
jitter limitato;
•
perdite limitate;
•
conservazione dell’ordinamento del flusso.
I flussi multimediali sono generalmente contraddistinti da esigenze di
banda rilevanti, perlomeno rispetto alle applicazioni informatiche
classiche: la loro ampiezza è legata al tipo di medium utilizzato, nonché
allo schema di codifica e compressione adottato, e comunque può variare
da 8 kbps per una trasmissione audio vocale, ai 2 Mbps per una
trasmissione audio-video di elevata qualità.
La rete dovrebbe poter smaltire, in ogni caso, il flusso di dati generati
dalle singole sorgenti: invece, sebbene i valori minimi di banda necessaria
sono particolarmente bassi si rileva la difficoltà di ottenere dei buoni
risultati alla prova dei fatti.
Ciò è dovuto ad un requisito fondamentale del traffico multimediale: la
banda deve essere costantemente garantita, almeno ad un livello minimo.
Questa caratteristica è facilmente dimostrabile con esempi concreti:
durante la ricezione di un filmato risulta estremamente penalizzante
68
4 – Sorgente streaming
l’interruzione della proiezione in attesa della ricezione dei fotogrammi in
ritardo; lo stesso disagio si avverte se la voce non è ben coordinata con le
immagini.
Le stesse considerazioni possono valere per l’audio: è addirittura
preferibile che la qualità si deteriori a causa di una maggiore compressione
del segnale, piuttosto che la ricezione risulti spezzata, ma questo si evita
disponendo sempre di un minimo di banda garantita.
Occorre pertanto, al fine di rendere possibile la trasmissione di un flusso
multimediale, garantire un’allocazione preventiva della banda, sia essa
statica o variabile tra due valori i cui limiti sono dipendenti dalle varie
possibilità di codifica e dal numero di media utilizzati.
Con il termine latenza si definisce il tempo che intercorre tra l’invio dei
dati da parte del mittente e la ricezione da parte del destinatario: essa
dipende da diversi fattori che sommano i loro effetti durante il percorso.
Analizziamo un’architettura client/server per verificare dove e come questi
fattori agiscano.
•
Server: quando i dati sono disponibili, il mittente deve codificarli,
eventualmente comprimerli ed infine trasmetterli. Il tempo richiesto
per queste operazioni è variabile ed è legato al tipo ed alla complessità
degli algoritmi impiegati, ma in ogni caso non è nullo. Gli schemi di
codifica operano, infatti, solitamente in intervalli temporali dell’ordine
della decina di millisecondi.
•
Rete: qualunque sia la tipologia utilizzata, essa introduce dei ritardi
variabili in funzione della distanza da coprire e dal numero di nodi
attraversati. Possibili cause di ritardo sono, infatti, costituite
dall’accomodamento e dalla sincronizzazione dei flussi che avvengono
all’interno dei buffer delle macchine di rete (switch e router).
•
Client: al ricevimento dei dati dalla rete, il client deve decomprimerli
per ricostruire il flusso originario e poi riprodurlo. I problemi sono
all’incirca speculari a quelli del mittente.
69
4 – Sorgente streaming
La latenza ricopre un ruolo di primaria importanza soprattutto per le
applicazioni interattive, nel qual caso non deve superare i 250 ms per non
compromettere la naturalezza della comunicazione: alcuni algoritmi
sfruttano protocolli di trasporto non affidabili (quali UDP) che tuttavia non
aggiungono ritardi alla trasmissione.
Con jitter s’intende la variazione del ritardo avvertito in ricezione rispetto
al tempo d’invio dei dati: tali oscillazioni alterano il normale flusso dei
dati, creando discontinuità e/o sovrapposizioni all’atto della riproduzione
del flusso originale.
Per semplificare il fenomeno possiamo pensare all’ascolto di un disco in
vinile su un piatto che non abbia una velocità di rotazione costante, bensì
che subisca delle brusche variazioni: ne consegue che la frequenza con cui
i campioni audio vengono riprodotti non è più la stessa con cui sono stai
registrati, generando interruzioni o distorsioni fastidiose per l’ascoltatore.
Il jitter rappresenta quindi un disturbo per il ricevente soprattutto nel caso
di comunicazioni strettamente legate al tempo, come quelle audio, in cui
provoca continue interruzioni che portano alla non intelligibilità dei
contenuti.
Gli effetti si possono eliminare compensando le variazioni del ritardo
tramite l’utilizzo di buffer in ricezione che agiscano da polmone tra i dati
in arrivo e quelli da riprodurre: aumentando la dimensione dei buffer
cresce il ritardo ma diminuisce il numero di pacchetti persi; il contrario
accade se tali dimensioni diminuiscono.
Condizione ottimale, per ottenere una comunicazione di buona qualità, è
che il jitter sia il più basso possibile (pochi millisecondi) o al limite nullo.
Le cause di questo fenomeno generalmente sono da ricercarsi nella
variabilità del traffico in rete e nelle congestioni che si formano.
Benché il trasporto di dati multimediali richieda generalmente prestazioni
superiori rispetto al normale traffico informatico, per alcuni requisiti,
come l’esattezza della riproduzione, è possibile fare delle diverse
considerazioni.
Nelle applicazioni di trasferimento di file, è fondamentale che ogni
singolo byte giunga al ricevitore, affinché la trasmissione abbia un buon
70
4 – Sorgente streaming
esito: per questo motivo la gestione del problema è demandata ai
protocolli di trasporto, mentre le applicazioni non prevedono controlli
sull’affidabilità della connessione.
Lo stesso vincolo non è di solito valido nella gestione di flussi
multimediali: se in un filmato manca un fotogramma, oppure se in una
conversazione si perdono alcuni millisecondi di audio, l’effetto è
trascurabile se non addirittura inavvertibile.
La quantificazione percentuale di perdita limite consentito dipende dal
metodo di codifica adottato e dal risultato che si vuole ottenere.
Alcuni metodi di codifica trattano il flusso multimediale in modo
uniforme, vale a dire che il contenuto informativo è pressoché costante nel
tempo (sorgenti CBR), mentre esistono metodi che condensano le
informazioni in alcuni punti piuttosto che in altri (sorgenti VBR), come
per esempio MPEG.
Nel secondo caso la perdita di alcuni spezzoni, piuttosto che di altri, può
risultare più dannosa.
Nel valutare la soglia di accettabilità delle perdite può anche essere
importante la valutazione soggettiva del destinatario e dei dati trasmessi.
Consideriamo per esempio una videoconferenza: l’importanza delle
immagini è sicuramente secondaria rispetto a quelle della voce; vale a dire
che se l’audio continua ad essere comprensibile, è accettabile che il flusso
delle immagini possa interrompersi, ma non vale il viceversa.
La scelta del metodo è quindi dipendente dal risultato ricercato, e di
conseguenza dal medium che s’intende privilegiare per la comunicazione
del contenuto informativo.
Il corretto ordinamento dei dati ricevuti, secondo la sequenza di
spedizione, è solitamente fondamentale per ricostruire correttamente il
flusso originale, è per questo motivo che il riordino dei dati, qualora non
sia intrinsecamente assicurato dall’architettura di rete, viene generalmente
gestito dai protocolli di trasporto; gli stessi si occupano anche della
ritrasmissione in caso di anomalie, così come del controllo dell’affidabilità
della connessione, in modo che non risultino a carico dell’applicazione.
71
4 – Sorgente streaming
Nel caso di flussi multimediali, però, anche questo requisito non è più
indispensabile: si possono semplicemente scartare gli spezzoni fuori
ordine oppure riordinarli, con la sola preoccupazione di non ritardare il
normale fluire della ricezione/riproduzione.
4.3 Generatore di traffico streaming
MPEG è oggi lo standard più diffuso per la codifica del segnale video:
esso è utilizzato per raggiungere un’elevata compressione, cosa che non è
realizzabile se le immagini che compongono la sequenza video vengono
codificate ognuna in modo indipendente dalle altre.
MPEG realizza una codifica in cui vengono mantenute alcune immagini
codificate in modo indipendente dalle altre, quindi poco compresse; le
restanti immagini vengono ricavate da queste attraverso una predizione del
moto, oppure mediante interpolazione tra più immagini.
Esistono ad oggi diverse versioni di questo standard e delle nuove sono in
fase di studio. Tra quelle già in uso, merita di essere citata la MPEG-4 con
cui si realizza un unico ambiente in cui trattare diversi tipi di applicazioni
e di supportare un nuovo tipo di interattività, basato sui contenuti e i
significati dell’informazione audio-video.
Per ulteriori approfondimenti sull’argomento si rimanda a [20].
Per introdurre una sorgente di traffico MPEG (video) nel simulatore è
stato necessario, innanzi tutto, elaborare un modello probabilistico che
emulasse la generazione di pacchetti secondo i canoni di quest’ultimo
standard. A tal proposito è stato preso in esame un modello con processo
casuale di tipo markoviano.
Questo è un modello a tempo discreto della larghezza di banda richiesta da
un flusso dati con codifica di tipo MPEG.
L’emissione di un frame per unità di tempo è considerata come il
funzionamento base del mittente (sender), e il modello descrive la
sequenza della lunghezza delle trame. Così facendo, la più importante
informazione da conoscere è se il trasmettitore sta inviando un’immagine
72
4 – Sorgente streaming
codificata in maniera indipendente dalle altre oppure una serie di
differenze tra due successive.
Si considera che la sorgente sia in uno degli stati possibili e lo stato futuro,
cioè quello in cui la dimensione del pacchetto è pari a quella del pacchetto
che dovrà essere inviato successivamente, viene determinato in base a
quello corrente.
Un modello di sorgente di traffico multilivello può simulare il flusso
continuo MPEG. Secondo tale modello la sorgente può trovarsi in uno tra
due possibili stati: emissione di una immagine completamente nuova
oppure di una serie di differenze con quella precedente.
In entrambi i casi la banda occupata è nota.
I cambiamenti di stato della sorgente sono descritti da un modello
markoviano, e il tempo di permanenza in ciascuno stato è un processo
casuale con distribuzione arbitraria.
Quanto detto fin qui non è stato, per ovvi motivi di semplicità,
implementato esattamente nel simulatore; in realtà è stato fatto qualcosa di
molto simile ma con la possibilità di configurare la sorgente affinché
possa modellare non solo traffico secondo lo standard MPEG, ma
eventualmente anche secondo altri tipi di codifica.
4.3.1 Implementazione della sorgente di traffico
Ciò che è stato realizzato non è altro che una sorgente a quattro stati, di cui
uno consiste in uno stato di segnalazione, mentre nei tre rimanenti
vengono trasmesse informazioni d’utente utilizzando per ognuno un
diverso bit rate.
Per generare un flusso continuo di dati (definizione esatta di stream) si è
deciso di far creare alla sorgente un pacchetto ad ogni frame.
La continuità del flusso dati si ottiene, pertanto, in maniera del tutto
automatica, considerando che la risoluzione temporale del simulatore è
dell’ordine del frame (10 ms).
La variabilità del bit rate si ottiene assegnando a ciascuno stato il valore
della lunghezza, in byte, dei pacchetti generati.
73
4 – Sorgente streaming
I valori scelti per condurre le prove di validazione sono tali da far scaturire
gli stessi valori di bit rate definiti dallo standard (384 kbit/s, 144 kbit/s, 64
kbit/s).
Le varie dimensioni delle unità dati sono, altresì, controllabili da parte
dell’utente del simulatore che dovrà specificarli in un file apposito
(Source.dat), descrivendo le caratteristiche di ciascuno stato.
La modalità con cui si configura la sorgente VBR, cioè mediante il file di
cui sopra, non esclude la possibilità di introdurre eventualmente dei nuovi
stati per esempio in seguito alla standardizzazione di nuovi valori di bit
rate.
4.3.2 Stati della sorgente streaming
Lo stato della sorgente è definito dalla classe MarkovianState (definita nel
file MarkovianState.h). In essa sono definiti tutti i parametri che
caratterizzano il funzionamento della sorgente; fra questi vi sono, un
identificativo numerico per lo stato stesso, la dimensione in byte del
pacchetto da trasmettere, il tempo medio di permanenza in tale stato da
parte della sorgente stessa (figura 4.1).
Nulla vieta di inserire dei nuovi parametri che consentano, ad esempio, di
scegliere la modalità di invio dei riscontri oppure il numero di pacchetti da
inviare ad ogni frame (al momento è 1) per tenere conto della codifica
utilizzata.
La sorgente a più stati è rappresentata, nel software, dalle classi Discrete
State Markovian Source e Descrete State Markovian Data Source (che
eredita dalla prima) entrambe definite nel file Traffic_Source.h.
Di queste ultime classi fanno parte le funzioni di gestione (Handle_ON() e
Handle_OFF()), le funzioni di invio dei pacchetti (Send_packet() e
Send_sign_packet()), ed infine le funzioni per il calcolo del tempo di
interarrivo dei pacchetti e dell’istante di cambiamento dello stato da parte
della
sorgente
(rispettivamente
Get_time_pack()
e
Get_time_to_change_state()).
74
MR-State
75
Figura 4.1: diagramma degli stati della sorgente
streaming
implementata
nel
simulatore.
mean time to stay [ms]
packet size [byte]
Bit rate [kbit/s]
Thl = xx ms
mean time to stay [ms]
Bit rate [kbit/s]
mean time to stay [ms]
Tlh = xx ms
LR-State
CLOSE
status = OFF
packet size [byte]
CLOSE
packet size [byte]
Bit rate [kbit/s]
SIGN-State
packet size [byte]
Bit rate [kbit/s]
HR-State
INVITE
status = ON
Four states streaming source
4 – Sorgente streaming
4 – Sorgente streaming
All’interno del codice sono stati implementati diversi tipi di generatori di
traffico cui, ovviamente, ad ognuno corrisponde un tipo diverso di servizio
offerto dalla rete.
Nel file Simul_service.dat è possibile definire, per ogni cella, la
percentuale di utenti che, all’inizio della simulazione, daranno luogo ad un
certo tipo di flusso di dati.
4.3.3 Generazione e invio di pacchetti
Ogni volta che viene richiamata la funzione Send_packet(), essa genera un
pacchetto di dimensioni opportune e lo inserisce nello
UDP_buff_master_tx; da qui verrà successivamente estratto e,
richiamando la primitiva del caso, dal livello TCP/UDP percorrerà verso il
basso la pila fino ad essere inviato sul canale radiomobile.
Esiste una funzione del tutto analoga alla precedente che è la
Send_sign_packet(), la quale genera pacchetti contenenti informazioni di
segnalazione e, pertanto, prende come parametro un valore cui
corrisponde un certo tipo di messaggio (INVITE, OK, RR, CLOSE).
La corrispondenza tra messaggi e rispettivi valori è stata definita,
mediante delle costanti, nel file Definition.h e nulla vieta di definirne dei
nuovi.
La funzione per il calcolo del tempo di interarrivo dei pacchetti, pur
essendo stata implementata, non viene al momento utilizzata; potrebbe
venire utilizzata in seguito per simulare particolari tipi di codifiche o più
semplicemente per introdurre dei ritardi.
4.3.4 Inizio della sessione di trasmissione
Nell’istante in cui la sorgente di traffico viene creata (cioè le viene
assegnata una locazione di memoria), il suo indirizzo viene memorizzato
da un puntatore definito come istanza della classe Traffic_source (file
Traffic_source.h).
76
4 – Sorgente streaming
All’interno di quest’ultima sono state definite un certo numero di variabili
di stato (variabili booleane) che caratterizzano la stato di funzionamento
della sorgente di traffico.
UE
UTRAN
INV
ITE
OK
Figura
4.2:
descrizione dei messaggi di
segnalazione
inviati
per
l’apertura di una sessione di
streaming.
All’inizio della sessione viene richiamata la funzione Activate() che ha il
compito di attivare la sorgente, ordinando, altresì, l’invio di un pacchetto
di segnalazione con il significato di richiesta di partecipazione alla
sessione in corso e, per mantenere la stessa semantica del protocollo SIP, è
stato chiamato INVITE (figura 4.2).
Per semplicità si è fatta l’ipotesi che i pacchetti di segnalazione abbiano
dimensione fissa; se ad esempio si pone pari a 40 byte la velocità con cui
la sorgente genera i pacchetti quando si trova nello stato di segnalazione
(SIGN) sarà:
77
4 – Sorgente streaming
40byte ⋅ 8 ⋅ 10 −3 kbit
= 32 kbit s
−2
10 s
Dal lato ricezione, quando si riceve un pacchetto di segnalazione di tipo
INVITE, supponendo che la risposta all’invito sia affermativa, si inserisce
nella lista degli eventi (per simularne il ritardo di trasferimento), l’evento
di invio al mittente di un acknowledgement (OK): ciò è possibile in
seguito alla creazione di un evento (Send_ack_ev) appositamente pensato
per tale scopo (figura 4.2).
Quando la pila che ha avanzato la richiesta di partecipazione, (cioè che ha
inviato il messaggio INVITE), riceve un pacchetto di tipo riscontro (OK)
inserisce in calendario un nuovo evento che porterà la sorgente dallo stato
di segnalazione a uno di trasmissione (Change_src_state_ev).
Inoltre viene inserito in calendario l’evento che indica il termine della
sessione in corso, ovvero di disattivazione della sorgente
(Switch_source_ev).
Il tempo di occorrenza di questi due ultimi eventi non sono altro che
variabili casuali che l’utente del simulatore può scegliere di impostare,
specificando nel file delle sorgenti i limiti dell’intervallo di valori che
possono assumere rispettivamente, la permanenza della sorgente nello
stato corrente e la durata di una sessione, nonché il tipo di distribuzione
per ciascuna delle due variabili.
Contemporaneamente vengono messi in calendario anche gli eventi per il
cambiamento di stato della sorgente (dallo stato di segnalazione a quello
di trasmissione dei dati) e per l’invio del primo pacchetto di informazione
(cioè di tipo DATA), in quanto ormai la connessione è stata creata
completamente.
Se la probabilità di perdita dei pacchetti è non nulla, come accade quando
il canale radiomobile non è ideale, il pacchetto INVITE potrebbe non
giungere mai a destinazione e di conseguenza la sessione non prenderà
mai inizio. Per evitare ciò è stato introdotto un timer (WaitSignPck) che
viene attivato al momento dell’invio del messaggio precedente e allo
78
4 – Sorgente streaming
scadere, se non è ancora giunto il messaggio di risposta, si ripete la
procedura. La durata del tempo di attesa non è fissa e l’utente può
specificarne il valore nel file di configurazione delle sorgenti.
In realtà, se il livello RLC lavora in modalità acknowledged, il pacchetto
giungerà sicuramente a destinazione, ma con grande ritardo: per far fronte
a questi casi è stato introdotto un meccanismo che consente di rilevare la
presenza di pacchetti duplicati.
4.3.5 Trasferimento dei dati
Una volta schedulato l’evento di cambiamento di stato della sorgente,
viene chiamata la funzione Change_state().
L’evento contiene, nella propria definizione, anche un valore numerico
che si riferisce allo stato successivo in cui la sorgente dovrà portarsi.
La funzione Get_time_to_change_state() estrae il valore di una variabile
casuale: tale valore verrà poi utilizzato come tempo di occorrenza del
successivo cambiamento di stato della sorgente. La legge di distribuzione
di quest’ultima variabile non è definita a priori, ma è l’utente del
simulatore a sceglierla (file Source.dat) specificando anche i limiti
dell’intervallo dei valori che essa può assumere nonché il valore medio.
Nella fase di attuale sviluppo del sistema si può scegliere fra tre tipi di
distribuzioni: esponenziale, geometrica, uniforme.
Se si decide di utilizzare una codifica tipo MPEG, lo stato di trasmissione
successivo a quello di segnalazione non potrà che essere quello con il bit
rate più elevato: si trasmetterà un’immagine intera e poi un certo numero
di differenze fra questa e le successive.
Per quest’ultimo stato si è deciso di utilizzare pacchetti di dimensione
fissa; se ad esempio si pone pari a 480 byte la velocità con cui la sorgente
genera i pacchetti quando si trova nello stato HR sarà:
480 ⋅ 8 ⋅ 10 −3 kbit
= 384 kbit s
10 −2 s
79
4 – Sorgente streaming
Sempre all’interno della funzione Change_state() viene inserito nella lista
degli eventi il prossimo evento di cambiamento di stato, specificando, tra
l’altro, quale dovrà essere quello successivo.
Anche per lo stato in cui si trasmettono le differenze tra due immagini
successive (LR) si è deciso di utilizzare unità dati di lunghezza fissa; se ad
esempio tale valore si pone pari a 80 byte, la velocità di generazione della
sorgente sarà:
80 ⋅ 8 ⋅ 10 −3 kbit
= 64 kbit s
10 −2 s
In condizioni normali la sorgente ha un funzionamento che oscilla tra
questi ultimi due stati; esiste tuttavia un terzo stato (MR), con una velocità
di generazione dei pacchetti da porre ad un valore intermedio rispetto a
quello degli stati precedenti, in cui è possibile inviare sempre immagini
complete ma con un diverso tipo di codifica e quindi anche una qualità del
servizio offerto inferiore rispetto al caso normale: ciò può essere utile nel
caso in cui le condizioni del canale o comunque il carico della rete non
consentano la fornitura del servizio con la massima qualità possibile.
La decisione di cambiare codifica, e quindi di ridurre la qualità del
servizio offerto viene presa dal trasmettitore sulla base di opportune
indicazioni provenienti dal lato ricevente. In ricezione, infatti, viene
misurata la probabilità di perdita dei pacchetti; quando questa raggiunge
un valore massimo si ordina al trasmettitore di cambiare codifica.
Tutto ciò non può avere effetto immediato dal momento che il messaggio
di controllo deve giungere prima all’applicazione (che non si trova nella
UTRAN ma nella Core Network) e poi tornare indietro.
Inviando pacchetti di dimensione 180 byte, la velocità di generazione dei
pacchetti sarà:
180 ⋅ 8 ⋅ 10 −3 kbit
= 144 kbit s
10 −2 s
80
4 – Sorgente streaming
Occorre tuttavia osservare che la decisione di cambiare la codifica della
sorgente comporta l’introduzione di opportune modifiche ad alcuni
parametri di sistema per la trasmissione, e fra questi vi è il codice
ortogonale utilizzato sul canale radio: di ciò si occupa, in modo del tutto
automatico, il livello RRC (che si trova nel piano di controllo).
In seguito, tutte le procedure fin qui descritte verranno gestite
automaticamente in quanto sia la funzione Change_state() che la funzione
Send_packet(), una volta chiamate, metteranno automaticamente in
calendario un nuovo evento ciascuna del medesimo tipo (figura 4.3).
Tutti i messaggi di controllo della sessione, (cioè di tipo OK, RR) che
vanno dal ricevitore al trasmettitore, per semplicità, non passano
attraverso il canale radio, bensì raggiungono la pila duale corrispondente
mediante opportuni puntatori e la chiamata alla primitiva di indicazione
del blocco UDP; il ritardo con cui tali messaggi vengono ricevuti è fisso
(ack_time) e può essere specificato dall’utente.
UE
UTRAN
IN V IT E
OK
DA TA
DA TA
DA TA
DA TA
RR
DA TA
Figura 4.3: esempio di trasferimento di dati
(dall’utente alla rete) e di riscontri
(dalla rate all’utente).
81
4 – Sorgente streaming
Per fare ciò, la sorgente non si porta nello stato di segnalazione in quanto
sarebbe una complicazione inutile (con in più l’aggiunta di istruzioni che
rallenterebbero l’esecuzione del programma); in altre parole la sorgente
non cambia stato, ma solo in questi casi.
4.3.6 Chiusura della sessione di trasmissione
Una volta che l’istante di simulazione giunge al termine prestabilito per la
fine della sessione di trasmissione, la sorgente passa nello stato di
segnalazione e provvede a inviare i messaggi necessari per la chiusura
della connessione (CLOSE, figura 4.4).
UE
UTRAN
DATA
DATA
DATA
DATA
RR
DATA
DATA
CLOSE
OK
Figura 4.4: esempio di invio di messaggi di
segnalazione per la chiusura della
sessione in corso.
La ricezione di tali informazioni implica la disabilitazione della sorgente.
Come per il pacchetto INVITE, anche il messaggio CLOSE potrebbe
andare perduto: qualora ciò accadesse la sessione non potrebbe più
terminare. Per risolvere questo inconveniente, al momento di invio del
82
4 – Sorgente streaming
pacchetto CLOSE, viene nuovamente attivato il timer WaitSignPck: se allo
scadere non è ancora stato ricevuto il riscontro per il pacchetto CLOSE, la
sessione in corso termina automaticamente.
Comunque vadano le cose, al termine di ogni sessione, se c’è tempo a
sufficienza prima della fine della simulazione, si mette in calendario
l’evento di inizio di una nuova sessione (Rep_session_ev); qualora ciò non
fosse possibile, se tutti gli utenti hanno concluso le proprie sessioni, si
procede con l’ultimo aggiornamento delle statistiche nonché la
presentazione dei risultati ottenuti.
83