Ir para conteúdo
  • Cadastre-se
Entre para seguir isso  
fredericopissarra

Um provável problema com o TCPDUMP

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
...

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
Entre para seguir isso  

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×