Checksum : pourquoi on utilise le complément et pas la somme ? - Divers - Programmation
Marsh Posté le 27-06-2008 à 11:09:57
Pour augmenter la fiabilité du calcul, tout simplement.
Le but, c'est que l'altération s'il y en a une dans le message, affecte un maximum de bits dans le checksum.
Avec une simple addition, le fichier contenant tes word A et B aura exactement la même somme de contrôle que le fichier contenant les word B et A. C'est donc loin d'être un algorithme suffisant.
Marsh Posté le 27-06-2008 à 14:28:55
Ouh, je sens qu'on se rapproche du diner là
T'aurais pas un petit exemple concret ? Je sens que j'vois que la route commence à être tracée mais c'est encore un peu flou.
Marsh Posté le 27-06-2008 à 16:07:10
Nope, en fait ma réponse était totalement à côté de la plaque (ca m'apprendra à ne pas lire correctement un post).
Le checksum utilisé dans le cas des paquets réseau a toujours cette faiblesse vis à vis des mots inversés.
Je dirais plutôt que cela a été fait pour des raisons d'architecture (de la façon dont c'est implémenté, le calcul du checksum est correct que ce soit sur une plate forme en little endian ou en big endian).
Marsh Posté le 28-06-2008 à 12:06:35
Ah merde, ça m'éclate moins du coup là
J'vois pas où est le problème avec l'architecture. Au bout du compte, à la fin, soit tu compares avec une série de 1111111, soit tu compares avec la somme
La seule raison que j'pourrais trouver, c'est que dans le cas du 111111, tu sais à quoi tu t'attends, dans le cas de la somme tu sais pas. M'enfin, ça change pas grand chose au final, puisque tout est additionné. Nan, j'vois vraiment pas la raison
Marsh Posté le 30-06-2008 à 10:00:52
Je ne suis pas sur mais :
En fait si tu ne prends pas le complément à 1 tu risques d'avoir des problèmes de retenues sur certaines architectures (little endian ou big endian).
Marsh Posté le 27-06-2008 à 09:31:16
En étudiant le fonctionnent des réseaux, y a une question qui me turlupine et dont j'arrive pas à trouver une réponse qui me convient : pourquoi est-ce que dans le cas des checksums on utilise le complément pour le foutre dans le header, et pas tout simplement la somme ?
Mon raisonnement est peut-être foireux, et c'est surement pour ça que je comprends pas, mais voilà ce que j'comprends :
On a 2 words de 16 bits par exemple. On les additionne, on obtient un résultat. On prend le complément de ce résultat et on le fout dans le header. On envoie les données.
Du coté receveur, on récupère les 2 words de 16 bits et le complément, on les additionne. Si on obtient que des 1, aucune erreur détectée, sinon erreur.
Donc, d'après ça, j'vois pas l'utilité du complément. On peut très bien :
Faire la somme des 2 words, et la foutre dans le header. Envoyer les données. Le receveur récupère les 2 words et la somme. Il additionne les 2 words, et compare le résultat obtenu avec la somme dans le header. Si c'est pareil, aucune erreur détectée, sinon erreur.
Ça devrait marcher non ?
Si quelqu'un arrive à me trouver une réponse convenable, j'lui paye un super diner s'il vient dans ma ville, promis
Message édité par godbout le 27-06-2008 à 09:34:43