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 i1 1 i1 con 0 ≤ i< l1. =1 indica che l'arco e è stato usato nella direzione tra v 1i a v 1i1 . 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 ik1 tale che p v v =0 oppure p v v =1. k i k i1 k i k i1 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 i1 e p v v =1. k i k i1 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 i1 =0 o p ev 1 i 1 v i1 =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 B1ci2 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 1c 32 E 2 , dove c 31 e c 32 sono scelti in maniera casuale. Sostituendo E i=ci1 B1ci2 B 2...c ik B k nella k otteniamo 3 3 E 3=c1 E 1c 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 1c 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 0C 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 0C . 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