8.1 Sommes de contrôle de couche supérieure (Upper-Layer Checksums)
Tout protocole de transport ou autre protocole de couche supérieure qui inclut des adresses de l'en-tête IP dans son calcul de somme de contrôle DOIT être modifié pour fonctionner sur IPv6, afin d'inclure les adresses IPv6 sur 128 bits au lieu des adresses IPv4 sur 32 bits. En particulier, l'illustration suivante montre le « pseudo-header (pseudo-en-tête) » TCP et UDP pour IPv6 :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| |
+ Source Address +
| |
+ +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| |
+ Destination Address +
| |
+ +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Upper-Layer Packet Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| zero | Next Header |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
o Si le paquet IPv6 contient un Routing header, la Destination Address utilisée dans le pseudo-en-tête est celle de la destination finale. Au niveau du nœud émetteur, cette adresse se trouvera dans le dernier élément du Routing header ; au niveau du récepteur, elle se trouvera dans le champ Destination Address de l'en-tête IPv6.
o La valeur Next Header dans le pseudo-en-tête identifie le protocole de couche supérieure (par exemple, 6 pour TCP, 17 pour UDP). Elle sera différente de la valeur Next Header dans l'en-tête IPv6 si des en-têtes d'extension sont présents entre l'en-tête IPv6 et l'en-tête de couche supérieure.
o La Upper-Layer Packet Length dans le pseudo-en-tête est la longueur de l'en-tête de couche supérieure et des données (par exemple, en-tête TCP plus données TCP). Certains protocoles de couche supérieure portent leurs propres informations de longueur (par exemple, le champ Length dans l'en-tête UDP) ; pour ces protocoles, c'est cette longueur qui est utilisée dans le pseudo-en-tête. D'autres protocoles (tels que TCP) ne portent pas leurs propres informations de longueur, auquel cas la longueur utilisée dans le pseudo-en-tête est le Payload Length de l'en-tête IPv6 moins la longueur de tout en-tête d'extension présent entre l'en-tête IPv6 et l'en-tête de couche supérieure.
o Contrairement à IPv4, la somme de contrôle UDP n'est pas optionnelle lorsqu'un paquet UDP est émis par un nœud IPv6. C'est-à-dire que chaque fois qu'un paquet UDP est émis, un nœud IPv6 DOIT calculer la somme de contrôle UDP du paquet et du pseudo-en-tête, et si ce calcul produit un résultat de zéro, DOIT le remplacer par la valeur hexadécimale FFFF à placer dans l'en-tête UDP. Un récepteur IPv6 DOIT rejeter les paquets UDP contenant une somme de contrôle nulle, et DEVRAIT enregistrer cette erreur.
La version IPv6 d'ICMP [ICMPv6] inclut le pseudo-en-tête ci-dessus dans son calcul de somme de contrôle ; c'est un changement par rapport à la version IPv4 d'ICMP, qui n'inclut pas de pseudo-en-tête dans sa somme de contrôle. La raison de ce changement est de protéger ICMP contre une livraison erronée ou une corruption des champs de l'en-tête IPv6 dont il dépend, qui, contrairement à IPv4, ne sont pas couverts par une somme de contrôle de couche Internet. Le champ Next Header dans le pseudo-en-tête d'ICMP contient la valeur 58, qui identifie la version IPv6 d'ICMP.