2.4 Il protocollo IPv6
2.4.2 Il protocollo µIPv6
Lo stack IP nei classici PC è parte integrante del sistema operativo. Vista la considerevole quantità di memoria di cui ha bisogno un tradizionale stack IP per funzionare, verrebbe da dire che nel contesto degli Smart-Objects non potrebbe essere utilizzato, data la scarsità di memoria di cui dispongono questi oggetti, ma in realtà esistono delle implementazioni leggere dello stack IP come µIP che andremo a vedere nel dettaglio e che è alla base del presente lavoro. µIP è quindi un’implementazione del tradizionale protocollo IP, realizzata per gli Smart-Objects o per dispositivi emebedded. La prima versione di µIP è nata nel 2001 e rilasciata con licenza Open. µIP implementa i tradizionali protocolli della suite IP di livello rete e trasporto come IP, ICMP, UDP e TCP; µP è il primo stack per dispositivi emebedded che implementa anche il protocollo TCP. TCP è implementato in uIP in modo piuttosto semplificato, ma è perfettamente compatibile con lo standard. µIP è nato per la versione quattro del protocollo IP, ma nel 2008 CISCO ha realizzato una versione perfettamente compatibile con le specifiche della versione IPv6. Possiamo dire che µIP fa tre cose fondamentali ed ha il seguente modo di operare (Fig. 2.4):
• appena un pacchetto viene ricevuto dal dispositivo di comunicazione vie- ne chiamata in causa la funzionalità “input process” che si occupa di analizzare l’header del pacchetto IP. Tale funzione verifica il contenuto del pacchetto e lo inoltra ai livelli superiori;
• la funzionalità di “output process” viene richiamata da µIP quando l’ap- plicazione ha prodotto dati da inviare. È µIP stesso che stabilisce quando dei dati in uscita possono essere passati al dispositivo di comunicazio- ne. Prima di passare questi dati prodotti dall’applicazione la funzione di output aggiunge gli opportuni header al pacchetto;
• µIP ha una funzionalità che viene ripetuta periodicamente (periodic pro- cess) che ha lo scopo di verificare se qualche applicazione deve ritrasmet- tere dei dati o se qualche connessione deve essere chiusa;
• inoltro e routing dei pacchetti sono gestiti a parte.
La funzione input process (Fig. 2.5) inizia ad analizzare il pacchetto rice- vuto a partire dall’header e ne va a verificare i diversi campi. Come prima cosa controlla che quello che ha ricevuto sia un pacchetto IP, verifica poi la versione del pacchetto e quindi comprende se è una versione che tale stack è in grado di gestire. Dopo va a controllare che la lunghezza riportata nel campo payload lenght dell’header coincida con la lunghezza del pacchetto presente nel buffer, se così non fosse il pacchetto verrebbe scartato. La ricostruzione di un pacchetto frammentato avviene in ordine al processing dell’extension-header.
2.4 Il protocollo IPv6
Figura 2.4: Principio di funzionamento dello stack µIP e flusso dei pacchetti in entrata e in uscita
Figura 2.5: Diagramma di flusso dell’input process di µIP
A questo punto l’input process si porta ad analizzare il contenuto del campo Destination-Address dell’header del pacchetto IP, come prima cosa si preoccu- pa di verificare che l’indirizzo contenuto in tale campo sia un indirizzo IP valido altrimenti scarta il pacchetto, appurata la validità dell’indirizzo va a verificare che questo coincida con almeno un indirizzo locale. Se non si ha nessun mat- ching con gli indirizzi locali il pacchetto viene passato all’unità di forwarding che si preoccuperà di inoltrare il pacchetto al vicino di next-hop o al diretto interessato.
Riguardo l’output process possiamo rilevare come tale processo venga avviato dallo stack stesso, vale a dire che un processo di livello superiore per inviare i dati deve attendere di essere richiamato da µIP. Quando l’applicazione è
richiamata da µIP può decidere se inviare i dati o no, nel caso in cui i dati siano inviati µIP si preoccupa di aggiungere gli opportuni header e quindi di far arrivare il pacchetto al driver del dispositivo di comunicazione che si occupa di inviarlo nel mezzo trasmissivo. Un protocollo di livello applicativo come TCP invia i dati solo quando è invocato da µIP, mentre un protocollo come UDP può inviare i dati quando vuole senza aspettare che venga richiamato da µIP.
µIP svolge tre compiti fondamentali e ognuno di questi è svolto da un proces- so dedicato, quello che ci rimane da descrivere è il periodic process. Il periodic process è una sorta di controllore che a istanti temporali specifici svolge delle particolari funzioni. Il periodic process può essere richiamato una o due volte al secondo, dipende dalla particolare implementazione di µIP, e si occupa di veri- ficare che non vi siano connessioni in time-out, controlla il buffer dei pacchetti frammentati che sono in attesa di essere ricostruiti. Se un pacchetto rimane nel buffer dei pacchetti frammentanti per più di trenta secondi è scartato perché vuol dire che qualche frammento è andato perso. Tale processo periodico si preoccupa di controllare, se vi sono, le connessioni TCP attive e per ognuna di esse verifica se vi è una richiesta di ritrasmissione pendente e nel caso in cui vi sia richiama l’applicazione per autorizzarne la ritrasmissione dei dati. Per risparmiare memoria µIP sceglie di far ricreare il dato da rinviare direttamente all’applicazione interessata piuttosto che memorizzarlo in un buffer. Il processo periodico controlla anche le connessioni in time-out, cioè quelle connessioni che hanno inviato una serie di pacchetti e non hanno mai ricevuto una risposta, tali connessioni vengono chiuse.
µIP si occupa anche di realizzare il packet-forwarding quando l’indirizzo IP contenuto nel campo Destination-Address dell’header non matcha con nessuno degli indirizzi locali del nodo su cui è in esecuzione µIP. Il meccanismo di for- warding ha luogo se µIP è nella modalità router. Il meccanismo di forwarding chiede al modulo di routing di confrontare l’indirizzo di destinazione del pac- chetto con gli indirizzi contenuti nelle tabelle di routing, il modulo di routing restituisce al modulo di forwarding l’indirizzo del next-hop neighbor cui deve essere inoltrato il pacchetto. Altra caratteristica interessante di µIP è il modo in cui gestisce la memoria, contrariamente ad un normale stack IP in µIP la gestione della memoria è relativamente semplice e inoltre viene utilizzato un unico buffer per i dati in entrata e in uscita allo scopo di risparmiare spazio. Se un nuovo pacchetto arriva mentre µIP ne sta processando uno, quello più recente viene mantenuto nel buffer del dispositivo di comunicazione. La lun- ghezza del buffer µIP è tale da consentire la memorizzazione di un pacchetto di massima dimensione.
Un’ultima osservazione va fatta riguardo alle API (Application Program In- terface) fornite da µIP. Le API definiscono il modo in cui un programma ap- plicativo interagisce con lo stack IP, nel caso di µIP si hanno delle API event-
2.5 Routing Protocol for Low Power and Lossy Network