Comme cela a été noté par d'autres, il existe de nombreuses possibilités de corruption de données où toute somme de contrôle au niveau de la couche de transport ne peut pas aider, comme une corruption qui se produit déjà avant que la somme de contrôle soit calculée du côté de l'envoi, un MITM interceptant et modifiant le flux (données également en tant que sommes de contrôle), la corruption se produit après avoir validé la somme de contrôle à l'extrémité de réception, etc.
Si nous ignorons toutes ces autres possibilités et nous concentrons sur les spécificités de la somme de contrôle TCP elle-même et sur ce qu'elle fait réellement en termes de validation de l'intégrité des données, il s'avère que les propriétés de cette somme de contrôle ne sont pas du tout complètes en termes de détection d'erreurs. La façon dont cet algorithme de somme de contrôle a été choisi reflète plutôt l'exigence de vitesse en combinaison avec la période de temps (fin des années 1970).
Voici comment la somme de contrôle TCP est calculée:
Somme de contrôle: 16 bits
Le champ de somme de contrôle est le complément à un sur 16 bits de la somme du complément à un de tous les mots de 16 bits dans l'en-tête et le texte. Si un segment contient un nombre impair d'octets d'en-tête et de texte à additionner, le dernier octet est complété à droite par des zéros pour former un mot de 16 bits à des fins de somme de contrôle. Le pad n'est pas transmis dans le cadre du segment. Lors du calcul de la somme de contrôle, le champ de somme de contrôle lui-même est remplacé par des zéros.
Cela signifie que toute corruption qui s'équilibre lors de la sommation des données de cette manière ne sera pas détectée. Il y a un certain nombre de catégories de corruption dans les données que cela permettra mais juste comme un exemple trivial: changer l'ordre des mots de 16 bits restera toujours non détecté.
En pratique, il détecte de nombreuses erreurs typiques mais ne garantit pas du tout l' intégrité. Cela est également aidé par la façon dont la couche L2 effectue également des vérifications d'intégrité (par exemple, CRC32 des trames Ethernet), mais uniquement pour la transmission sur la liaison locale, et de nombreux cas de données corrompues ne sont même jamais transmis à la pile TCP.
La validation des données à l'aide d'un hachage fort, ou de préférence d'une signature cryptographique, est à un tout autre niveau en termes de garantie de l'intégrité des données. Les deux sont à peine comparables.