Як вже зазначали інші, існує багато можливостей для пошкодження даних, коли будь-яка контрольна сума на транспортному шарі не може допомогти, наприклад, корупція, що відбувається вже до обчислення контрольної суми на стороні відправлення, MITM, що перехоплює і змінює потік (дані також як контрольні суми), корупція відбувається після перевірки контрольної суми на кінці прийому тощо.
Якщо ми ігноруємо всі ці інші можливості та зосередимося на специфіці самої контрольної суми TCP і що він насправді робить з точки зору перевірки цілісності даних, виявляється, що властивості цієї контрольної суми зовсім не є вичерпними з точки зору виявлення помилок. Спосіб вибору алгоритму контрольної суми відображає вимогу швидкості в поєднанні з періодом часу (кінець 1970-х років).
Таким чином розраховується контрольна сума TCP .
Контрольна сума: 16 біт
Поле контрольної суми є доповненням 16-бітової
доповнюють суму всіх 16 бітних слів у заголовку і тексті. Якщо
сегмент містить непарне число заголовків і текстових октетів
checkummed, останній октет доповнений праворуч з нулями
формують 16-бітове слово для цілей контрольної суми. Накладка не є
передається як частина сегмента. Під час обчислення контрольної суми,
поле контрольної суми замінюється нулями.
Це означає, що будь-яка корупція, яка врівноважується при підсумовуванні даних таким чином, не виявиться. Існує ряд категорій корупції для даних, які це дозволить, але лише як тривіальний приклад: зміна порядку 16-бітових слів завжди залишатиметься непоміченими.
In practice, it catches many typical errors but does not at all guarantee integrity.
It's also helped by how the L2 layer also does integrity checks (eg CRC32 of Ethernet frames), albeit only for the transmission on the local link, and many cases of corrupted data never even get passed to the TCP stack.
Перевірка даних, використовуючи сильний хеш, або бажано криптографічний підпис, знаходиться на всьому іншому рівні з точки зору забезпечення цілісності даних. Ці дві ледве навіть можна порівняти.