Strategie di Network Coding

Transcript

Strategie di Network Coding
UNIVERSITÀ DEGLI STUDI DI FERRARA
FACOLTÀ D'INGEGNERIA
Tesi di laurea
in
Ingegneria Informatica e dell'Automazione
Strategie di Network Coding
Relatore:
Prof. Ing. Gianluca Mazzini
ANNO ACCADEMICO 2008-2009
Laureanda:
Gobbo Margherita
Agli Amici
Indice
1
Introduzione
3
2
Benefici del Network Coding
5
2.1 Massimizzazione del Throughput........................................................................5
2.2 Benefici su Risorse Wireless...............................................................................8
2.3 Sicurezza..............................................................................................................9
3 Teoremi e Classificazioni del Network Coding
11
3.1 Teoremi Fondamentali per il Network Coding..................................................11
3.1.1 Teorema del Minimo-Taglio Massimo-Flusso.................... ...................11
3.1.2 Teorema Principale de Network Coding.................................................14
3.2 Tipologie di Network coding.............................................................................15
3.2.1 Network Coding Lineare........................................................................15
3.2.1.1 Codifica...................................................................................16
3.2.1.2 Combinazioni Lineari..............................................................16
3.2.1.3 Decodifica................................................................................17
3.2.2 Network Coding Non Lineare...............................................................18
3.2.2.1 Codice Polinomiale Con Alfabeto Binario (q=2)....................19
3.2.2.2 Codice Polinomiale Con Alfabeto Grande (q ≥ 3)...................20
3.2.2.3 Codice Polinomiale Complesso...............................................21
3.2.3 Network Coding Algebrico....................................................................22
1
4 Applicazioni del Network Coding
25
4.1 Visione Generale di Reti P2P.............................................................................25
4.2 Applicazioni su Reti P2P....................................................................................27
4.2.1 BitTorrent................................................................................................27
4.2.2 Avalanche................................................................................................28
4.2.2.1 I Vantaggi di Avalanche.............................................................30
4.2.3 Critica all'uso del Network Coding sulle reti P2P...................................31
4.3 Applicazioni su Reti Wireless............................................................................35
4.3.1 Rete a Griglia Circolare..........................................................................35
4.3.2 Rete a Griglia Quadrata..........................................................................38
4.4 Applicazioni sulla Sicurezza...............................................................................39
6
Conclusioni
43
Bibliografia
45
2
Capitolo 1
Introduzione
Da cinquant'anni a questa parte i sistemi reti di comunicazione hanno subito una
notevole evoluzione ed hanno, a tutti gli effetti, un ruolo fondamentale nella nostra vita:
li usiamo per relazionarci con le persone, usando, ad esempio, le reti telefoniche, per
connettersi ad ogni parte del mondo, usando la rete Internet o per condividere contenuti,
usando le reti P2P. In tutti questi casi, l'informazione viene trasportata nello stesso
modo in cui un fluido viaggia in un tubo o una macchina in autostrada: vale a dire che i
flussi di dati indipendenti possono condividere le risorse di rete ma le informazioni
vengono tenute separate. L'informazione viene fatta passare da un nodo all'altro della
rete e questi nodi si limitano solo a trasmetterla.
Il Network Coding cambia questa interpretazione della rete. Il Network Coding è
un nuovo campo di ricerca che può avere interessanti applicazioni pratiche nei sistemi
per la comunicazione di rete. Questo concetto fondamentale fu introdotto per la prima
volta, per le reti di comunicazioni di satelliti nella pubblicazione “Distributed source
Coding
for
satellite communications” [1]. Il concetto fu, poi, dettagliatamente
sviluppato in “Network information flow”, dove il termine Network Coding fu coniato
[2].
L'emergere del Network Coding ha cambiato il modo di pensare la comunicazione
di rete: invece di indirizzare semplicemente i dati, come avveniva prima con il routing, i
nodi intermedi possono ricombinare i diversi pacchetti in entrata in due o più pacchetti
3
in uscita. In questo caso, quindi, i flussi di dati non devono essere più tenuti separati ma
vengono combinati per adattare meglio il flusso di informazioni e per soddisfare le
esigenze di specifici modelli di traffico.
Questa nuova interpretazione di diffusione dei dati, rivoluziona il nostro modo di
gestire, operare e comprendere le reti di comunicazione. Ci si aspetta che sia una
tecnologia fondamentale per le reti del futuro.
Durante il lavoro di tesi sono state condotte ricerche riguardanti il Network Coding e
l’impatto che questo ha avuto con le nuove tecnologie, con particolare attenzione alle
reti P2P e Wireless, colonne portanti della comunicazione del futuro.
Nel secondo capitolo si presentano i possibili benefici sull'uso del Network Coding.
Nel terzo capitolo si enunciano i teoremi fondamentali del Network Coding e vengono
presentate alcune delle tipologie di Network Coding esistenti Il quarto capitolo descrive
le migliorie, che l'impiego/uso del Network Coding, ha apportato alle applicazioni che
lo utilizzano: reti P2P, reti wireless e meccanismi di sicurezza. Inoltre, viene riportato
uno studio che contesta l'utilità del Network Coding applicato alle reti P2P e dimostra
che non si hanno i presunti benefici, citati nel secondo capitolo.
4
Capitolo 2
Benefici del Network Coding
Il Network Coding è un nuovo modo di intendere l'invio di dati attraverso la rete: i
pacchetti non sono più trattati come singoli flussi d'informazione ma vengono elaborati
dai nodi interni della rete allo scopo di costruire un unico pacchetto in uscita a partire
da un certo numero di pacchetti in ingresso. Questo nuovo tipo di approccio, se
opportunamente progettato, può portare notevoli vantaggi, in particolar modo in
termini di throughput e robustezza. I vantaggi ai quali l'uso del Network Coding può
portare sono molteplici e saranno utili per capire come vengono migliorate, in termini
di prestazioni, alcune applicazioni che lo sfruttano. Nello specifico, sono stati
considerati:
•
la massimizzazione del throughput
•
i benefici su risorse wireless
•
la sicurezza
2.1 Massimizzazione del Throughput
Il Network Coding offre benefici in termini di massimizzazione dello throughput
quando operiamo su di una rete multicast. Per dimostrare tale ipotesi ci si avvale della
rete a farfalla [3], il più semplice esempio di Network Coding.
Nella figura 2.1(a), è rappresentata una rete di comunicazione a grafo diretto dove
5
ogni vertice corrisponde ad un terminale ed ogni arco corrisponde ad un canale. Si
ipotizza, per ciascun canale, di essere in grado di inviare un bit per volta. Sono presenti
due sorgenti S1 ed S2 e due ricevitori R1 ed R2. Ogni sorgente produce un bit per volta
definiti, rispettivamente, x1 e x2. Se il ricevitore R1 usa tutte le risorse della rete per se
stesso, riceve i valori di entrambe le sorgenti, indirizzando il bit x1 dalla sorgente S1
lungo il percorso {AD} e il bit x2 lungo il percorso {BC, CE, ED}come mostrato in
figura 2.1(a). In modo analogo, se il secondo ricevitore R2 usa tutte le risorse della rete
per se stesso, può ricevere anch'esso i valori di entrambe le sorgenti., indirizzando il bit
x2 dalla sorgente, lungo il percorso {BF} e il bit x1 lungo il percorso {AC, CE, EF}come
in figura 2.1(b). Quanto appena descritto è una semplice strategia di routing, in cui ogni
nodo si limita a trasmette l'informazione e in cui la linea centrale (l'arco{CE}) sarà in
grado di trasportare x1 o x2, ma non entrambi.
Da quanto detto, emerge che il routing risulta essere insufficiente perché col
Network Coding è possibile trasmettere entrambi i valori contemporaneamente ad
entrambe le destinazioni. Infatti, ipotizzando che entrambi i ricevitori vogliano ricevere
contemporaneamente le informazioni da entrambi le sorgenti, col routing si ha una
disputa per l'uso canale {CE}, dovuta al fatto che attraverso quest'arco possiamo spedire
solo un bit per volta.
Si supponga di voler inviare simultaneamente il bit x1 al ricevitore R2 e il bit x2 al
ricevitore R1 in modo che entrambi ottengano le due informazioni. Grazie al Network
Coding, che consente ai nodi interni della rete di elaborare i flussi d'informazione in
entrata, questo diventa possibile: il nodo C crea, a partire dai bit x1 e x2, un terzo bit x3 =
x1 + x2, che può essere trasmesso attraverso l'arco {CE}. Il ricevitore R1 riceve, quindi,
(x1, x1 + x2) e risolve questo sistema di equazioni per trovare x2. In maniera analoga, il
ricevitore R2 riceve (x2 , x1 + x2) e risolve il sistema per ottenere x1. (Figura 2.1(c)).
Quindi, permettendo ad un nodo intermedio di combinare i flussi d'informazione, si
riesce a massimizzare il throughput.
6
Figura 2.1(a): Rete a Farfalla. Senza Network Coding solo il ricevitore R1 riesce a ricevere sia x1 che
x2.
Figura 2.1(b): Rete a Farfalla. Senza Network Coding solo il ricevitore R2 riesce a ricevere sia x1 che
x2.
7
Figura 2.1(c): Rete a Farfalla. Con il Network Coding i ricevitori R1 e R2 riescono a ricevere entrambi
i bit x1 e x2.
2.2 Benefici Su Risorse Wireless
Nell'ambiente wireless, il Network Coding può essere usato per consentire benefici in
termini di durata della batteria, larghezza di banda e ritardi.
Si consideri, per esempio, una rete wireless ad-hoc, dove i dispositivi A e C
vogliano scambiarsi file binari x1 e x2, usando il dispositivo B come ripetitore. Si assume
che entrambi i dispositivi trasmettano o ricevano un file per volta. Normalmente questo
scambio avviene come mostrato in Figura 2.2 (a). I nodi A e C inviano i loro file al nodo
B, che a sua volta spedisce il file verso il nodo corrispondente. Anche in questo caso, se
si utilizza il Network Coding, si garantiscono migliori prestazioni delle prestazioni della
rete, facendo si che i nodi intermedi ricombinino i diversi pacchetti in entrata, in uno o
più in uscita. Come si evince dalla Figura 2.2(b), il nodo B riceve entrambi i file x1 e x2
e, bit a bit, li somma per creare il file x1 + x2,, che poi trasmette ad entrambi i ricevitori
utilizzando una trasmissione comune. In questo modo il nodo A conosce x1 e può
decifrare x2. Analogamente il nodo C conosce x2 e può decifrare x1.
L'uso del Network Coding, in questa particolare rete, offre benefici in termini di:
•
efficienza energetica, il nodo B trasmette una volta invece che due
•
ritardo, la trasmissione è conclusa dopo tre volte invece che quattro
8
•
larghezza di banda wireless, il canale wireless è occupato per una quantità di
tempo molto più piccola
•
interferenza, se ci sono altri nodi wireless che aspettano di comunicare coi vicini
Figura 2.2.
2.3 Sicurezza
Le reti, dove la sicurezza è un requisito importante, come durante una transazione
bancaria, hanno bisogno di garantire la protezione contro gli attacchi esterni. I
meccanismi in vigore sono progettati intorno al presupposto che solo la sorgente e la
destinazione possono manomettere i dati. Ma dall'altra parte, il Network Coding
richiede percorsi intermedi per eseguire operazioni sui pacchetti, quindi abbiamo
bisogno di meccanismi che consentono operazioni di Network Coding, senza
compromettere l'autenticità dei dati.
Per mostrare i benefici del Network Coding sulla sicurezza, si consideri la rete in
figura 2.3(a), dove il nodo A che manda informazioni a D attraverso due percorsi
{ABD} e {ACD}. Si ipotizzi che un utente “malintenzionato” possa intercettare un
singolo percorso e non aver accesso al percorso complementare. Se i simboli
indipendenti x1 e x2 vengono spediti senza codifica, l'utente malintenzionato può
intercettare uno di questi. Se, invece, le combinazioni lineari dei simboli sono spedite
9
attraverso differenti percorsi, l'utente malintenzionato non riesce a decifrare nessuna
parte dei dati.
Figura 2.3
10
Capitolo 3
Teoremi
e
Classificazioni
del
Network
Coding
3.1 Teoremi Fondamentali per il Network Coding
Al fine di dare un'esauriente rappresentazione del Network Coding, si è ritenuto utile
riportare alcuni teoremi fondamentali relativi all'argomento di indagine. Il network
Coding opera in uno scenario multicast, trasmissione uno-a-molti, che si contrappone ad
unicast, trasmissione uno-a-uno. Il multicast si riferisce, appunto, alla capacità della rete
di trasmettere la stessa informazione a molti ricevitori. Un aspetto che ci preme
approfondire sono le condizioni necessarie e sufficienti affinché la rete sia in grado di
supportare il multicast ad un data velocità. A questo scopo si sono analizzati:
•
teorema del Minimo-Taglio Massimo-Flusso
•
teorema principale del Network Coding
3.1.1 Teorema del Minimo-Taglio Massimo-Flusso
Il teorema è stato dimostrato nel 1927 da Meneger in “Zur Allgemeinen Kurventheorie”
[4] e nel 1956 da Ford e Fulkerson in “Maximal flow through a network” [5]. Viene
sviluppato in ambiente unicast.
11
Si consideri G = (V,E), un grafo (rete unicast) con una serie di vertici V e un
insieme E ⊂ V × V. Si assuma che ogni arco abbia una capacità unitaria e che siano
permessi siano archi paralleli. Si ha un nodo S ∈ V che vuole trasmettere informazioni
ad un nodo R ∈ V. Prendendo in considerazione questa rete, si definisce taglio tra S e R
una una serie di archi del grafo, la cui rimozione disconnette S da R. Un taglio- minimo
è un taglio con il più piccolo valore e il suo valore è la somma delle capacità del taglio.
Esiste solo un unico valore di minimo-taglio e diversi minimi tagli come mostrato in
figura 3.1.
Figura 3.1
Teorema 3.1
Si consideri il grafo G=(V,E), con archi di capacità unitaria, un vertice sorgente S e d
un ricevitore R. Se il minimo-taglio tra S e R è uguale ad h, allora l'informazione può
essere spedita da S a R alla massima velocità h. In maniera equivalente, esistono h
percorsi arco-disgiunto tra S e R. [6]
Dimostrazione
Si deve dimostrare che esistono esattamente h percorsi arco-disgiunti tra S e R e dal
momento, che i percorsi sono sono costituiti da archi di capacità unitaria, l'informazione
può essere spedita con la stessa velocità, dando a tutti i percorsi velocità h.
Si assuma che il valore di minimo-taglio tra S e R sia uguale ad h. Ovviamente,non
si possono avere più di h percorsi ad arco-disgiunto, a meno di non volere disconnettere
S da R. Per dimostrare il teorema, si procede dimostrando la tesi opposta: si usa un
12
algoritmo di “percorso-aumentato” che prevede h passi ed, in ognuno dei quali, ha un
percorso di velocità unitaria dalla sorgente al ricevitore.
Si prenda p euv come indicatore di una variabile associata con un arco e che connette
u con il vertice v.
Passo 0: inizialmente p euv = 0 per tutti i nodi e che appartengono ad E
1
1
1
1
Passo 1: si trova un percorso P1 da S a R con P1 = { v 0 =S , v 1 , v 2 , .... , v l =R } dove
1
e
l1 è la lunghezza del percorso e l'insieme p v v
1
i
e
pv
1
i
1
v i1
1
i1
con 0 ≤ i< l1.
=1 indica che l'arco e è stato usato nella direzione tra v 1i a v 1i1 .
k
k
k
k
Passo k: (2 ≤ k ≤ h) si trova un percorso Pk = { v 0 =S , v 1 , v 2 , .... , v 1 =R }di lunghezza lk
k
in modo che la seguente condizione sia valida:
e
e
Esiste un arco e tra v 1k , v ik1 tale che p v v =0 oppure p v v =1.
k
i
k
i1
k
i
k
i1
Si noti che, ad ogni passo dell'algoritmo, si riscontra un aumenta del numero di
percorsi ad arco-disgiunto che connettono la sorgente S al ricevitore R. Per provare che
l'algoritmo funziona, si deve riuscire a dimostrare che, per tutti i k-passi compresi tra 1 e
e
h, esisterà un percorso che soddisfa la condizione p v v =0 oppure la condizione
k
i
k
i1
e
p v v =1.
k
i
k
i1
Si dimostra questa tesi attraverso un assurdo.
1. Si assuma che il minimo-taglio al ricevitore sia h ma al passo k < h non viene
trovato un percorso soddisfacente.
2. In maniera ricorsiva, viene creato un sottoinsieme W dei vertici di v.
Inizialmente W coincide con s. Se per un vertice v esiste un arco che connette v e
S che soddisfa la condizione
p ev
k
i
k
v i1
=0
o
p ev
1
i
1
v i1
=1, allora v viene incluso
nel sottoinsieme W. Si continua ad aggiungere vertici al sottoinsieme W finché
esiste un arco tra u e v che soddisfa la condizione e finché non ci sono più vertici
da aggiungere.
3. Dall'ipotesi fatta al punto uno, ci si rende conto che W non contiene R, altrimenti
si sarebbe già trovato il percorso desiderato. Il ricevitore appartiene ad
13
W =V /W. Si definisce  W = {e|e = (u,v)} con (u,v) che appartiene ad E, u
che appartiene ad W e v che appartiene ad W , come l'insieme di tutti gli archi
e che connettono V con
W . Questi archi sono un taglio. Dalla costruzione di
W, si ha che p euv = 1 e p euv =0 per tutti gli archi e che appartengono ad W .
Dal punto uno,
∑
e ∈ ϑV
p euv ≤k −1 , quindi esiste un taglio di valore al massimo
k-1<h, che contraddice la premessa del teorema.
3.1.2 Teorema Principale del Network Coding
Il seguente teorema è collocato in un ambiente multicast.
Si prenda una rete G=(V,E), con h sorgenti di velocità unitaria S1,...,Sh, poste sulla
stessa rete del nodo sorgente S, che trasmettono informazioni, simultaneamente, ad N
ricevitori R1,....,Rn. Si ipotizzi che G sia un grafico diretto aciclico con archi di capacità
unitaria e che, il valore del minimo-taglio tra il nodo sorgente ed ogni ricevitore, sia h.
Si ipotizzi, anche, di avere un ritardo zero ovvero che tutti i nodi ricevano i loro input e
spediscano i loro output allo stesso momento
Teorema 3.2
Si consideri un grafo diretto aciclico G=(V,E), con archi di capacità unitaria, h sorgenti
di velocità unitaria poste sui vertici del grafo e N ricevitori. Si asssuma che il valore
del minimo-flusso verso i ricevitori sia h. Se questi presupposti sono validi, allora esiste
uno schema di trasmissione multicast su un campo finito abbastanza grande Fq, nel
quale i nodi intermedi della rete combinano linearmente i loro simboli d'informazione
in arrivo su Fq, che consegna l'informazione dalla sorgente, in maniera simultanea, a
tutti i ricevitori ad uguale velocità h [6].
Dal teorema del minimo-taglio massimo-flusso, è noto che esistono h percorsi arcodisgiunti tra la sorgente e i ricevitori. Se qualche ricevitore sta usando la rete per se
stesso, l'informazione dalla sorgente h può essere indirizzata attraverso un insieme di h
percorsi arco-disgiunti. Quando, invece, i ricevitori usano la rete in maniera simultanea,
14
il loro insieme di percorsi può sovrapporsi. Secondo questo ragionamento i ricevitori
dovranno condividere le risorse della rete e questo porta ad una riduzione della velocità
di trasmissione. Ad ogni modo, il secondo teorema afferma che se si permette ai nodi
intermedi, non soltanto di spedire ma anche di combinare i loro flussi d'informazione,
allora ognuno dei ricevitori potrà ottenere le informazioni alla stessa velocità come se si
avesse un solo accesso alla rete.
3.2 Tipologie di Network Coding
Il Network Coding è stato oggetto di studio di diverse comunità di ricerca. La scelta di
un particolare ambiente di sviluppo è legato alle preferenze dei singoli ricercatori. Oltre
ad avere diversi ambienti teorici in cui poter lavorare, il Network Coding ha anche
diverse tipologie: può essere lineare, combinatorio, algebrico ecc.
Le tipologie che ci proponiamo di studiare sono:
•
Network Coding Lineare
•
Network Coding Non Lineare
•
Network Coding Algebrico
che sono quelle più importanti e diffuse.
3.2.1 Network Coding Lineare
Si consideri un sistema che agisce come ripetitore d'informazioni, ad esempio come un
nodo in una rete P2P. Secondo l'approccio tradizionale, quando si indirizza un pacchetto
di informazioni destinato a qualche altro nodo, questo semplicemente lo ripete. Col
Network Coding, invece, si permette al nodo di combinare due o più pacchetti che ha
ricevuto, in uno o più pacchetti in uscita.
Ipotizzando che ogni pacchetto abbia un dimensione di L bit, qualora ci fossero
pacchetti da codificare, con dimensione diversa , ai più corti verranno aggiunti degli 0 in
coda (il cosiddetto zero-padding) così da renderli della medesima dimensione.
Col Network Coding lineare, i pacchetti in uscita sono combinazioni lineari dei
pacchetti originali, in cui l'addizione e la moltiplicazione sono eseguite nel campo F2s
[7]. Gli algoritmi per codificare e decodificare vengono spiegati nel corso del capitolo.
15
3.2.1.1 Codifica
Si assuma che un numero di pacchetti originali M1,....,Mn siano generati da una o più
sorgenti. Nel Network Coding lineare, ogni pacchetto nella rete è associato ad una serie
n
di coefficienti g1,.....,gn in F2s ed è uguale ad
∑ g i M i.
. La somma deve avvenire per
i=1
n
ogni posizione del simbolo, ad esempio
X =∑ g i M ik in cui
k
i
M k e Xk sono
i =1
rispettivamente il k-esimo simbolo di Mi e X. Per semplicità, viene ipotizzato che un
pacchetto contenga sia il coefficiente g = (g1,....,gn), chiamato vettore di codifica, sia il
n
dato codificato
X =∑ g i M i , chiamato vettore d'informazione. È possibile eseguire
i=1
la codifica sia per pacchetti innovativi che per pacchetti già codificati, per questo
motivo la codifica può essere eseguita ricorsivamente. A questo proposito, si consideri
un nodo che ha già ricevuto ed immagazzinato un insieme di pacchetti (g1, X1),.....,(gm,
Xm) codificati, in cui gj è il vettore di codifica del j-esimo pacchetto. Questo nodo può
generare un nuovo pacchetto codificato (g',X') prendendo un insieme di coefficienti
m
h1,......, hm ed elaborando una nuova combinazione lineare
X '=∑ hi J .
i
Il vettore di
i =1
m
codifica di g' non è uguale ad h, ma che ci viene dato da
g 'i =∑ hi g ij e questa
i=1
operazione può essere effettuata per tutti i nodi della rete.
3.2.1.2 Combinazioni Lineari
Il problema del codice della rete è selezionare le combinazioni lineari che ogni nodo
della rete deve eseguire. Un algoritmo semplice permette ad ogni nodo di selezionare
a caso i coefficienti all'interno del campo F2s.
Il problema consiste nel fatto che, col Network Coding, si ha una certa probabilità
di avere combinazioni lineari dipendenti, mentre a noi servirebbe che fossero
indipendenti. Uno studio, sul trattato di Y. Wu, P. A. Chou, and K. Jain. “A comparison
16
of Network Coding and tree packing”, dimostra che questa probabilità è legata alla
dimensione del campo F2s e che, per campi di piccole dimensioni, questa probabilità
diventa trascurabile [8].
In alternativa, per ridurre la probabilità possiamo usare particolari algoritmi per
strutturare il codice di rete. Per esempio, un algoritmo polinomiale esamina ogni nodo
della rete e decide quale combinazione lineare esegue ogni nodo, in maniera da non
averne di linearmente dipendenti.
3.2.1.3 Decodifica
Si ipotizzi che un nodo abbia ricevuto l'insieme (g1, X1),.....,(gm, Xm), un insieme di
pacchetti codificati. Per recuperare i pacchetti originali, si deve risolvere il sistema
n
X =∑ g i M , in cui gli M1 pacchetti originali sono sconosciuti. Dato un sistema
j
j
i
i=1
lineare con m equazioni ed n incognite, per avere una possibilità di recuperare tutti i
dati deve essere
m≥n ,
cioè il numero dei pacchetti codificati ricevuti deve essere
grande almeno quanto il numero dei pacchetti originali. Questa condizione è necessaria
ma non sufficiente, in quanto alcune combinazioni potrebbero essere linearmente
dipendenti.
La decodifica richiede, quindi, di risolvere un insieme di equazioni lineari: un nodo
che immagazzina i vettori di codifica, riceve anche i pacchetti originali in una cosiddetta
matrice di codifica, che all'inizio contiene, solamente, i pacchetti non codificati
distribuiti da questo nodo con i corrispondenti vettori di codifica. Quando il nodo riceve
un pacchetto codificato, viene inserito come ultima fila sulla matrice di decodifica. La
matrice viene, poi, trasformata in una matrice triangolare usando un'eliminazione
Gaussiana. Un pacchetto ricevuto è detto innovativo, se fa aumentare il rango della
matrice, mentre se non è innovativo, viene ridotto ad una fila di zeri da un eliminazione
gaussiana e viene ignorato. Finché la matrice contiene una fila della forma (ei, X), il
nodo sa che il pacchetto originale Mi è uguale ad X.
La decodifica sembrerebbe portare un beneficio in termini di ritardo perché
solitamente non è necessario ricevere tutti i pacchetti codificati prima che alcuni
pacchetti possano essere decodificati. Quindi il ritardo complessivo con il Network
17
Coding è, generalmente, non più grande del normale ritardo di una configurazione
realistica.
3.2.2 Network Coding Non Lineare
Innanzitutto si precisa che una rete multicast è un grafico aciclico contenente un nodo
sorgente, alcuni nodi interni ed una raccolta di nodi destinazione. È stato dimostrato che
una sorgente può mandare in maniera multicast k messaggi ad un insieme di nodi
destinazione, se ai nodi è permesso eseguire operazioni di codifica e che il codice
lineare di rete raggiunge la velocità massima raggiungibile per la rete multicast se
l'alfabeto è abbastanza ampio.
Per reti non-multicast si scoprì che il codice lineare non era più sufficiente a
mandare k messaggi in modo multicast, anche se l'alfabeto era essere grande
abbastanza. Perciò, furono condotte delle ricerche sui codici di codifica non lineari,
perché si ritenne fosse la loro conoscenza per le future ricerche. In questa parte della
tesi, viene presentato un nuovo codice di codifica non-lineare, chiamato codice
polinomiale, che costruito a partire dal codice lineare [9].
Si introducono ora alcuni (importanti) concetti che saranno utilizzati in seguito:
•
un codice di rete è definito come l'insieme delle funzioni di codifica associate
con ogni arco ed lineare se tutte le funzioni di codifica sono funzioni lineari.
Altrimenti è non-lineare.
•
un codice è fattibile, se tutti i nodi di destinazione possono recuperare il
messaggio usando l'informazione che hanno ricevuto, altrimenti non è fattibile.
Se Σ è un campo finito di dimensione q, allora qualsiasi funzione f: Σk → Σ può essere
rappresentata unicamente da un polinomio con coefficienti nel campo e con grado
almeno q – 1 per ogni variabile. Per esempio, tutte le funzioni di f: Σk → Σ sono {0, x,
y, x+y, xy, x+xy, y+xy, x+y+xy, 0, x+1, y+1, x+y+1, xy+1, x+xy+1, y+xy+1,
x+y+xy+1}. Dal momento che ogni funzione di codifica lineare può essere
rappresentata da un polinomio di grado maggiore ad uno, il codice di rete non lineare
viene chiamato codice polinomiale.
Come abbiamo detto prima, un codice polinomiale può essere indotto dal codice
18
lineare in un alfabeto di grandi dimensioni, ma non si può dire lo stesso se il codice è
piccolo. Per completezza, vediamo sia il caso con alfabeto binario, sia il caso con
alfabeto di dimensioni abbastanza grandi.
3.2.2.1 Codice Polinomiale Con Alfabeto Binario (q=2)
Si vuole dimostrare che per alfabeti di piccole dimensioni, non è possibile ricavare il
codice polinomiale dal codice lineare.
Lemma 3.1
Quando q=2, se due funzioni f ed f' sono indipendenti, allora sono entrambe funzioni
lineari.
Teorema 3.3
Esiste una rete multicast che ha un codice lineare fattibile, ma non ha un codice
polinomiale fattibile [9].
Dimostrazione
Si prenda la rete multicast G in figura 3.2. G ha un codice lineare possibile ma su vuole
dimostrare che non esiste un codice polinomiale associato, e per farlo, è sufficiente
verificare che ogni codice fattibile è lineare.Se un codice è fattibile implica che il
messaggio della sorgente si ricava dai simboli trasportati sugli archi di ogni taglio. Se
un codice di G è fattibile, le funzioni associate ad ogni taglio devono essere
indipendenti , quindi dal lemma 4.1, deduciamo che tutte le funzioni devono essere
lineari.
Si è dimostrata la tesi secondo la quale ogni codice fattibile di G è solo lineare.
19
Figura 3.2
3.2.2.2 Codice Polinomiale Con Alfabeto Grande (q ≥ 3)
Qui, invece, si dimostra che per alfabeti di grandi dimensioni, è possibile ricavare il
codice polinomiale dal codice lineare.
Teorema 3.4
Quando q ≥ 3, il codice polinomiale può essere costruito dal codice lineare [9].
Dimostrazione
Si definisca f , funzione polinomiale indipendente di fx, poi si sostituisca fy con tutte le
funzioni di L=[fx]∪[fy] ∪[fx+fy], ...,∪[fx+(q−1)fy]. Con questo procedimento si ottiene un
insieme L'=[fx] ∪[f] ∪[fx+f], ...,∪[fx+(q−1)f]. In maniera analoga, rimpiazzando fy con
tutte le funzioni del codice lineare C, si ottiene un codice polinomiale C'. Se due
funzioni in C sono indipendenti, allora le controparti in C' appartengono a diversi
insiemi di equivalenza di L'. E se C è fattibile, anche C' è fattibile.
Si hanno, inoltre, (q!)q funzioni indipendenti di fx, mentre q2(q-1) funzioni linearmente
indipendenti di fx.
Quando q ≥ 3, abbiamo (q!)q > q2(q-1).
La figura 3.3 mostra il codice polinomiale.
20
Figura 3.3
3.2.2.3 Codice Polinomiale Complesso
Nella parte precedente è stato dimostrato che esiste un tipo di codice lineare dove solo il
nodo sorgente esegue delle operazioni non lineari. Si presenta, adesso, un codice
polinomiale più compesso in cui anche i nodi interni eseguono delle operazioni non
lineari.
Il quadrato latino di ordine q è una matrice quadrata qxq , in cui ogni riga ed ogni
colonna sono una permutazione di q simboli differenti.
Una funzione f: Σ2 → Σ può essere trasformata in una matrice {axy} con i suoi elementi
axy che prendono il valore di f(x,y). In questo modo, fx(fy) può essere scritta come una
matrice con elementi axy = x(axy=y). Perciò, un quadrato latino può rappresentare una
funzione f che è indipendente sia da fx sia da fy. Il numero totale di quadrati latini diversi
di ordine q per LS(q) è
LS q≥
q ! 2q
qq
2
Ci sono q(q-1)2 funzioni lineari indipendenti sia di fx sia di fy.
21
3.2.3 Network Coding Algebrico
Uno dei primi approcci al Network Coding fu algebrico; infatti la codifica casuale,
ritenuta di fondamentale importanza per il Network Coding, è stata sviluppata nella
struttura algebrica. L'idea principale di questo tipo di struttura, è pensare ad ogni vertice
del grafo come un elemento capace di memorizzare un simbolo intermedio.
Descriviamo questo sistema come:
s k 1=A s k B u k
y k =C j s k D j uk
dove sk è il vettore di stato di dimensione mx1, yk è il vettore delle uscite di dimensione
hx1, uk è il vettore degli ingressi di dimensione hx1 e A,B,Cj,Dj sono matrici.
La matrice di trasferimento per questo sistema è:
Gj (Q) = Qj + Cj (Q-1 I -A)-1 B dove Q è l'operatore di ritardo.
Viene ricavata anche la matrice di trasferimento per un ipotetico ricevitore Rj,, usando
un ritardo unitario:
Aj = Dj + Cj (I-A)-1 B
Nel sistema di equazioni sopra descritto, A è comune per tutti i ricevitori ed indica ad
indicare come gli elementi di memoria, ovvero i vertici siano connessi tra loro Quanto
appena descritto è la topologia della rete. La matrice B è comune per tutti i ricevitori e
mostra come gli ingressi sono connessi al nostro grafo. Le matrici Cj chiarisce come le
uscite dei ricevitori Rj dipendano dalle variabili di stato mentre la matrice Dj fa la stessa
cosa per gli ingressi. Le matrici B, Cj e Dj dipendono dal numero di archi del nostro
grafo, che può essere molto grande.
Ordinando gli elementi dei vettori, la matrice A può diventare una matrice triangolare
superiore. Definita L, la lunghezza del percorso più lungo da sorgente a ricevitore si
nota che A L+1 = 0. In altra parole, questo vuol dire che:
(I – A) -1 =I + A + A2 +....+AL.
L'equazione implica che gli elementi della matrice di trasferimento Aj sono polinomiali
con variabili sconosciute. È facile vedere che A è una matrice incidenza (matrice
composta da 0, 1 e -1 a seconda di come sono orientati gli archi che collegano i nodi e
22
se l'arco collega o meno un nodo ad un altro).
Assumendo che Dj = 0 e sostituendolo nell'equazione Aj = Dj + Cj (I-A)-1 B si ottiene
Aj=Cj (I-A)-1 B. Da qui segue il seguente lemma:
Lemma 3.2
Si prenda Aj = Cj (I-A)-1 B. Per A, matrice triangolare superiore in senso stretto otteniamo
che:
∣det A j∣=∣det N j∣ dove

N j=
Cj
0
I−A B

Dimostrazione
Si noti che det N j=



Cj
0
0
Cj
=±det
I−A B
B I−A

Permutare le colonne della matrice influisce sul suo determinante. Usando, adesso, una
formula, nota come formula di Schur, si riesce ad avere:
−1
±det N j =det  I − A det C j  I − A B
23
24
Capitolo 4
Applicazioni del Network Coding
L'emergere del Network Coding ha portato ad un cambiamento nel modo di pensare la
comunicazione di rete: rispetto alla visione tradizionale, in cui i nodi trasmettono
semplicemente l'informazione, col Network Coding siamo in grado di consentire ai nodi
non solo di spedire, ma anche di elaborare i flussi in arrivo.
Nel seguente capitolo esporremo alcune applicazioni del Network Coding e discuteremo
come i benefici, menzionati nel capitolo 2, possano migliorare le performance di rete.
In particolare, ci concentreremo su:
•
Applicazioni su Reti P2P
•
Applicazioni su Reti Wireless
•
Applicazioni sulla Sicurezza
4.1 Visione Generale di Reti P2P
Per peer-to-peer (o P2P), cioè rete paritaria, si intende una rete di computer o qualsiasi
rete informatica che non possiede nodi gerarchizzati come client o server fissi , ma un
numero di nodi equivalenti (in inglese peer) che fungono sia da client che da server
verso altri nodi della rete. Mediante questa configurazione qualsiasi nodo è in grado di
25
avviare o completare una transazione ed, in particolare, questa rete viene usata per la
distribuzione di contenuti.
Per distribuzione di contenuti su Internet, si intende la spedizione di dati digitali
come testi, file multimediali, software verso un grande numero di utenti sulla rete e,
tutt'oggi, costituisce la maggior parte del traffico Internet. In una rete P2P, tutti i nodi
che ricevono informazioni, aiutano la distribuzione del contenuto intervenendo loro
stessi come server. In tal modo la rete è scalabile ed, inoltre, non esiste più un unico
punto di fallimento (un server crash) in quanto le informazioni sono distribuite tra i nodi
su tutta la rete.
BitTorrent è un esempio di sistema P2P, che utilizza tecniche per diffondere
simultaneamente diversi frammenti di un file tra i diversi peer. L'acquisizione di un file,
attraverso la raccolta di suoi frammenti, può essere
paragonato al problema del
collezionista di tagliandi, che deve raccoglierli tutti per completare la collezione. Il
collezionista di tagliandi e un peer possono avere problemi simili come, ad esempio,
che la probabilità di acquisire un frammento di file scende rapidamente con il numero di
quello già raccolte.
Inoltre, come il numero di peer aumenta, diventa più difficile fare la pianificazione
ottimale della distribuzione di frammenti ai ricevitori. Una possibile soluzione è quella
di utilizzare un procedimento euristico che da la priorità a scambi di frammenti più rari
a livello locale. Ma questi frammenti spesso non corrispondono a quelli che sono
globalmente più rari. Le conseguenze sono, tra le altre,
download più lenti e
trasferimenti in fase di stallo.
La distribuzione di contenuti sicuri di Microsoft (MSCD), conosciuta anche come
Avalanche, invece, è un esempio di sistema P2P che tenta di alleggerire questi problemi
usando Network Coding. Invece di distribuire i frammenti del file originale, i peers
producono combinazioni lineari dei frammenti che sono già validi. Tali combinazioni
sono distribuite insieme a una tag, che descrive i coefficienti della combinazione.
Quando un peer ha abbastanza combinazioni linearmente indipendenti dei frammenti
originali, riesce decodificare e ricostruire il file originale.
Descriviamo per prima cosa, la soluzione di BitTorrent per la distribuzione di
contenuti P2P, dal momento che Avalanche adotta una serie di idee da questa soluzione.
26
Figura 4.1: Esempio di Rete P2P
4.2 Applicazioni su Reti P2P
4.2.1 BitTorrent
Per ogni file che deve essere distribuito, viene creata una rete composta da peer. Oltre ai
peers generali, possiamo avere dei nodi speciali: il registrar, che attiva la scoperta di
peer e tiene traccia della topologia, il logger, che aggrega i messaggi di analisi di peers e
registrar ed i seeds, che sono peer che hanno acquisito il contenuto completo.
L'origine del file sorgente è il primo nodo della rete. Per raggiungere una rete, i
peers contattano il registrar, e vengono connessi ad un piccolo numero (di solito 4-8) di
nodi vicini. I vicini, per ogni nodo d'arrivo, sono scelti a caso tra i nodi partecipanti, che
accettano la connessione a meno che non abbiano già raggiunto il loro numero massimo
di vicini. Ogni nodo mantiene le informazioni topologiche locali, vale a dire, l'identità
dei vicini ed il registrar registra la lista dei peers attivi. Un peer può entrare e uscire
dalla rete in qualsiasi momento. Per evitare che si formino isole isolate di peers
(cluster), i nodi, periodicamente, abbandonano un vicino e si riconnettono ad uno
27
nuovo, chiedendo al registrar di selezionare a caso un nuovo vicino dalla lista dei peers
attivi.
Per quanto riguarda la propagazione dei contenuti, la sorgente divide il file da
distribuire in N blocchi. Ogni peer in possesso di un blocco agisce come un server per
esso. Per decidere quali dei suoi blocchi un peer deve far partire, ad esempio, può
scegliere una tra le diverse strategie di propagazione dei contenuti, inviando:
•
o un blocco casuale all'inizio della distribuzione
•
o un blocco tra i più rari a livello locale
•
o un blocco più raro a livello globale delle piccole reti P2P
Figura 4.2: Esempio di Rete BitTorrent
4.2.2 Avalanche
Microsoft Secure Content Distribution, l'intepretazione Microsoft di Avalanche, benché
similare a BitTorrent, in quanto basata sugli stessi principi per la gestione della
topologia di rete, si caratterizza per l'impiego del Network Coding casuale nella
distribuzione di contenuti.
Analogamente a BitTorrent, la sorgente divide il file in n blocchi B1, B2,.......,Bk e
carica le diverse codifiche, di questi blocchi, a diversi utenti a caso. Gli utenti aiutano a
distribuire il file, facendo l'upload dei blocchi in loro possesso, agli altri utenti nella
28
rete. Mediante tali operazioni, l'informazione riesce a disperdersi in maniera rapida e il
file è spedito ad ogni utente nella rete. In una rete di distribuzione di contenuti, i nuovi
utenti possono collegarsi alla rete, come nodo nuovo, in qualsiasi momento, fino a
quando il processo di distribuzione è attivo. Al suo arrivo, il nuovo utente si metterà in
contatto con un tracker (un server centralizzato) per poter ottenere una lista dei peer,
adiacenti al nodo, con cui comunicare.
Come già ribadito, ciò che distingue Avalanche da BitTorrent o da qualsiasi altra
rete P2P è l'utilizzo del Network Coding, che differenza del routing, permette la codifica
dei nodi all'interno della rete e quindi uno throughput massimo quando l'informazione
viene spedita in ambiente multicast.
In Avalanche, i blocchi di dati B1, B2,.......,Bk sono rappresentati dai simboli in un
campo finito F, che si riferisce ad un campo base, che ha dimensione nell'ordine del 216.
All'inizio del processo di distribuzione, un Client A contatta il server e ottiene un
numero di blocchi codificati. Per esempio, il server carica due blocchi codificati E1 e E2
al client A. E1 e E2 sono combinazioni lineari casuali di B1, B2,.......,Bk. Ovvero, invece
di scegliere due particolari blocchi di dati non codificati da caricare, il server crea due
blocchi codificati, applicando il Network Coding a tutti i blocchi che possiede e li carica
al Client A. Associato con ogni blocco codificato Ei, c'è un vettore di coefficienti ui che
combiniamo con B1, B2,.......,Bk per costruire Ei. I blocchi E1 e E2 sono formati da
E i=ci1 B1ci2 B 2...c ik B k dove u i=[cij ]. Quando il blocco Ei è caricato, il vettore
di coefficienti ui viene caricato insieme.
Riassumendo, un nodo carica i blocchi codificati di un nodo vicino. Il blocco è
formato combinando in maniera lineare e casuale i blocchi che il nodo possiede.
Continuando con l'esempio precedente, quando il Client A ha bisogno di caricare un
blocco di codifica E3 da un vicino Client B abbiamo
E 3=c31 E 1c 32 E 2 , dove
c 31 e
c 32 sono scelti in maniera casuale.
Sostituendo
E i=ci1 B1ci2 B 2...c ik B k nella
k
otteniamo
3
3
E 3=c1 E 1c 2 E 2
k
E 3=∑ c ⋅c c ⋅c  B j =∑ c13⋅u1j c 32⋅u 2j  B j .
3
1
j =1
1
j
3
2
2
j
j=1
Così il vettore di coefficienti u3 è dato da
29
c 31⋅u 1c 32⋅u 2 .
Come abbiamo
già
accennato, u3, E3 vengono caricati insieme dal Client B. Dopo aver ricevuto abbastanza
blocchi codificati linearmente indipendenti, un nodo è in grado di decodificare l'intero
file [10].
Si precisa, infine, che in BitTorrent, il mittente trasmette in maniera casuale, il suo
pacchetto più raro a livello locale o il più raro a livello mondiale. In Avalanche, il
mittente non conosce la percentuale di pacchetti uguale ai suoi tra i vicini o nella rete,
ma genera una combinazione lineare casuale di tutti i suoi pacchetti.
Si evince che l'applicazione del Network Coding può consentire la riduzione del
tempo di download di file perché un blocco codificato caricato da un nodo contiene
informazioni su ogni blocco posseduto da quel nodo. Inoltre, se un nodo lascia la rete
prima della fine del processo di distribuzione, è più probabile che i nodi rimanenti
abbiano tutte le informazioni necessarie per recuperare l'intero file.
Figura 4.3: Esempio di funzionamento di Avalanche
5.2.2.1 Vantaggi di Avalanche
Avalanche presenta molteplici vantaggi rispetto ai sistemi di distribuzione P2P, che non
utilizzano la codifica di rete.
•
Affidabilità. I pacchetti possono essere persi a causa dei nodi che lasciano la
rete e delle perdite di trasmissione. Senza Network Coding, alcuni alcuni
frammenti del file, che sono stati distribuiti, possono diventare difficili da
reperire. Questi frammenti possono essere persi per sempre, se i pochi nodi che
li possiedono, lasciano la rete. Con Network Coding, a causa della combinazione
30
lineare, i frammenti originali del file sono presenti in un grande numero di
pacchetti, e così la probabilità, che un particolare frammento diventi raro, è
ridotta.
•
Free Riding. I free riders sono peers che usano le risorse della rete senza
contribuire con le proprie. Con BitTorrent siamo riusciti ad attenuare questo
problema con un meccanismo chiamato “tit-for-tat”, che permette di scaricare ad
una velocità proporzionale alla velocità di upload. Questa strategia penalizza i
nuovi utenti, che vogliono entrare nella rete perché, ovviamente non possono
disporre di informazioni innovative per i loro vicini. Il Network Coding aiuta ad
alleviare questa situazione, dal momento che un pacchetto codificato sarà, con
maggiore probabilità, utile ad un numero maggiore di nodi.
•
Churn. Un churn, nella rete P2P si riferisce agli arrivi e alle partenze di
numerosi peers all'interno della rete ed è sorgente di parecchi problemi. Per
esempio, immaginiamo uno scenario in cui il nodo A ha scaricato 80% del file,
quando un nuovo nodo B si connette alla rete, e richiede di ottenere i pacchetti
dai suoi vicini. Come risultato, i pacchetti che A ha già scaricato, vengono di
nuovo scaricati attraverso alcuni percorsi comuni, portando a un aumento di
ritardo per il nodo A. Utilizzo del Network Coding riduce questo problema, dal
momento che tutti i pacchetti trasmessi possono essere fatti per trasportare le
informazioni utili a un gran numero di nodi.
4.2.3 Critica all'uso del Network Coding sulle reti P2P
Nei paragrafi precedenti si sono discussi i benefici che l'applicazione del Network
Coding può offrire alle reti, nel seguente, invece, ci si concentra sulla possibile
generalizzazione dei suddetti vantaggi nell'ambito di qualsiasi tipologia di rete P2P. In
particolare, se si considera una rete P2P a stella, si può dimostrare che per questo
specifico tipo di rete, non vi è alcun vantaggio ad usare il Network Coding, piuttosto del
routing, in termini di throughput massimo ottenibile [11].
La rete a stella, riportata in figura 4.4, è composta da un server ed N peers, ognuno
31
con uplink e downlink. Il server ha capacità di downlink C0 mentre la capacità di uplink
è trascurabile in quanto non deve caricare. Ogni peer i, con i=1,...,N, ha una capacità di
uplink Ci ed una capacità di downlink separata che si ipotizza infinita. Si aasuma,
inoltre, che il file sia infinitamente grande in modo che il server possa fare invii continui
ai peers.
I peers inviano il contenuto agli altri peers un pezzo per volta dai loro uplink. Dato
che ogni pezzo del file deve essere inviato a tutti i peer, la composizione di questi
percorsi deve formare uno spanning tree.
Figura 4.4: Rete a Stella
Si definisce, per prima cosa, qual'è il throughput massimo per una rete a stella.
Teorema 4.1
Data una rete a stella ed un flusso di carico C0 , lo throughput massimo del sistema è
R = min
{
C 0,
C 0Σ j C j
n
}
[11].
Dimostrazione
Ogni spanning tree k è identificato da un unico rapporto di utilizzo delle risorse dato da
(s0(k), s1(k),......, sn(k)), dove ogni si(k) rappresenta l'utilizzo del collegamento Ci ,
relativo a tutti gli altri link (C0, C1,...., Cn) tali che
Σ i s i k =n .
Prendendo S come
l'insieme di diversi spanning tree usati e λk come la velocità alla quale sono spediti i
32
contenuti, si ottiene
∑ λk s i k ≤C i
per qualsiasi i.
k∈ S
In questa semplice rete a stella, tutti gli uplink dei peers sono equivalenti e possono
essere utilizzati per servire altri peer in modo intercambiabile. Per questo motivo
possiamo considerare tutti i peers, come un unico peer equivalente (server2) di capacità
n
totale, C=∑ C j , come mostrato in figura 4.5.
j =1
figura 4.5: Rete a Stella Equivalente
Questo ci permette di aggregare tutti gli spannning tree con la medesima risorsa r0 nella
medesima classe.
Sia
λ i , l'intensità di traffico dell'i-esima classe dello spanning tree. Il problema
n
dell'ottimizzazione dello throughput si riduce alla massimizzazione di
∑ λi
i=1
n
alla
∑ iλi≤C 0
n
da cui ricaviamo
i=1
∑ n−i λi ≤C .
i=1
Da qui si ricava che il throughput massimo è:
R=
C 0C
n
C0
se C 0≥
C
n−1
se C 0
C
n−1
33
in base
Si è dimostrato il teorema e calcolato il throughput massimo per questa rete. A questo
punto si può verificare se utilizzando il Network Coding sia possibile avere uno
throughput migliore.
Teorema 4.2
Data una rete a stella senza codifica o multicast nella rete, allora qualsiasi codifica
applicata ai peers non può migliorare il throughput dato nel teorema 5.1 [11].
Dimostrazione
La dimostrazione è molto semplice. C0 è il minimo-taglio di tutti i peers. Per
raggiungere un certo valore X di throughput, un peer deve ricevere il contenuto, dal
server o dagli altri peers, ad una velocità pari almeno Y ≥ X . Questo succede sia che
sia usato il Network Coding o meno. Il Network Coding, al massimo, aiuta a garantire
che non ci siano informazioni ridondanti, in modo da poter dedurre X. La rete a stella,
che stiamo considerando, non fa multicast, quindi non genera nessuna informazione
distinta. Quindi, la capacità totale di soddisfare tutti i peers è C0+C. Se la quantità è
minore di nC0, allora si divide la capacità per gli n peers, ed si ottiene uno throughput
massimo di
C 0C
.
n
Il valore è esattamente lo stesso di quello trovato nel primo
teorema, per cui si è dimostrato che il Network Coding non otterrà un valore migliore di
throughput rispetto al semplice routing.
Si precisa, però, che lo studio appena discusso è stato svolto su una rete P2P ideale
e statica. Nella realtà questo sistema è molto improbabile perché in una rete P2P, i peers
arrivano in tempi diversi ed hanno comportamenti di partenza diversi, il che significa
che la topologia di rete è in continua evoluzione. Per cui a livello reale, non valgono i
risultati teorici che si sono ottenuti.
34
4.3 Applicazioni su Reti Wireless
Come già accennato nel capitolo 2, il Network Coding può migliorare il throughput
quando due nodi wireless A e C vogliono comunicare attraverso un comune dispositivo
B (figura 4.6). Si discuteranno i vantaggi del Network Coding in una rete wireless adhoc, nella quale ogni nodo è una sorgente che vuole trasmettere informazioni a tutti gli
altri nodi ed, in particolare si esporranno i benefici ottenuti con la rete ad anello e da una
rete a griglia quadrata.
Figura 4.6
4.3.1 Rete a Griglia Circolare
Teorema 4.3
Si consideri una rete ad anello dove gli n nodi sono posizionati ad uguale distanza su di
un cerchio, ed ogni nodo può trasmettere correttamente le informazioni a due vicini. Si
definiscono Tnc e Tw , rispettivamente, il numero minimo possibile di trasmissioni
richieste per una unità di informazione per raggiungere tutti i nodi della rete, con e
senza Network Coding, tali che:
1) Tw ≥ n − 2
2) Tnc ≥ (n − 1)/2
Il teorema ci dice che in entrambi i casi, ci sono schemi che consentono di raggiungere
35
T nc 1
= [12].
2
n ∞ T w
il limite inferiore, ottenendo: lim
Si dimostra, in altre parole, che si ottiene uno throughput migliore usando il Network
Coding.
Dimostrazione
Per dimostrare la prima dichiarazione (Tw ≥ n − 2) ,si una sorgente singola che trasmette
ad n – 1 ricevitori in cui la prima trasmissione raggiunge i due ricevitori ed ogni
trasmissione aggiuntiva può contribuire con una unità di informazioni ad un ricevitore.
Per dimostrare la seconda dichiarazione (Tnc ≥ (n − 1)/2), si noti che, poiché un nodo
può trasmettere correttamente ai due nodi vicini, ogni trasmissione broadcast è in grado
di trasferire al massimo un pacchetto innovativo a due ricevitori. Abbiamo n -1
ricevitori e quindi la migliore efficienza energetica in cui si può sperare è (n - 1) / 2 per
pacchetto. Lo schema seguente raggiunge il limite inferiore.
Si supponga che n sia un numero pari. Dividiamo i nodi n in due insiemi A = {α1,...,
αn/2} e B = {β1,..., βn/2} di dimensione n/2 ciascuno, in modo tale che ogni nodo in A ha
come vicini i due nodi più vicini di B, come illustrato nella figura 4.7(c). È sufficiente a
dimostrare che si può trasmettere un pacchetto proveniente da ogni nodo nell'insieme A
a tutti i nodi negli insiemi A e B utilizzando Tnc = n / 2 trasmissioni per pacchetto. Si
ripete, quindi, questa procedura simmetricamente per diffondere le informazioni dai
nodi in B. Siano {x1,..., xn/2} le unità di informazioni associate con i nodi in A.
L'algoritmo opera nei seguenti n / 4 passi, dove in ogni fase i primi nodi di A
trasmettono e i nodi di B ricevono e poi i nodi B trasmetteranno e i nodi di A
riceveranno.
Al passo K:
•
Fase 1: se k=1ogni αi ∈ A trasmette le sue informazioni al simbolo xi
se k>1 ogni αi ∈ A trasmette la somma delle due informazioni ricevute
nella fase 2
•
Fase 2: ogni βi ∈ B trasmette la somma delle due informazioni ricevute nella
fase
1, passo k.
Quindi, nella fase 1 ogni nodo B sta per ricevere due nuovi simboli dalle due sorgenti
36
che sono a 2k – 1 nodi di distanza lungo il cerchio. Nella fase 2, ogni nodo A sta per
ricevere due unità di informazione dalle sorgenti che sono a 2k nodi di distanza. Dato
che l'algoritmo di Network Coding si esaurisce in n / 4 passi ed assicura che ogni
trasmissione broadcast porti nuove informazioni ai due ricevitori, il risultato è
dimostrato.
Figura 4.7(a): Esempio di rete a griglia circolare quando n=8.
Figura 4.7(b): Rete a griglia circolare che non usa Network Coding.
Tutte le trasmissioni raggiungono un nuovo vicino
37
Figura 4.7(c): Rete a griglia circolare che usa Network Coding. Tutte le trasmissioni raggiungono
due nodi vicini. I nodi sulla rete vengono divisi in due sottoinsiemi: i nodi gialli sono il sottoinsieme
a e i nodi colorati sono il sottoinsieme b.
5.3.2 Rete a Griglia Quadrata
Lo stesso ragionamento fatto per la rete a griglia circolare, vale anche per quella a
griglia quadrata. Anche in questa tipologia di rete si ottiene uno throughput migliore
usando il Network Coding.
Teorema 4.4
Consideriamo le strategie di Network Coding che minimizzano il numero di problemi di
trasmissione tutti-a-tutti, su una rete quadrata con n nodi, dove ogni nodo può,
correttamente, trasmettere informazioni ai suoi quattro nodi vicini. Nel caso delle rete
38
T nc 3
= [12].
4
n ∞ T w
quadrata avremo: lim
Iterazione 1: ogni nodo trasmette i simboli di informazione che produce per i suoi
quattro vicini.
Iterazione k: ogni nodo trasmette una combinazione lineare dei simboli di sorgente che
appartengono all'arco dei vettori di codifica che il nodo ha ricevuto nelle
iterazioni precedenti.
Figura 4.8: Rete a griglia quadrata. Facendo uso di Network Coding, tutte le trasmissioni
raggiungono quattro nuovi vicini. Non usando il Network Coding, tutte le trasmissioni raggiungono
tre nuovi vicini.
5.4 Applicazioni sulla Sicurezza
Il Network Coding, influisce anche sulla sicurezza e l'affidabilità dei dati ma, in questo
caso, lo fa sia in modo favorevole che in modo sfavorevole. Si mostra, in figura 4.9,
l'esempio già visto nel capitolo 2. La rete consiste in due canali paralleli di capacità
unitaria, due sorgenti di informazione indipendenti di velocità unitaria, poste sul nodo A
e un utente sul nodo D. L'obiettivo può essere ottenuto da una trasmissione come in
39
figura 4.9(a), in cui è possibile intercettare i dati o da una codifica come in figura 4.9(b).
Qui il Network Coding agisce in maniera favorevole.
Figura 4.9
Consideriamo, invece, la sicurezza in una rete P2P: la codifica dei pacchetti rende il
sistema globale più vulnerabile agli attacchi dei peer cosiddetti “maligni”. Si consideri il
sistema di equazioni Cx1 =b1, dove C è la matrice dei vettori di codifica, xi è il vettore
dei coefficienti e bi è il vettore dei pacchetti originali: in questo sistema un nodo
decodifica correttamente i simboli del file originale in posizione i, solo se le h equazioni
sono fidate, cioè se i valori di C e b1 sono corretti. Anche se solo una delle equazioni è
falsa, la soluzione può dare falsi valori per tutti i simboli h nel vettore x1. Di
conseguenza, la rete diventa più vulnerabile agli attacchi. Inoltre, dal momento che i
pacchetti sono combinati linearmente, se anche uno solo risulta danneggiato, può far
diffondere l'infezione attraverso la rete. A questo riguardo, dobbiamo mettere in atto
meccanismi che verificano che i pacchetti ricevuti non siano corrotti.
Purtroppo, a far si che i pacchetti risultino corrotti, non sono solamente gli attacchi
esterni ma anche la codifica dovuta al Network Coding. Nei sistemi P2P, la sorgente
cripta i pacchetti di dati per garantire la loro integrità, facendo, per esempio, l'hashing
del contenuto e solo il ricevitore è in grado di decriptarli. Però questo metodo non
funziona quando il Network Coding è usato a causa del fatto che il pacchetto viene
modificato nei nodi intermedi della rete quando viene codificato. Quando il pacchetto
arriva al ricevitore, quest'ultimo sia accorge della modifica fatta e la scambia per un
tentativo di violazione dei dati. Quindi, per garantire l'integrità dei pacchetti in un
codice di rete P2P, si possono usare delle funzioni di hash omomorfiche, che riescono a
calcolare la funzione di hash corrispondente ad una combinazione lineare dei pacchetti,
40
a partire dalle funzioni di hash dei pacchetti individuali.
Più in generale, distinguiamo diverse forme di protezione della rete:
•
Sicurezza contro un intercettatore che tenta di recuperare parte dei dati. Il
Network Coding sembra facilitare la protezione contro un intercettatore, dal
momento che le informazioni sono più distanziate ed è più difficile “origliare”.
A questo scopo, possono essere costruiti dei codici di rete sicuri che
impediscono le intercettazioni: la sorgente crea una codice di rete, in cui
combina i dati originali con informazioni casuali, tale che solo i ricevitori sono
in grado di decodificare i pacchetti originali [13]. Si può studiare, in alternativa,
una forma più debole di sicurezza, basata sul fatto i nodi possono decodificare i
pacchetti se hanno ricevuto un numero sufficiente di vettori linearmente
indipendenti. In questo caso, gli utenti malintenzionati, che non sono grado di
poter “origliare” tutta la rete, non sono neanche in grado di decodificare le
informazioni perché non raccolgono un numero sufficiente di vettori linearmente
indipendenti [14].
•
Sicurezza nei confronti di un malintenzionato che tenta di modificare i pacchetti.
Mentre in una rete senza protezione, è facile modificare i pacchetti in modo da
ricevere certe informazioni dal nodo vittima, in una rete in cui viene usato il
Network Coding, l'utente malintenzionato non può conoscere l'effetto che un
pacchetto ha sul nodo destinazione, senza conoscere gli altri pacchetti che
essa riceverà e decodificherà, a causa del fatto che
i percorsi di ciascun
pacchetto sono solitamente differenti.
•
Sicurezza contro gli attacchi di disturbo. Il Network Coding sembra ostacolare
questo tipo di sicurezza, dal momento che modificare pochi pacchetti, potrebbe
incidere su una serie più ampia di dati. Nonostante ciò si stanno studiando
metodi per difendersi da questi tipi di attacchi [15].
41
42
Capitolo 5
Conclusioni
Le informazioni raccolte durante la stesura della tesi forniscono un quadro generale di
come vengono instradate le informazioni sulla rete, in presenza del Network Coding: i
pacchetti non sono più trattati come singoli flussi d'informazione ma vengono elaborati
dai nodi interni della rete allo scopo di costruire un unico pacchetto in uscita a partire
da un certo numero di pacchetti in ingresso.
Si sono evidenziati, inoltre, i benefici che si possono ottenere con l'utilizzo del
Network coding in applicazioni, molto diffuse ed importanti per la vita di tutti i giorni.
In particolare, per le reti P2P e le reti Wireless, che usano il Network Coding, sono stati
riscontrati vantaggi in termini di aumento di throughput, diminuzione del ritardo di
trasmissione e diminiuzione della larghezza di banda rispetto ad una rete che non ne fa
uso.
Essendo un concetto particolarmente, innovativo, sono sorte delle critiche sul suo
effettivo funzionamento, come abbiamo potuto constatare nel corso della tesi. Anche se
si tratta di risultati puramente teorici, questi non aiutano a risolvere il dibattito tra
sostenitori e oppositori del Network Coding. E nonostante siano tuttora in fase di
discussione i vantaggi che l'uso del Network Coding porta a certe applicazioni, come le
reti P2P, non si può negare la sua utilità in altri campi, tra cui il multicasting, in cui
l'aumento del throughput a cui può portare, è notevole.
In ogni caso, grazie ad esso, le applicazioni che abbiamo studiato sono in grado di
43
fornire dei servizi migliori, evoluti e di qualità, a livello di sicurezza, trasmissione dati
ed efficienza energetica. Ci si aspetta che sia una tecnologia fondamentale per le reti del
futuro.
44
Bibliografia
[1] R. W. Yeung e Z. Zhang, “Distributed
source Coding
for
satellite
communications”, IEEE Trans. Inform. Theory, vol. IT-45, pp. 1111–1120, 1999.
[2] R. Ahlswede, N. Cai, S.-Y. R. Li, and R. W. Yeung, “Network information flow,”
IEEE Transactions on Information Theory, vol. 46, pp. 1204–1216, July 2000.
[3] Dalla rete: Raymond W. Yeung, Shuo-Yen Robert Li, Ning Cai, “Network
Coding Theory”, www.iest2.ie.cuhk.edu.hk/~whyeung/publications/tutorial.pdf
[4] Menger, Karl "Zur allgemeinen Kurventheorie". Fund. Math. 10: 96-115.
[5] L. R. Ford Jr. and D. R. Fulkerson, “Maximal flow through a network,”
Canadian Journal of Mathematics, vol. 8, pp. 399–404, 1956.
[6] C. Fragouli and E. Soljanin, “Network Coding fundamentals,” Foundation
and Trends in Networking, vol. 2, no. 1, pp. 1–133, 2007.
[7] C. Fragouli, J.-Y. Le Boudec e J. Widmer, “Network Coding: an instant
primer”, ACM SIGCOMM Computer Communication Review, vol. 36, num. 1
pp. 63-68, Gen. 2006.
45
[8] Paper: Y. Wu, P. A. Chou and K. Jain “A comparison of Network Coding and
tree packings”
[9] Lingxiong Li, Kai Fan, Dongyang Long, “Non Linear Network Coding: A
Case Study”, Proceeding of the International MultiConferenec of Engineers and
Computer Scientists, vol II, 19-21 March, 2008, Hong Kong..
[10] Paper: Raymond W. Yeung, “Avalanche: A Network Coding Analysis”
[11] Dah Ming Chiu, Raymond W. Yeung, Jiaqing Huang and Bin Fan “Can
Network Coding Help in P2P Networks?”, Modeling and Optimization in
Mobile, Ad Hoc and Wireless Networks, 2006 4th International Symposium on
[12] C. Fragouli and E. Soljanin, “Network Coding application,” Foundation and
Trends in Networking, vol. 2, no. 2, pp. 1–135, 2007.
[13] N. Cai e R. W. Yeung, “Secure Network Coding”, ISIT, 2002.
[14] K. Bhattad and K. R. Narayanan, “Weakly Secure Network Coding,” in Proceedings of First Workshop on Network Coding, Theory, and Applications
(NetCod’05), April 2005.
[15] C. Gkantsidis and P. R. Rodriguez. “Cooperative security for Network
Coding file distribution”. Technical Report accepted at Infocom, 2006.
46