Contrôle d’erreur : CheckSum
La communication entre les appareils dans un réseau est un processus complexe et sujet à des erreurs. Dans le chapitre précédent sur la couche liaison de données, nous avons vu comment le CRC aide à garantir que les données échangées entre deux cartes réseau directement connectées le soient sans erreurs. Toutefois, malgré l’efficacité du CRC, il existe des cas rares où certaines anomalies peuvent passer inaperçues.
À 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.
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 une valeur calculée à partir de toutes les données du segment. Cette valeur, produite par l’émetteur, est ajoutée à l’en-tête du segment et vérifiée par le récepteur pour confirmer que les données reçues sont intactes. Pour calculer le checksum, on divise les données du segment en blocs de même taille. Chaque bloc est converti en binaire, puis on fait la somme de ces valeurs binaires. Si cette somme dépasse la taille d’un bloc, l’excédent est ajouté à la somme. Le résultat final est ensuite modifié bit par bit pour obtenir la valeur finale du checksum, qui est placée dans l’en-tête du segment avant son envoi.
Lorsque le segment arrive, le récepteur fait le processus en sens inverse pour recalculer le checksum avec les données reçues, y compris la valeur du checksum. Si le segment est correct, la valeur recalculée est une suite de bits tous à 1. Si elle diffère, cela signifie que les données ont été modifiées en cours de transmission, et le segment est refusé.
2 Comments
“[…] et le segment est soit rejeté.” soit ?
corrigé, thanks 🙂