Como configurar um mtu grande (linux)


1

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 6128e no GUI do applet do NetworkManager, e reiniciei a conexão. ip link show eth0mostra que o 6128 mtu está realmente configurado. ip -6 routemostra 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 -Mdorecebo 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?


A MTU deve ser alterada em todos os dispositivos da sua rede, não apenas na sua estação de trabalho. Isso significa que você precisa configurar seu roteador, switches e tudo mais. Se um dispositivo não suportar uma MTU maior, será necessário substituí-lo ou aceitar uma menor.
Zoredache

Respostas:


2

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.


1
Sim isto está correcto. Eu já descobri isso, mas esqueci de atualizar a pergunta.
JanKanis 04/10

1

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).


Voce nao respondeu minha pergunta. O que eu quero fazer primeiro é fazer com que os jumbo-frames funcionem no link local do meu roteador e depois veja para onde ir. Como eu disse na pergunta, eu já tenho suporte a jusante de quadros jumbo na linha DSL. Eu quero isso principalmente porque eu posso e para saber como o linux funciona.
JanKanis

Você está confundindo duas camadas OSI. Os jumbo-frames são usados ​​na camada de link (Ethernet). Camadas mais altas encapsulam pacotes maiores em quadros menores, se forem forçados. Além disso, sua placa de rede pode não suportar jumbogramas IPv6 ou o roteador definirá a MTU durante a configuração automática. Verifique a entrada da MTU rdisc6 eth0.
Stefan Seidel

Os quadros jumbo não estavam sendo enviados porque as camadas mais altas (ipv6 neste caso) não permitiam pacotes maiores. A última parte do seu comentário acabou sendo o que eu estava procurando. Anúncios de roteador definem o mtu mais baixo.
JanKanis

1

Eu descobri como fazer isso com base no comentário de Stefan Seidel. Acontece que há outra configuração de mtu que o ipcomando não mostra. A definição de um valor mais alto no /proc/sys/net/ipv6/conf/eth0/mtu(comando sudo 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 escrito 0para accept_rana mesma pasta abaixo /proc.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.