Chaque trame, chaque paquet, contient un champ de test d'erreurs. Si dans les transmissions simples on pouvait se contenter de quelques bits supplémentaires (bits de parités) afin de réaliser un système autocorrecteur, comme le code de Haming, la plupart des systèmes utilisent aujourd'hui un code de redondance cyclique (CRC). Des sommes de contrôle (cheksum) sont également utilisées, comme par exemple pour la vérification des adresses Ethernet. |
|||||||||||||||||||
Cheksum d'une adresse Ethernet (d'après un document Xerox Corporation) | Code
de redondance cyclique |
||||||||||||||||||
Une adresse Ethernet est connue sur 6 octets, Ad5 Ad4 Ad3 Ad2 Ad1 Ad0. Dans ce cas la somme de contrôle Ck est une valeur de 16 bits obtenue de la façon suivante : |
Chaque trame contient un champ de détection des erreurs, de 32 bits pour une trame Ethernet, obtenu par un calcul mathématique utilisant un polynôme de redondance cyclique. Le
principe revient à calculer le reste de la division du nombre binaire,
correspondant aux données envoyées, par un nombre binaire appelé
polynôme générateur ou CRC, connu de l'émetteur
et du destinataire. Le CRC le plus utilisé est le CRC du CCITT |
||||||||||||||||||
L'adresse
Ethernet est donc complétée par deux octets Cd1 et Cd0 tels
que Ck=Cd1.256 + Cd0 . Cette somme de contrôle peut être calculée en utilisant un glissement à gauche du complément arithmétique binaire, avant de faire la somme des trois paires d'octets, comme le montre le programme ci-dessous. Var Ad0,Ad1,Ad2,Ad3,Ad4,Ad5; |
|||||||||||||||||||
L'avantage
de procéder à une division est que celle-ci peut s'effectuer
au fur et à mesure des bits émis (ou reçus), avant
même de connaître la totalité des données à
émettre.
|
|||||||||||||||||||
Ck:=Ck*2; if Ck>=65536 then Ck:=Ck - 65535; Ck:=Ck + Octet[2*i]*256 + Octet[2*i + 1]; if Ck>=65536 then Ck:=Ck - 65535; |
|||||||||||||||||||
end; if Ck=65535 then Ck:=0; Cd1:=Ck div 256; Cd0:=Ck mod 256; |
|||||||||||||||||||