Capitolo 1
Il Protocollo 802.1Q
1.1
La rete LAN
La struttura della Ethernet si è evoluta freneticamente negli ultimi anni portando alla definitiva affermazione di standard che conferiscono alla rete locale una struttura affidabile veloce e flessibile.
Il mezzo trasmissivo più utilizzato è quello che si basa su cavo UTP o su fibra ottica, di conseguenza ogni segmento è formato da due soli terminali e tutti gli End-system sono uniti tra loro tramite nodi; la struttura che né deriva è quindi un core formato da ripetitori a cui sono collegati gli End-system o altri nodi periferici.
La rete LAN è una struttura che può vantare una buona affidabilità in quanto implementa nei suoi nodi tutti quei meccanismi utili all’instradamento e alla soppressione dei loop, la risposta della rete ai malfunzionamenti risulta buona e non viene mai compromessa la struttura. Possiamo affermare inoltre che la LAN ha un buon supporto fisico per quanto riguarda la velocità trasmissiva, questo aspetto delle reti locali è in continua evoluzione, ma la crescita cosi veloce della potenzialità trasmissiva è stata possibile solo grazie al parallelo sviluppo delle potenze di processing degli Switch; questi nodi hanno affinato in modo estremo il
L’evoluzione di queste macchine ha portato allo sviluppo di meccanismi sofisticati cosi da poter eseguire tutte le operazioni richieste; siamo passati dal semplice ripetitore che effettua l’inoltro indiscriminato dei pacchetti su tutte le porte a sofisticati strumenti che effettuano un inoltro intelligente e selettivo sui giusti canali creando delle tabelle di routing e riuscendo a gestire ottimamente le risorse disponibili.
I ripetitori danno la possibilità di estendere la struttura di una LAN a molte macchine in modo molto semplice ed efficiente e la loro presenza permette di effettuare degli upgrade senza dover per questo modificare la preesistente struttura, questa flessibilità ha sicuramente contribuito alla diffusione di questo standard.
La tecnologia delle Ethernet opera solo a livello 1 e 2 della pila protocollare (Appendice A) e in altre parole interagisce solo con il PHYSICAL LAYER e il DATA LINK LAYER.
Il livello 1 gestisce la trasmissione dei bit sulla linea di comunicazione e gli standard che riguardano questo layer gestiscono la formattazione del segnale usato nelle modulazioni, la lunghezza massima del cavo dovuta alle attenuazioni, il mezzo usato e il tipo di connettore.
Il livello Data Link raccoglie un flusso di bit in un aggregato chiamato frame o Trama e gestisce gli elementi come il formato dell’indirizzo, il formato del frame e le regole di accesso al mezzo (MAC).
Il MAC o Media Access Control è la parte di controllo layer 2 più bassa di tutta la pila protocollare e fornisce i primi strumenti di verifica e instradamento; l’evoluzione delle LAN verso un modello sempre più sofisticato e preciso ha portato, vedi figura 1, la divisione del MAC in Sub-layer inseriti di volta in volta per esigenze particolari.
E’ il MAC che noi andremo a studiare più in dettaglio e ad analizzare il metodo di funzionamento per poi modificarne alcune parti per la gestione delle code con priorità.
Figura 1.Ethernet Switch Completo
1.2
Virtual Bridge Local Area Network
Il protocollo 802.1Q o Virtual Bridge Local Area Network ha visto la sua definitiva stesura nel maggio del 2003, questo standard è stato formalmente definito data la progressiva importanza che le Virtual LAN e le priorità stanno assumendo nell’ambito delle trasmissioni locali.
Dato il forte interesse per questi tipi di comunicazioni è stato deciso di riservare un “TAG” all’interno del pacchetto ethernet che permette di dar vita alle reti virtuali e alle priorità.
Il pacchetto ethernet è un incapsulamento proprio del livello 2 dello strato protocollare, quindi è chiaro che l’intento è quello di spostare la gestione delle priorità a questo livello piuttosto che continuare con quella attualmente in uso che è prerogativa dei supporti ad alto livello come per esempio i router (Layer 3 Device).
Questa modifica comporta delle sostanziali differenze nella gestione delle reti in quanto il pacchetto che ora ci interessa non è più l’IP ma l’implementazione riguarda un livello più basso.
Contemporaneamente con la stesura del protocollo sono apparsi sul mercato i VLAN Switch nodi di rete predisposti alla lettura del Tag presente nel pacchetto.
Il VLAN Switch è un’evoluzione dello Switch Layer 2; la direzione di sviluppo è quella di creare macchine sempre più veloci e potenti che generano nodi intelligenti nella rete.
Ci sono diversi vantaggi nello scegliere una LAN molto estesa divisa in VLAN piuttosto che molte LAN più piccole collegate con router. Gli Switch ad alta capacità, che supportano le VLAN, hanno un costo inferiore e sono più semplici da configurare, inoltre c’è da tenere in considerazione un fatto molto importante, la velocità di elaborazione ed instradamento degli Switch è superiore a quella dei router dato che c’è bisogno di una decapsulazione in meno, in questo modo si riduce il tempo di processing e quindi di forwarding.
Ogni frame è elaborato in base al VLAN ID e al suo indirizzo MAC dato che il concetto di VLAN è stato introdotto come metodo di controllo per il
flusso dati, ogni flusso è isolato dagli altri e il traffico prodotto rimane confinato all’interno della LAN virtuale
Vediamo, con l’aiuto di una immagine la struttura del frame. Viene aggiunto un Tag Header nel MAC frame, il campo inserito non snatura la struttura originale del frame e porta così dei vantaggi a livello di compatibilità.
Il campo TCI (Tag Control Information) è diviso in tre parti per un totale di 2 Byte.
Figura 2. Ethernet frame con Tag Header
La prima parte è il VLAN ID, un campo composto da 12 bit che permette di identificare 4095 VLAN diverse.
Alcuni di questi campi sono riservati:
• 0 – indica che non sono presenti VLAN.(Null ID) • 1 – indica il riferimento di default del VLAN ID • 2 _4094 – intervallo utile
• 4095 – riservato
La seconda parte del TCI prende il nome di User Priority. Questo campo, dedicato alle priorità, è formato da tre bit che permettono di distinguere fino a 8 priorità diverse
La terza parte è rappresentata da un bit flag: il CFI (Canonical Format Indicator), se settato indica la presenza di un ulteriore campo il E-RIF (Embended Routing Information Field) di dimensioni variabili da 2 a 30 Byte che gestisce il Traslational bridge.
Il Tag Header gestisce sia la suddivisione in LAN virtuali che l’assegnazione delle priorità ed è possibile utilizzare separatamente le due. L’assegnazione delle priorità rende l’architettura più complessa in quanto lo Switch deve dividere logicamente le code in funzione delle priorità, avviene per ogni porta e può risultare molto pesante sia come processing che come allocazione di memoria.
L’assegnazione delle priorità è un problema che è stato trattato a vari livelli della pila protocollare ed in vari modi, come per esempio per protocollo, per applicazione o per indirizzo IP ma è stato studiato a livello 2, vale a dire ad un layer così basso da poter essere gestito da un Switch.
Generalmente per gestire l’inoltro si utilizza un criterio FIFO (first in first out) in cui tutti i pacchetti vengono trattati nello stesso modo. Con questa
tecnica non si presta attenzione al fatto che i pacchetti potrebbero trasportare informazioni che hanno necessità di ritardo e perdite diverse. L’importanza del traffico prodotto da un utente è variabile:
• Delay Sensitive: questo tipo di traffico è caratterizzato dal rate e dalla durata; ha bisogno di trasmissioni real time con soglie di ritardo molto basse. Esempi sono trasmissioni VoIP, telediagnosi e telemedicina.
• Loss Sensitive: questo traffico non accetta nessun tipo di perdita di pacchetti. Non è importante che arrivi immediatamente ma è importante che arrivi tutto. Il bulk transfer è un esempio. Se avvengono delle perdite il contenuto risulta snaturato.
Le classi di priorità implementate sono otto ma non sempre sono gestite o gestibili; i vari costruttori hanno dato alle macchine il numero di priorità che meglio si addicevano alle loro potenzialità e al numero di porte.
Per ogni frame che arriva allo Switch deve essere scelta la coda con priorità giusta; per fare questo esiste una particolare mappatura dei bit che ci permette di scegliere la coda.
Le classi di priorità usate in uno switch non modificano il valore dei bit presenti nei frame, quindi normalmente un frame viene inoltrato senza alcun cambiamento.
1.3
Qualità del Servizio
L’avvento dei network a banda larga ha aumentato drasticamente la capacità del packet switch e di conseguenza la possibilità di dar vita a nuove applicazioni come la videoconferenza e il VoIP.
La varietà di questi scenari crea una molteplicità di condizioni diverse sulla qualità del servizio richiesta dalle varie connessioni, il modello di servizio che di volta in volta viene utilizzato per soddisfare certe esigenze è divenuto sempre più importante e le ricerche per migliorare il range di utilizzo della qualità di servizio ha portato a tecniche molto sofisticate.
Per massimizzare le risorse del nostro network abbiamo deciso di utilizzare le possibilità di espansione fornita dal tag presente nel pacchetto ethernet e di gestire quindi le code presenti nello switch con uno scheduling WFQ (Weighted Fair Queueing) basato sulle priorità inserite nel campo User Priority.
1.4
Packet scheduling
Uno degli scopi del packet scheduling è quello di ottenere una equa ed al contempo efficiente allocazione della banda del canale.
Gli algoritmi di scheduling dei pacchetti gestiscono il traffico dati al fine di definire quando iniziare una determinata trasmissione e con quale bit rate rispettando la qualità del servizio propria dei singoli flussi; negli anni sono nate molte implementazioni di scheduler che hanno dato vita a meccanismi sempre più veloci e equi (Fair).
Figura 3. Packet Scheduling
Gli algoritmi di schedulazione si possono suddividere in due classi : • Work –conserving
• Non Work-conserving
Il primo tipo è uno scheduling che non permette mai al canale di uscita di rimanere inattivo se vi sono pacchetti pronti per essere trasmessi.
Il secondo tipo al contrario assegna un istante di eleggibilità al pacchetto indipendentemente dallo stato del canale, questo può far si che il pacchetto non venga spedito anche se il canale è libero, questo può sembrare un contro senso ma non sfruttare tutta la banda in uscita può offrire un maggior controllo sul traffico.
In termini di ritardi massimi ovviamente uno scheduler Work-conserving offre delle prestazioni migliori.
presentano questi moduli.
In primo luogo uno scheduler deve fornire prestazioni garantite per quanto riguarda ritardi End-to-end ovvero deve fornire la QoS richiesta in base alle risorse di un determinato flusso, è desiderabile che questo avvenga indipendentemente dagli altri flussi.
In secondo luogo, come già accennato, un algoritmo deve essere fair ovvero deve distribuire la banda in uscita in modo equo tra i vari flussi, ossia deve offrire ad ogni flusso il suo rate allocato.
In fine uno scheduler deve avere un buon funzionamento anche con un numero alto di flussi e riuscire quindi ad isolare le connessioni evitando di diminuire le prestazioni.
Per quanto riguarda questo lavoro di tesi prenderemo in considerazioni algoritmi di tipo Work-conserving ed analizzeremo in articolare il WFQ che verrà poi inserito nel programma di simulazione
La migliore implementazione realizzata per un algoritmo di packet scheduling è quella del modello fluidico o GPS (Generalized Processor Sharing) in quanto risulta molto efficiente e fornisce le migliori caratteristiche.
Il GPS è una disciplina di multiplexing efficiente, flessibile ed analizzabile per questo è molto utile e apprezzata nell’ambito di ricerca ma purtroppo data la granularità intrinseca delle informazioni, ovvero il fatto che vengano trasmessi dati suddivisi in pacchetti, questo metodo non è applicabile a sistemi reali.
Il WFQ è una disciplina di scheduling che cerca di emulare il GPS anche nel caso in cui si usino pacchetti di dimensione variabile, l’accostamento dei due modelli non è perfetto e produce dei deterioramenti.
riescono ad ottenere prestazioni garantite.
Il problema principale nel realizzare il WFQ cercando di rimanere fedeli al modello fluidica è che non sarà mantenuto il reale ordine di servizio, vediamo quindi questo problema nel dettaglio analizzando una situazione reale.
Se la coda ad un certo istante risulta vuota e arriva un pacchetto il servente comincia subito a smaltire questo carico in quanto scheduler Work-conserving.
Se nel frattempo arriva un altro pacchetto più piccolo, che nel sistema fluidico avrebbe un tempo di trasmissione minore, il servente continua a servire il primo pacchetto fino alla sua completa trasmissione, questo esce dal nodo prima dell’altro con una inversione del reale ordine di servizio. Lo scheduler per ovviare a questo problema sceglierà sempre i pacchetti che completerebbero per primi il servizio nel sistema GPS.
Questo è solo uno dei problemi che incontreremo durante l’implementazione del nostro algoritmo, nei paragrafi relativi all’implementazione in codice “C” dell’algoritmo parleremo più nei dettagli di questi inconvenienti.
1.5
Mappatura dei pesi
La scelta che abbiamo fatto è quella di scindere l’unica coda FIFO in quattro code con priorità assegnando ad ognuna un peso diverso in funzione del traffico che deve servire, in questo modo cerchiamo di ridurre le perdite e i ritardi nelle code con priorità più alta in modo che le connessioni real time, rispetto a trasmissioni di Background, vengano meno interessate da un
L’assegnazione delle priorità avviene attraverso una mappa che dal livello 3 porta a livello due il codice di priorità marcando il pacchetto con un peso scelto in funzione delle informazioni trasportate.
A livello IP il campo che si occupa di trasportare questa informazione è il TOS (Type Of Service) una porzione di 8 bit nell’header che viene marcata alla creazione del pacchetto negli end system e rimane tale per tutta la vita del pacchetto.
La tabella che ci permette di fare il passaggio dal TOS alla User Priority è la seguente :
CLASSE Peso BIT DECIMALE
Best Effort Background 3 00000000 00100000 0 32 Standard EX Effort 2 01000000 01100000 64 96 Streaming Media Interactive Media 1 10000000 10100000 128 160 Interactive Voice Reserved 0 11000000 11100000 192 224
In questo modo riusciamo a fare una mappatura dei pesi utilizzando una struttura già esistente e non dobbiamo appesantire il modello in modo inutile.
L’assegnazione del type of service avviene quindi in modo automatico e senza modificare la struttura preesistente limitando così il nostro lavoro ad una tabella statica di passaggio.
La prima colonna della tabella identifica le otto teoriche classi di servizio che sono state raggruppate per due dato che noi vogliamo dare vita a solo quattro classi di priorità che sono rappresentate da 0 a 3 nella seconda colonna.
La terza colonna è la rappresentazione in bit del campo TOS ovvero quello che effettivamente è presente nel pacchetto e nell’ultima colonna viene fornita la rappresentazione decimale, questo numero è stato usato in fase di implementazione per discriminare l’appartenenza del pacchetto ad una certa coda.