Algumas placas de interface de rede (NIC) "ajudarão" você alterando a soma de verificação para você. É chamado de "Checksum Offloading". Uma pesquisa nesse termo ajudará.
Eu quero escrever um programa para gerar a soma de verificação do udp.
para validar o meu programa, eu preciso de alguns dados reais. Eu envio um pacote udp de uma máquina para outra, o pacote pode ser recebido corretamente pelo servidor udp. Eu capturei o pacote usando o tcp dump nas duas máquinas
da máquina cliente udp, os bytes do cabeçalho do pacote udp e pseudo IPV4 são (formato HEX):
pseudo header
src dst ip: 8a60c948 8a60c96d
proto_num len: 0011 0016
UDP header: 83d87d000016 a79e
data: 49276d206e6f 742068657265210a
na máquina do servidor udp (receptor):
pseudo header
src dst ip: 8a60c948 8a60c96d
proto_num and len: 0011 0016
UDP header: 83d87d000016 c2c5
data: 49276d206e6f 742068657265210a
a soma de verificação deve ser calculada sobre
8a60c9488a60c96d0011001683d87d000016000049276d206e6f742068657265210a
onde o campo de soma de verificação é substituído por 0x0000
mas vemos que a soma de verificação é alterada de 0xa79e no cliente para 0xc2c5 no lado do servidor. por que essa mudança acontece? e qual é a soma de verificação correta do cabeçalho do udp? obrigado!
Tente usar "tcpdump -K" ou similar por sua página man do tcpdump:
-K Don't attempt to verify IP, TCP, or UDP checksums. This is use- ful for interfaces that perform some or all of those checksum calculation in hardware; otherwise, all outgoing TCP checksums will be flagged as bad.
Eu pego udp check sum na máquina emissora e receptora com o netfilter em layer3. No remetente secundário, a soma de verificação do udp não inclui dados de carga útil. No receptor lateral, a soma de verificação do udp inclui dados de carga útil. Esta é a razão pela qual a inconsistência da soma de verificação do udp.
Tags networking udp