Contrôle d’erreur : CheckSum
La communication entre les dispositifs au sein d’un réseau est un processus complexe et susceptible aux erreurs. Dans le chapitre précédent dédié à la couche liaison de données, nous avons étudié comment le CRC joue un rôle crucial pour s’assurer que les données transmises entre deux cartes réseau directement connectées le soient sans erreurs. Cependant, malgré la robustesse du CRC, il reste des situations rares où des anomalies peuvent échapper à sa détection.
À la couche réseau, une autre complexité intervient : la nécessité de découper un paquet en plusieurs fragments, en fonction des contraintes de la taille de paquet maximale supportée par les réseaux intermédiaires. Cela pose un challenge : comment garantir que, suite à cette fragmentation, le message global demeure intact et cohérent ?
C’est précisément là que le mécanisme de checksum de la couche transport entre en jeu. Contrairement au CRC qui se concentre principalement sur des fragments individuels de données, le checksum a pour mission de valider l’intégrité de l’ensemble du message. Quand un paquet est fragmenté, chaque fragment conserve une partie du checksum original. Au moment du rassemblage, ces parties sont réunies et comparées au checksum global pour s’assurer que le message complet est bien celui qui a été initialement envoyé, garantissant ainsi une cohérence d’ensemble et offrant une couche supplémentaire de vérification contre les erreurs de transmission.
Il est également important de noter que la technique utilisée pour calculer le checksum est volontairement différente de celle du CRC. Cette diversité permet de couvrir différents types d’erreurs. En combinant les forces du CRC et du checksum, on maximise ainsi les chances de détecter et de rectifier toute anomalie qui pourrait surgir durant le processus de transmission.

Le checksum est, comme le nom l’indique, une somme de contrôle calculée à partir de l’ensemble des données du segment. Cette valeur est générée par l’émetteur, incluse dans l’en-tête du segment, puis vérifiée par le récepteur afin de s’assurer de l’intégrité des données transmises. Pour calculer le checksum, on commence par diviser les données du segment en blocs de taille égale. Chaque bloc est ensuite converti en nombre binaire, et une somme en binaire est réalisée. Si la somme dépasse la taille du bloc, le débordement est ajouté à la somme. Le résultat final est ensuite inversé bit par bit pour créer la valeur du checksum. Cette valeur du checksum est insérée dans l’en-tête du segment avant l’envoi.
À la réception, le processus est inversé. Le récepteur calcule le checksum sur les données reçues (en incluant la valeur du checksum reçue) de la même manière que l’émetteur. Si le message est arrivé sans erreur, la valeur du checksum calculée par le récepteur sera une séquence de bits tous à 1. Si la valeur du checksum est différente, cela indique que les données ont été altérées pendant la transmission, et le segment est soit rejeté.
Il est important de noter que le checksum de la couche transport protège non seulement les données de l’utilisateur, mais également certains champs de l’en-tête du segment. Ceci est crucial, car une altération de l’en-tête pourrait mener à des erreurs dans le routage ou la livraison du segment. Le checksum joue donc un rôle vital dans la détection des erreurs sur l’ensemble du segment, contribuant ainsi à la fiabilité de la communication dans les réseaux informatiques.