Como a soma de verificação TCP / UDP está funcionando?

2

Eu usei o soquete bruto para criar alguns pacotes UDP e depois enviá-los para um servidor UDP

Eu noto que quando eu coloco um número de checksum errado no UDP o servidor UDP não aceita, mas se eu colocar todo 0 na soma de verificação, o servidor UDP aceita?

Por quê?

Além disso, noto um fenômeno: descarregamento da soma de verificação Eu verifiquei minha máquina:

[root@kit temp]# ethtool --show-offload  eth0
Offload parameters for eth0:
rx-checksumming: on
tx-checksumming: on
scatter-gather: on
tcp-segmentation-offload: off
udp-fragmentation-offload: off
generic-segmentation-offload: on
generic-receive-offload: on
large-receive-offload: off
rx-vlan-offload: on
tx-vlan-offload: on
ntuple-filters: off
receive-hashing: on

Parece que há descarga de soma de verificação na minha máquina. Se eu definir aleatoriamente o valor da soma de verificação do TCP, a NIC poderá modificá-lo para um valor correto se o descarregamento da soma de verificação estiver ativado?

Finalmente, os pacotes podem ser modificados quando estão na transmissão por exemplo, o TTL diminuirá em número de saltos O NAT também pode modificar os endereços IP de origem, então a soma de verificação será obsoleta Nestes casos, como funciona o checksum? O roteador irá modificar a soma de verificação de acordo? Ou a máquina de destino pode detectá-los inteligentemente e calcular a soma de verificação de acordo?

    
por user138126 18.03.2013 / 23:48

1 resposta

3

A soma de verificação do UDP é opcional para o IPv4. Definir a soma de verificação como 0 indica que ela não é usada. Veja o artigo da Wikipedia para detalhes.

O cálculo da soma de verificação TCP, UDP e IP pode ser transferido para a NIC. A NIC irá calcular a soma de verificação no hardware. Isso é muito mais rápido do que fazê-lo no software. Mais uma vez, a Wikipédia sabe tudo .

A soma de verificação é recalculada pelo roteador depois de decrementar o TTL ou alterar o pacote (para todos os protocolos que atualizam o pacote). Isso deve ser feito no roteador. A máquina de destino não pôde usar um pacote com uma soma de verificação inválida e, de alguma forma, determinou que estava correto quando começou na origem. O destino só pode rejeitar pacotes com uma soma de verificação inválida.

    
por 19.03.2013 / 00:18