Capitolo 5
434
--------------------------------------------------------- 32 Bit ------------------------
Version
IHL
P p
Identification Time to live
Total length
Type of service
Fragment offset Header checksum
Protocol Source address Destination address Opzioni (0 o più word)
Figura 5.53. L’intestazione di IPv4 (Internet Protocol).
sione digitale del parlato la velocità di trasmissione prevale sull’accuratezza, mentre nel trasferimento dei file la trasmissione senza errori è una qualità più importante della velocità. In origine, il campo di 6 bit conteneva (da sinistra a destra) un campo di 3 bit chiamato prec e d e tte (priorità) e tre segnalatori, D , T e R. Il campo precedence indicava la priorità da 0 (normale) a 7 (pacchetto di controllo della rete). I tre bit di segnalazione permettevano alfhost di indicare l’interesse nei confronti dell’insieme costituito da ritardo, capacità di trasporto, affidabilità. In teoria, questi campi permettevano ai router di scegliere, per esempio, tra un collegamento via satellite caratterizzato da un’elevata capacità di trasporto e da un lungo ritardo e una linea affittata caratterizzata da una bassa capacità di trasporto e un ritardo ridotto [NrR - è stato definito anche un ulteriore bit, C: se impostato a uno, il router dovrebbe scegliere il percorso di costo minimo per il pacchetto. I bit inutilizzati prima del campo Total lenght, perciò, non sono due ma uno solo]. In pratica i router correnti spesso ignorano del tutto il campo type o f Service. Alla fine, IETF ha gettato la spugna e ha cambiato un po’ il campo per favorire i servizi differenziati. Sei bit sono utilizzati per indicare la classe di servizio di appartenenza del pacchetto; come abbiamo già visto, queste classi includono quattro priorità di accodamento, tre probabilità di eliminazione e le classi storiche. Total lenght (lunghezza totale) tiene conto di tutto il contenuto del datagramma, intestazione e dati; la lunghezza massima è 65.535 byte. Oggi questo limite superiore è tollerabile, ma le reti gigabit del futuro potrebbero richiedere datagrammi più grandi. Il campo identification (identificazione) serve all’host di destinazione per determinare a quale datagramma appartiene il frammento appena arrivato. Tutti i frammenti di un datagramma contengono lo stesso valore identification. Subito dopo c’è un bit inutilizzato, e poi due campi lunghi un 1 bit. DF è l’acronimo di D o n ’t Fragment, ossia non frammentare; rappresenta un ordine che impone ai router di non dividere in frammenti il datagramma perché la destinazione non è in grado di rimettere insieme i pezzi. Per esempio, all’avvio di un computer, la ROM potrebbe chiedere di ricevere un’immagine di memoria trasmessa tramite un solo datagramma.
Lo strato network
435
Contrassegnando il datagramma con il bit DF, il trasmettitore sa che i dati arriveranno così come sono stati trasmessi, ossia in un unico pezzo, anche se questo significa imporre al datagramma di evitare una rete a pacchetti piccoli posta sul percorso migliore, per seguire invece un percorso non ottimale. Qualsiasi computer deve accettare frammenti con dimensione di 576 byte, ma può accettarne anche di più brevi. MF è l’acronimo di More Fragments, ossia più frammenti. Tutti i frammenti, tranne l’ultimo, hanno questo bit impostato a L E fondamentale sapere quando sono arrivati tutti i frammenti di un datagramma. Fragment offset (offset del frammento) indica la posizione del frammento nel datagramma corrente. Tutti i frammenti tranne l’ultimo in un datagramma devono essere multipli di 8 byte, che è la dimensione del frammento elementare. Poiché sono disponibili 13 bit, ci possono essere al massimo 8.192 frammenti per ogni datagramma, di conseguenza la lunghezza massima di un datagramma è pari a 65.536 byte, uno più del campo total lenght. Il campo fune to live (tempo di vita) è un contatore utilizzato per limitare la vita di un pacchetto. Si presume che il conteggio sia espresso in secondi, quindi la durata massima è di 255 sec. Il contatore dovrebbe essere decrementato a ogni salto, oppure se rimane per lungo tempo accodato in un router (in questo caso dovrebbe essere decrementato più volte). Nella realtà, però, il valore riflette solo il numero di salti. Quando raggiunge lo zero, il pacchetto è scartato e un pacchetto di avviso è inviato all’host sorgente. Questa funzionalità impedisce ai datagrammi di girare a vuoto per sempre, evento che potrebbe accadere in caso di danneggiamento delle tabelle di routing. Quando ha assemblato un datagramma completo, lo strato network ha bisogno di sapere che cosa farne. Il campo protocol (protocollo) indica quale processo di trasporto è in attesa di quei dati. TCP è una possibilità, ma ci sono anche UDP e altre soluzioni. La numerazione dei protocolli è valida globalmente in Internet. I numeri di protocollo e gli altri numeri assegnati sono stati elencati in passato nel documento RFC 1700, ma oggi sono contenuti in un database in linea che può essere scaricato dal sito w ww .iana.org. Il campo header checksum (checksum dell’intestazione) verifica solo l’intestazione. Questo checksum aiuta a rilevare gli errori generati da locazioni di memoria difettose nel router. L’algoritmo somma tutte le mezze parole di 16 bit appena arrivate, usando l’aritmetica in complemento a uno, e poi prende il complemento a uno del risultato. Per gli scopi di questo algoritmo, si suppone che header checksum sia zero all’arrivo. Questo algoritmo è più robusto di una normale somma. Si noti che header checksum deve essere ricalcolato a ogni salto, perché almeno un campo cambia sempre (il campo time to live), ma alcuni trucchi permettono di accelerare l’elaborazione. Source address (indirizzo sorgente) e destination address (indirizzo di destinazione) indicano il numero di rete e il numero di host; gli indirizzi Internet sono esaminati nel prossimo paragrafo. Il campo options (opzioni) era stato pensato come via di fuga per dare alle versioni successive del protocollo la possibilità d’includere informazioni non presenti nel progetto originale, agli sperimentatori di collaudare nuove idee e ai progettisti di evitare di assegnare bit di intestazione alle informazioni usate più di rado. Le opzioni sono di lunghezza variabile. Ognuna inizia con un codice di 1 byte che la identifica; alcune sono seguite da un campo option lenght (lunghezza di opzione ) di 1 byte che precede uno o più byte di dati. Il campo options è riempito con multipli di quattro byte. In origine erano definite cinque opzioni, elencate nella Figura 5.54; successivamente ne sono state aggiunte delle nuove.