Ir para conteúdo

Um provável problema com o TCPDUMP


fredericopissarra

Posts Recomendados

Algumas placas de rede permitem que certas operações corriqueiras em hardware. É o caso do cálculo do checksum dos pacotes IP. O termo técnico para isso chama-se offloading. A ideia é a de que o que está "fora da carga" é o tempo de processamento, que é deslocado do driver/kernel para o hardware. Isso é particularmente importante nesses tempos de redes Gigabit e de fibra-ótica....

O problema ao qual me refiro aqui é no relatório do utilitário TCPDUMP (e seu irmão gráfico Wireshark) onde, com determinadas "placas de rede" aparece o aviso de que o checksum não é válido. Isso provavelmente acontece porque o TCPDUMP tenta recalcular o checksum que foi já calculado por hardware. Essa probabilidade aumenta quando  realizamos o experimento de capturar o mesmo pacote enviado, por um lado, e recebido por outro, em máquinas diferentes... Esse experimento foi conduzido com conhecidos meus, especialistas em redes, que demonstrou que o pacote recebido tinha, de fato, checksum válido, mas o TCPDUMP reporta a invalidade apenas no pacote enviado.

De fato, a manpage do TCPDUMP nos avisa disso via opção --dont-verify-checksum. Para essa opção temos o seguinte texto:

Citar

Don't  attempt  to  verify  IP,  TCP, or UDP checksums.  This is useful for interfaces that perform some or all of those checksum calculation in hardware; otherwise, all outgoing TCP checksums will be flagged as bad.

Para determinar se sua "placa" usa o recurso de offloading, podemos usar o utilitário ethtool. Eis os dados de minha interface de rede:

$  ethtool -k enp3s0
Features for enp3s0:
rx-checksumming: on
tx-checksumming: off
	tx-checksum-ipv4: off
	tx-checksum-ip-generic: off [fixed]
	tx-checksum-ipv6: off
	tx-checksum-fcoe-crc: off [fixed]
	tx-checksum-sctp: off [fixed]
scatter-gather: off
	tx-scatter-gather: off
	tx-scatter-gather-fraglist: off [fixed]
tcp-segmentation-offload: off
	tx-tcp-segmentation: off
	tx-tcp-ecn-segmentation: off [fixed]
	tx-tcp-mangleid-segmentation: off
	tx-tcp6-segmentation: off
udp-fragmentation-offload: off
generic-segmentation-offload: off [requested on]
generic-receive-offload: on
large-receive-offload: off [fixed]
rx-vlan-offload: on
tx-vlan-offload: on
ntuple-filters: off [fixed]
receive-hashing: off [fixed]
highdma: on [fixed]
rx-vlan-filter: off [fixed]
vlan-challenged: off [fixed]
tx-lockless: off [fixed]
netns-local: off [fixed]
tx-gso-robust: off [fixed]
tx-fcoe-segmentation: off [fixed]
tx-gre-segmentation: off [fixed]
tx-gre-csum-segmentation: off [fixed]
tx-ipxip4-segmentation: off [fixed]
tx-ipxip6-segmentation: off [fixed]
tx-udp_tnl-segmentation: off [fixed]
tx-udp_tnl-csum-segmentation: off [fixed]
tx-gso-partial: off [fixed]
tx-sctp-segmentation: off [fixed]
tx-esp-segmentation: off [fixed]
fcoe-mtu: off [fixed]
tx-nocache-copy: off
loopback: off [fixed]
rx-fcs: off
rx-all: off
tx-vlan-stag-hw-insert: off [fixed]
rx-vlan-stag-hw-parse: off [fixed]
rx-vlan-stag-filter: off [fixed]
l2-fwd-offload: off [fixed]
hw-tc-offload: off [fixed]
esp-hw-offload: off [fixed]
esp-tx-csum-hw-offload: off [fixed]
rx-udp_tunnel-port-offload: off [fixed]

Repare nas opções rx-checksumming e tx-checksumming. No meu caso, meu NIC (Network Interface Controller) não realiza o checksum para pacotes enviados por hardware (tx-checksumming está em off), Minha interface é meio fraquinha (100BaseT) e talvez, por isso, não permita uma grande quantidade de recursos offloading (exceto pelo cálculo do checksum dos pacotes entrantes e outros detalhes, como rx-vlan-offload e tx-vlan-offload.... Note também que certos recursos não podem ser modificados (são "fixados" pelo NIC).

Mas tenho acesso a redes mais rápidas e com NICs com offloading habilitado e o "erro" do checksum de fato acontece como citei...

No caso de redes não Gigabit e/ou de fibra-ótica, pode-se desabilitar completamente o offloading do checksum via:

$ ethtool -K enp3s0 rx off tx off

A opção é "maiúscula" para distinguir a escrita da leitura das opções. Consulte a manpage de ethtool para ver as opções....
Aliás... quando você instala o pacote ethtool, e seu host configura a interface de rede via /etc/network/interfaces, você pode colocar essas opções na própria configuração da interface. Por exemplo:

...
iface eth0 inet static
      address 192.168.1.5
      netmask 255.255.255.0
      gateway 192.168.1.254
      offload-tx off                     # Extensão do ethtool
      offload-rx off                    # Extensão do ethtool
...

 

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...