Passa al contenuto principale

8.1 Upper-Layer Checksums (Checksum di livello superiore)

Qualsiasi protocollo di trasporto o altro protocollo di livello superiore che includa nel calcolo del proprio checksum gli indirizzi provenienti dall'intestazione IP deve essere modificato per l'uso su IPv6, in modo da includere gli indirizzi IPv6 a 128 bit invece degli indirizzi IPv4 a 32 bit. In particolare, la figura seguente mostra la "pseudo-header (pseudo-intestazione)" TCP e UDP per IPv6:

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| |
+ Source Address +
| |
+ +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| |
+ Destination Address +
| |
+ +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Upper-Layer Packet Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| zero | Next Header |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

o Se il pacchetto IPv6 contiene una Routing header, il Destination Address usato nella pseudo-intestazione è l'indirizzo della destinazione finale. Nel nodo originante, tale indirizzo si trova nell'ultimo elemento della Routing header; nel ricevitore, si trova nel campo Destination Address dell'intestazione IPv6.

o Il valore Next Header nella pseudo-intestazione identifica il protocollo di livello superiore, ad esempio 6 per TCP e 17 per UDP. Se tra l'intestazione IPv6 e l'intestazione di livello superiore sono presenti intestazioni di estensione, questo valore sarà diverso dal valore Next Header nell'intestazione IPv6.

o Upper-Layer Packet Length nella pseudo-intestazione è la lunghezza dell'intestazione e dei dati di livello superiore, ad esempio l'intestazione TCP più i dati TCP. Alcuni protocolli di livello superiore trasportano le proprie informazioni di lunghezza, ad esempio il campo Length nell'intestazione UDP; per tali protocolli, la lunghezza usata nella pseudo-intestazione è tale lunghezza. Altri protocolli, come TCP, non trasportano proprie informazioni di lunghezza; in questi casi, la lunghezza usata nella pseudo-intestazione è il Payload Length dell'intestazione IPv6 meno la lunghezza di qualsiasi intestazione di estensione presente tra l'intestazione IPv6 e l'intestazione di livello superiore.

o A differenza di IPv4, quando un pacchetto UDP è originato da un nodo IPv6, il checksum UDP non è opzionale. In altre parole, ogni volta che origina un pacchetto UDP, un nodo IPv6 deve calcolare il checksum UDP sul pacchetto e sulla pseudo-intestazione; se tale calcolo produce il risultato zero, questo deve essere sostituito dal valore esadecimale FFFF da inserire nell'intestazione UDP. I ricevitori IPv6 devono scartare i pacchetti UDP contenenti un checksum pari a zero e dovrebbero registrare l'errore.

La versione IPv6 di ICMP [ICMPv6] include nel calcolo del proprio checksum la pseudo-intestazione descritta sopra. Si tratta di un cambiamento rispetto alla versione IPv4 di ICMP, che non include una pseudo-intestazione nel proprio checksum. La ragione del cambiamento è proteggere ICMP da errori di consegna o corruzione dei campi dell'intestazione IPv6 da cui dipende; diversamente da IPv4, tali campi non sono coperti da un checksum di livello Internet. Il campo Next Header nella pseudo-intestazione di ICMP contiene il valore 58, che identifica la versione IPv6 di ICMP.