fredericopissarra Posted September 11, 2018 at 10:44 PM Share Posted September 11, 2018 at 10:44 PM 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 to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.