O campo Checksum (Soma de Verificação) é um campo de 16 bits localizado ao final do cabeçalho UDP. Sua função é proporcionar verificação de integridade dos dados, permitindo que o receptor detecte se o datagrama sofreu alterações (erros de bits) durante o trânsito pela rede.
Embora o UDP seja um protocolo “melhor esforço” e não confiável, ele oferece este mecanismo básico de segurança para garantir que, se um dado for entregue à aplicação, ele não esteja corrompido. Se o checksum falhar, o pacote é silenciosamente descartado.
1. O Algoritmo: Soma em Complemento de Um
O checksum do UDP utiliza o mesmo algoritmo matemático de soma em complemento de um usado no cabeçalho IP, mas com uma abrangência maior.
-
Processo de Cálculo (Emissor):
- O datagrama UDP é considerado como uma sequência de inteiros de 16 bits.
- Se o número de bytes for ímpar, um byte de preenchimento (padding) com valor zero é adicionado apenas para fins de cálculo (não é transmitido).
- Todos os inteiros de 16 bits são somados.
- Se ocorrer um “carry” (estouro), ele é adicionado de volta ao resultado (carry-around).
- O complemento de um do resultado (inverter todos os bits: 0 vira 1, 1 vira 0) é colocado no campo
Checksum.
-
Processo de Verificação (Receptor):
- O receptor soma todos os inteiros de 16 bits do datagrama recebido, incluindo o campo Checksum recebido.
- Se não houver erros, o resultado será todos os bits ligados (
0xFFFFem hexadecimal). - Se o resultado for diferente de
0xFFFF, o pacote está corrompido e é descartado.
2. O Pseudo-Cabeçalho (Pseudo-Header)
A característica mais distinta e importante do Checksum do UDP é a inclusão de um Pseudo-Cabeçalho no cálculo. O UDP é encapsulado no IP, mas para calcular o checksum, ele “pede emprestado” informações do cabeçalho IP. Este pseudo-cabeçalho não é transmitido fisicamente na rede; ele é construído apenas momentaneamente na memória para o cálculo.
O Pseudo-Cabeçalho consiste de:
1. Endereço IP de Origem (do pacote IP).
2. Endereço IP de Destino (do pacote IP).
3. Zeros (8 bits) para preenchimento.
4. Protocolo (8 bits): O valor é 17 (decimal), que é o número de protocolo atribuído ao UDP no cabeçalho IP.
5. Comprimento do UDP (16 bits): O valor do campo Length do cabeçalho UDP.
Por que o Pseudo-Cabeçalho é importante?
Ele garante que o datagrama UDP foi entregue ao host correto. Se houver um erro de roteamento e o pacote IP for entregue ao computador errado (mesmo que a porta UDP coincida), os endereços IP no pseudo-cabeçalho não corresponderão aos endereços da interface de rede do receptor. O cálculo do checksum falhará e o pacote será descartado. Ele protege contra a entrega a destinatários incorretos.
3. Opcionalidade no IPv4 vs. Obrigatoriedade no IPv6
O tratamento do Checksum varia entre as versões do protocolo IP:
- IPv4 (Opcional): No IPv4, o uso do checksum UDP é opcional. Se o campo for preenchido com todos os bits em zero (
0x0000), isso significa que o checksum foi desabilitado pelo emissor. Nesse caso, o receptor não deve verificar o checksum.- Nota: Embora opcional, a maioria das implementações modernas de sistemas operacionais habilita o checksum por padrão para evitar a entrega de dados corrompidos às aplicações.
- IPv6 (Obrigatório): No IPv6, o checksum UDP é obrigatório. O cabeçalho IPv6 removeu o próprio checksum para acelerar o processamento nos roteadores. Com isso, o checksum do UDP se tornou a única linha de defesa contra erros de transmissão na Camada de Transporte. Em IPv6, o valor
0x0000é inválido.
4. Comportamento em Caso de Erro
Se o receptor calcular o checksum e descobrir uma discrepância:
- Descarte: O datagrama UDP é silenciosamente descartado. Os dados não são passados para a aplicação.
- Sem Retransmissão: O protocolo UDP não possui mecanismo para pedir uma retransmissão. O emissor não é notificado do erro.
- Implicação: A aplicação nunca verá dados corrompidos, mas pode perceber uma falha na comunicação (timeout) se esperava uma resposta e ela nunca chegou.
5. Proteção de Dados
O checksum cobre:
* O Cabeçalho UDP (Portas, Length).
* O Payload (Dados da aplicação).
* O Pseudo-Cabeçalho (Metadados do IP).
Isso garante a integridade end-to-end dos dados desde que saíram da aplicação origem até chegarem à aplicação destino, protegendo contra bits invertidos causados por ruído elétrico, falhas de hardware ou bugs de firmware em roteadores.