Calcul Ethernet CRC32 - Résultat logiciel vs algorithme

Je suis en train de calculer la Séquence de contrôle de Trame (FCS) d'un paquet Ethernet octet par octet. Le polynôme est 0x104C11DB7.
J'ai fait suivre le XOR-CHANGEMENT de l'algorithme vu ici http://en.wikipedia.org/wiki/Cyclic_redundancy_check ou ici http://www.woodmann.com/fravia/crctut1.htm

La responsabilité de l'information qui est censé avoir un CRC est d'un seul octet. Disons que c'est 0x03.

  1. étape: tapis de 32 bits vers la droite

    0x0300000000

  2. aligner les polynômes et les données sur le côté de main gauche avec leur premier bit qui n'est pas nul et xor entre eux

    0x300000000 xor 0x209823B6E = 0x109823b6e

  3. prendre reste aligner et xor nouveau

    0x109823b6e xor 0x104C11DB7 = 0x0d4326d9

Car il n'y a plus de bits à gauche le CRC32 de 0x03 devrait être 0x0d4326d9

Malheureusement, toutes les implémentations de logiciels dites-moi que je me trompe, mais qu'ai-je fait de mal ou que font-ils différemment?

Python me dit:

 "0x%08x" % binascii.crc32(chr(0x03))
 0x4b0bbe37

L'outil en ligne ici http://www.lammertbies.nl/comm/info/crc-calculation.html#intr obtient le même résultat.
Quelle est la différence entre ma main de calcul et de l'algorithme utilisé par le logiciel mentionné utilise?

Mise à JOUR:

S'avère qu'il y a une question similaire déjà sur stack overflow:

- Vous trouver une réponse ici Python CRC-32 malheurs

Bien que ce n'est pas très intuitive. Si vous voulez une description plus formelle sur la façon dont cela est fait pour des trames Ethernet, vous pouvez regarder le La Norme Ethernet 802.3 document Partie 3 - Chapitre 3.2.9 Séquence de contrôle de Trame Champ

Permet de continuer l'exemple ci-dessus:

  1. Inverser l'ordre des bits de votre message. Que représente la façon dont ils entreraient dans le récepteur, bit par bit.

    0x03 est donc 0xC0

  2. Compléter les 32 premiers bits de votre message. Avis nous pad le seul octet avec 32 bits de nouveau.

    0xC000000000 xor 0xFFFFFFFF = 0x3FFFFFFF00

  3. Compléter le Xor et changement de méthode à partir de ci-dessus. Après environ 6 étape, vous bénéficiez de:

    0x13822f2d

  4. Ci-dessus bits sequense est alors complétée.

    0x13822f2d xor 0xFFFFFFFF = 0xec7dd0d2

  5. Rappelez-vous que nous avons inversé l'ordre des bits pour obtenir la représentation sur le câble Ethernet à l'étape un. Maintenant, nous devons inverser cette étape et nous avons finalement répondre à notre quête.

    0x4b0bbe37

Celui qui est venu avec cette façon de faire devrait être ...

Un grand nombre de fois que vous voulez réellement savoir ce que le message reçu est correct. Afin de réaliser cela, vous prenez votre reçu un message dont le FCS et faire de même de l'étape 1 à 5 ci-dessus. Le résultat devrait être ce qu'ils appellent des résidus. Qui est une constante pour un polynôme donné. Dans ce cas, il est 0xC704DD7B.

Comme mcdowella mentionne que vous avez à jouer avec votre bits jusqu'à ce que vous obteniez la bonne, en fonction de l'Application que vous utilisez.

source d'informationauteur sebs

Leave a Reply

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *