Eu tenho uma conexão Ethernet de gigabit do meu laptop ao meu roteador e uma conexão ipv6 em funcionamento à Internet. Posso receber pacotes muito grandes de sites na Internet, com tamanhos de pelo menos 10000 bytes (de acordo com o wireshark). ( edit : acaba sendo o 'download genérico de recebimento' do linux). No entanto, ao tentar enviar qualquer coisa, meu computador local fragmenta-se em pouco menos de 1500 bytes para o ipv6. (No ipv4, posso enviar pacotes tcp para a Internet de pelo menos 1514 bytes, posso executar o ping com pacotes até o mtu configurado de 6128, mas eles são perfurados.)
Estou no ubuntu 12.04. Eu configurei um mtu para o eth0 de 6128 (o máximo que ele aceita), usando ip link set dev eth0 mtu 6128
e no GUI do applet do NetworkManager, e reiniciei a conexão. ip link show eth0
mostra que o 6128 mtu está realmente configurado. ip -6 route
mostra que nenhum dos caminhos que o kernel conhece possui um conjunto de mtu. Posso executar ping no ipv4 com pacotes de até 6128 bytes (embora não receba respostas), mas quando 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 Wireshark que nada é colocado no fio, e as respostas são realmente geradas pelo meu próprio computador.
Então, como faço para que meu computador use o mtu maior?
Respostas:
O que você está vendo provavelmente não são quadros jumbo. Afinal, algo como 99,9% da Internet é executado em um MTU de 1500 bytes e menos. Provavelmente é apenas o seu kernel ou placa de rede fazendo coalescência de pacotes.
Isso é feito usando um recurso geralmente chamado de descarga genérica de recebimento (GRO) ou descarga grande de recebimento (LRO). A maneira como isso funciona é que os pacotes em um único fluxo são identificados e mesclados e, em seguida, alimentados na pilha TCP / IP. Isso pode economizar uma quantidade significativa de ciclos da CPU, pois reduz a quantidade de viagens de ida e volta para a pilha.
Tente isto: ethtool -K $ INTERFACE gro off
O que desativa esse recurso e torna o wireshark mais feliz (embora não sua CPU)
Você ainda pode usar MTU's mais altos localmente, mas ele não o comprará muito mais precisamente devido a recursos como esse e, é claro, a hardware cada vez mais rápido. Também pode ser um pesadelo de gerenciamento. Existem muitos drivers e hardware com bugs, e vários graus de suporte na configuração do MTU por meio de DHCP ou RA nos sistemas operacionais. Como você deseja que todos os dispositivos em um determinado domínio de broadcast estejam executando o mesmo MTU, isso geralmente torna os jumbo-frames impraticáveis.
fonte
O MTU é usado principalmente localmente. Usar frames Jumbo em vários saltos de rede (como roteador + internet) é complicado e provavelmente não funcionará. O DSL, por exemplo, normalmente limitará o Path MTU a 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 a MTU apenas no seu computador não fará nada (exceto, talvez, aumente a velocidade da sua LAN).
fonte
rdisc6 eth0
.Eu 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. A definição de um valor mais alto no/proc/sys/net/ipv6/conf/eth0/mtu
(comandosudo sh -c "echo 0 > /proc/sys/net/ipv6/conf/eth0/mtu"
fiz o que queria. (Não que isso ajudou muito, o roteador realmente caiu quadros maiores.) Este valor é atualizado / repor regularmente através de Router Advertisement. RA pode ser desativado por escrito0
paraaccept_ra
na mesma pasta abaixo/proc
.fonte