Como já foi observado por outros, existem muitas possibilidades de corrupção de dados em que qualquer soma de verificação na camada de transporte não pode ajudar, como corrupção ocorrendo antes do cálculo da soma de verificação no lado do envio, um MITM interceptando e modificando o fluxo (dados também como somas de verificação), corrupção ocorrendo após a validação da soma de verificação na extremidade receptora etc.
Se desconsiderarmos todas essas outras possibilidades e focarmos nas especificidades da própria soma de verificação TCP e no que ela realmente faz em termos de validação da integridade dos dados, verifica-se que as propriedades dessa soma de verificação não são de todo abrangentes em termos de detecção de erros. A maneira como esse algoritmo de soma de verificação foi escolhido reflete a necessidade de velocidade em combinação com o período (final da década de 1970).
É assim que a soma de verificação TCP é calculada:
Soma de verificação: 16 bits
O campo de soma de verificação é o complemento de 16 bits da soma do complemento de todas as palavras de 16 bits no cabeçalho e no texto. Se um segmento contiver um número ímpar de octetos de cabeçalho e texto a serem somados, o último octeto será preenchido à direita com zeros para formar uma palavra de 16 bits para fins de soma de verificação. O bloco não é transmitido como parte do segmento. Ao calcular a soma de verificação, o próprio campo de soma de verificação é substituído por zeros.
Isso significa que qualquer corrupção que seja equilibrada ao somar os dados dessa maneira não será detectada. Há uma série de categorias de corrupção nos dados que isso permitirá, mas apenas como um exemplo trivial: alterar a ordem das palavras de 16 bits sempre passará despercebido.
Na prática, ele captura muitos erros típicos, mas não garante a integridade. Também é ajudado pelo modo como a camada L2 também faz verificações de integridade (por exemplo, CRC32 de quadros Ethernet), embora apenas para a transmissão no link local, e muitos casos de dados corrompidos nunca são passados para a pilha TCP.
A validação dos dados usando um hash forte, ou preferencialmente uma assinatura criptográfica, é em um nível totalmente diferente em termos de garantia da integridade dos dados. Os dois mal podem ser comparados.