Este é apenas o seu roteador fazendo LRO (ou talvez GRO).
Não é TSO / GSO porque você só o vê nos pacotes recebidos pelo seu roteador, não pelos que ele está transmitindo.
Eu tenho um roteador Wi-Fi de nível de consumidor que hospeda uma rede local. O roteador está conectado à Internet através de uma rede de campus (por exemplo, um cabo Ethernet conecta a porta WAN a um plug Ethernet de campus). Estou executando tcpdump
nas interfaces WLAN e WAN do roteador para capturar o tráfego gerado pelos dispositivos conectados ao roteador.
O que me intriga é que eu vejo quadros que são significativamente maiores que o limite definido pelo MTU mais o tamanho do cabeçalho da camada 2. Primeiro, pensei que isso seria explicado pelo suporte da rede do campus a quadros jumbo de Ethernet, mas eles são (geralmente) limitados a 9.000 bytes de MTU , e vejo alguns quadros com quase 13.000 bytes de comprimento.
Em seguida, achei que, como os dispositivos estão conectados por Wi-Fi, eles não são limitados pela Ethernet MTU, mas sim pela 802.11 MTU, mas esse parece ter cerca de 2304 bytes , então um quadro de 13KB ainda é muito grande. Nota: os quadros aparecem como quadros Ethernet no Wireshark, mas isso aparentemente é explicado por quadros 802.11 sendo convertidos para quadros Ethernet "falsos" antes de serem entregues à pilha de rede do sistema operacional, conforme explicado aqui :
802.11 adapters often transform 802.11 data packets into fake Ethernet packets before supplying them to the host, and, even if they don't, the drivers for the adapters often do so before supplying the packets to the operating system's networking stack and packet capture mechanism.
Algumas observações interessantes que podem ajudar você a me ajudar a esclarecer isso:
Acredito que esse comportamento pode ser devido ao TSO / GSO com base na resposta . No entanto, ele diz que não se deve ver esses quadros maiores se realizarmos a captura em um dispositivo de rede:
[...] you might see TCP sending out larger segments than the MTU. The packets on the wire , however, will be MTU size only. You can verify this by capturing on a network device (switch) etc.
Realmente, faço a captura em um dispositivo de rede (um roteador), mas ainda vejo os quadros grandes. No entanto, o roteador executa o LEDE / OpenWrt, que eu acho que torna o dispositivo de rede "aprimorado" mais parecido com um host real do que um dispositivo de rede ...?
Anexei um exemplo de um quadro que excede o MTU. Observe que esse quadro foi capturado na interface WAN do roteador ( eth0
). Isso é simplesmente um resultado do TSO / GSO, ou há algo mais acontecendo que eu não conheço? Além disso, o TSO / GSO funciona em ambas as direções ou só se aplica a pacotes de saída? Se este for o caso, então TSO / GSO não pode ser a explicação, já que o pacote de exemplo é de entrada do ponto de vista do roteador.
Atualização: desabilitar o TSO / GSO nas interfaces WAN e WLAN do roteador não alterou nada; os quadros grandes ainda estão presentes quando o experimento é reexecutado.
Este é apenas o seu roteador fazendo LRO (ou talvez GRO).
Não é TSO / GSO porque você só o vê nos pacotes recebidos pelo seu roteador, não pelos que ele está transmitindo.
Tags networking ethernet tcpdump mtu