Como configurar um grande mtu (linux)

0

Eu tenho uma conexão ethernet gigabit do meu laptop para meu roteador e uma conexão ipv6 funcional para a internet. Eu posso receber pacotes muito grandes de sites na internet, com tamanhos de pelo menos 10000 bytes (de acordo com o wireshark). ( edição : acaba sendo o genérico do linux receive offload ') No entanto, ao tentar enviar qualquer coisa, meu computador local fragmenta em pouco menos de 1500 bytes para o ipv6. (No ipv4, eu posso enviar pacotes tcp para a internet de pelo menos 1514 bytes, eu posso pingar com pacotes até o mtu configurado de 6128, mas eles são blackholed.)

Eu estou no Ubuntu 12.04. Eu configurei um mtu para minha eth0 de 6128 (o máximo que ele aceita), ambos usando ip link set dev eth0 mtu 6128 e na interface do applet NetworkManager, e reiniciei a conexão. ip link show eth0 mostra que o 6128 mtu está realmente definido. ip -6 route mostra que nenhum dos caminhos que o kernel conhece tem um conjunto de mtu. Eu posso pingar por ipv4 com pacotes de até 6128 bytes (embora eu não receba respostas), mas quando eu faço ping6 myrouter -c3 -s1500 -Mdo recebo respostas de erro do meu próprio computador dizendo que os pacotes são muito grandes e o mtu é 1480. Confirmei com o Wireshark que nada é colocado no fio, e as respostas são de fato geradas pelo meu próprio computador.

Então, como faço para que meu computador use o maior mtu?

    
por JanKanis 19.09.2012 / 13:02

3 respostas

1

O MTU é usado principalmente localmente. Usar quadros Jumbo em vários saltos de rede (como roteador + internet) é complicado e provavelmente não funcionará. A DSL, por exemplo, geralmente limitará a MTU de caminho a 1492 bytes. Como regra geral, a MTU do caminho é determinada pelo menor MTU do link entre qualquer um dos roteadores participantes. A menos que você controle todo o caminho e defina grandes MTUs para cada link, o aumento da MTU apenas em seu computador não faz nada (exceto talvez melhore suas velocidades de LAN).

    
por 19.09.2012 / 14:03
1

Eu descobri como fazer isso com base no comentário de Stefan Seidel. Acontece que há outra configuração de mtu que o comando ip não mostra. Definindo um valor mais alto em /proc/sys/net/ipv6/conf/eth0/mtu (o comando sudo sh -c "echo 0 > /proc/sys/net/ipv6/conf/eth0/mtu" fez o que eu queria. (Não que isso tenha ajudado muito, o roteador realmente removeu quadros maiores). Esse valor é atualizado / redefinido regularmente por meio do Roteador Anúncio. escrevendo 0 para accept_ra na mesma pasta em /proc .

    
por 20.09.2012 / 02:01
0

O que você está vendo provavelmente não são quadros jumbo. Algo como 99,9% da Internet é executado em um byte de 1500 e menor MTU depois de tudo. Provavelmente é apenas o seu kernel ou placa de rede fazendo coalescência de pacotes.

Ele faz isso usando um recurso geralmente chamado Generic Recieve Offload (GRO) ou Large Receieve Offload (LRO). A maneira como isso funciona é que os pacotes dentro de um único fluxo são identificados e mesclados, depois alimentados na pilha TCP / IP. Isso pode economizar uma quantidade significativa de ciclos de CPU, pois reduz a quantidade de viagens de ida e volta na pilha.

Tente isto: ethtool -K $ INTERFACE gro off

O que desativa esse recurso e deixa a wireshark mais feliz (mas não com sua CPU)

Você ainda pode usar MTUs mais altos localmente, mas ele não compra muito mais precisamente devido a recursos como esse e, claro, hardware cada vez mais rápido. Também pode ser um pesadelo de gerenciamento. Há muitos drivers e hardware de buggy, e vários graus de suporte para configuração de MTU através de DHCP ou RA em sistemas operacionais. Como você quer que todos os dispositivos em um determinado domínio de broadcast estejam executando o mesmo MTU, isso muitas vezes torna os jumbo frames impraticáveis.

    
por 04.10.2012 / 02:33

Tags