.png)
Eu tenho uma conexão Ethernet gigabit do meu laptop ao meu roteador e uma conexão IPv6 funcional à Internet. Posso receber pacotes muito grandes de sites da internet, com tamanhos de até pelo menos 10.000 bytes (de acordo com o wireshark). (editar: acaba sendo o 'descarregamento de recebimento genérico' do Linux). No entanto, ao tentar enviar qualquer coisa, meu computador local se fragmenta logo abaixo de 1.500 bytes para ipv6. (No ipv4, posso enviar pacotes TCP para a Internet de pelo menos 1514 bytes, posso fazer ping com pacotes até o mtu configurado de 6128, mas eles estão bloqueados.)
Estou no Ubuntu 12.04. Eu configurei um mtu para minha eth0 de 6128 (o máximo que ela aceita), usando ip link set dev eth0 mtu 6128
e na GUI do miniaplicativo 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 possui um conjunto de mtu. Posso fazer ping em ipv4 com pacotes de até 6.128 bytes (embora não obtenha respostas), mas quando o faço, ping6 myrouter -c3 -s1500 -Mdo
recebo respostas de errodo meu próprio computadordizendo que os pacotes são muito grandes e o mtu é 1480. Confirmei com o Wireshark que nada é colocado na rede e as respostas são de fato geradas pelo meu próprio computador.
Então, como faço para que meu computador use o mtu maior?
Responder1
O que você está vendo provavelmente não são frames jumbo. Afinal, algo como 99,9% da Internet funciona em um MTU de 1.500 bytes ou menos. Provavelmente é apenas o seu kernel ou placa de rede que está unindo pacotes.
Isso é feito usando um recurso geralmente chamado de descarregamento de recebimento genérico (GRO) ou descarregamento de recebimento grande (LRO). A maneira como isso funciona é que os pacotes dentro de um único fluxo são identificados e mesclados e, em seguida, 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 o wireshark mais feliz (embora não sua CPU)
Você ainda pode usar MTUs mais altos localmente, mas isso não vale mais a pena, precisamente devido a recursos como esse e, claro, hardware cada vez mais rápido. Também pode ser um pesadelo de gestão. Existem muitos drivers e hardware com bugs e vários graus de suporte à configuração de MTU por meio de DHCP ou RA em sistemas operacionais. Como você deseja que todos os dispositivos em um determinado domínio de transmissão executem o mesmo MTU, isso geralmente torna os jumbo frames impraticáveis.
Responder2
O MTU é usado principalmente localmente. Usar frames Jumbo em vários saltos de rede (como roteador + internet) é complicado e provavelmente não funcionará. DSL, por exemplo, normalmente limitará oCaminho MTUpara 1492 bytes. Como regra geral, o Path MTU é determinado pelo menor MTU de link entre qualquer um dos roteadores participantes. A menos que você controle todo o caminho e defina MTUs grandes para cada link, aumentar o MTU apenas no seu computador não fará nada (exceto, talvez, melhorar a velocidade da sua LAN).
Responder3
Descobri como fazer isso com base no comentário de Stefan Seidel. Acontece que há outra configuração de mtu que o ip
comando não mostra. Definir 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 tenha ajudado muito, o roteador realmente perdeu quadros maiores.) Esse valor é atualizado/redefinido regularmente por meio do anúncio do roteador. O RA pode ser desativado gravando 0
na accept_ra
mesma pasta sob /proc
.