Como otimizar a velocidade da Internet do Ubuntu com configurações MTU



Experimente Nosso Instrumento Para Eliminar Problemas

Embora os textos de computador difiram na aplicação do termo, o Ubuntu usa a Unidade de Transmissão Máxima TCP (MTU) para se referir ao maior tamanho de um pacote TCP que uma máquina pode passar por uma conexão de rede TCP / IP. Embora o cálculo desse valor seja relativamente simples e os padrões funcionem na maioria das máquinas, pode ser possível otimizar ainda mais seu sistema se os pacotes estiverem se fragmentando devido a configurações incomuns. Enviar grandes pacotes únicos de saída é mais eficiente do que enviar vários pacotes menores de saída.



A maneira mais fácil de descobrir o valor MTU correto para sua máquina é abrir uma janela de terminal. Mantenha pressionado CTRL, ATL e T ou talvez inicie-o a partir do traço do Unity. Se você estiver trabalhando com o Ubuntu Server, terá como padrão uma interface CLI sem nenhum ambiente gráfico. Quando estiver no terminal, digite ping -s 1464 -c1 distrowatch.com e aguarde a saída. Se você não estiver recebendo nada, sua conexão de rede não foi configurada corretamente. Supondo que você recebeu a saída adequada, procure uma seção que lê 1464 (1492) bytes de dados, o que indica que você está enviando o pacote com 28 bytes de informações de cabeçalho.



Método 1: Examinando a saída de ping para fragmentação de pacote

O comando ping permitirá que você saiba se o pacote foi enviado como mais de um fragmento com vários dados de cabeçalho anexados. Examine a saída de qualquer linha que avise sobre algo sobre “Frag needed and DF set (mtu = 1492)” ou qualquer texto semelhante. Dependendo de qual versão do ping foi incluída em sua versão do Ubuntu, o aviso pode ter uma redação diferente. Se este texto não estiver presente, é mais do que provável que você já esteja trabalhando com alguma medição de MTU que não está enviando pacotes fragmentados no momento.



Para encontrar o MTU mais otimizado para o seu sistema, você deseja executar este comando ping com um tamanho de pacote pequeno e, com o tempo, aumentá-lo até que comece a se fragmentar, após o que você considera este o seu ponto de corte. Lembre-se de que MTU = carga útil + 28, pois é necessário haver algum espaço para os dados do cabeçalho. Agora, se você pode aumentar o tamanho para algo muito grande sem quaisquer fragmentos, sua interface de rede pode ser capaz de lidar com pacotes massivos sem a necessidade de gerar fragmentos. Quando você finalmente vê um aviso de Frag necessário, isso significa que qualquer pacote enviado com uma carga útil do tamanho que você executou ou superior será enviado como vários pacotes. Suponha que se você tentar executar ping -s 2464 -c1 distrowatch.com sem qualquer aviso, mas ping -s 2465 -c1 distrowatch.com enviar um aviso, isso significa que 2.464 + 28 é a maior configuração de MTU que sua configuração TCP / IP pode suportar antes de enviar vários pacotes fragmentados. Pode demorar alguns minutos para localizar um valor exato.



Depois de ter em mente um valor ao executar o comando ping várias vezes, você precisará executar sudo ifconfig para encontrar uma lista de interfaces de rede conhecidas. O Ubuntu e seus derivados eliminam a conta root, mas operamos a partir de um shell criado por sudo bash para nossos exemplos. É recomendável que você prefira cada comando com sudo individualmente.

Assim que você souber o dispositivo correto, tente:

sudo ifconfig interfaceName man ####

Substitua interfaceName pelo nome do adaptador de rede com o qual você está trabalhando e, em seguida, substitua #### pelo tamanho que você encontrou mais 28 para as informações do cabeçalho. Você pode executar ifconfig para ver qual era o MTU padrão para sua NIC e executá-lo novamente várias vezes para ver se o comando anterior o altera. Alguns adaptadores de interface de rede simplesmente não permitem que você altere isso. Se for esse o caso, a otimização adicional será infrutífera, infelizmente. Se, no entanto, funcionou, você pode realmente torná-lo permanente. Tente correr ifconfig | grep MTU para encontrar todos os valores se você tiver vários conectores e, então, poderá corresponder os valores aos conectores com os quais está trabalhando.

Método 2: Tornando as otimizações MTU constantes

Até agora, você não fez nenhuma alteração permanente em seu sistema. Se você reiniciar, apagará todas as alterações, o que é bom se você cometeu algum tipo de erro e descobriu que não consegue mais se conectar à Internet. Por outro lado, se você encontrou um valor preciso para o seu MTU, você precisará editar o documento. Este é provavelmente um bom momento para fazer uma cópia, caso algo aconteça. Experimentar ou algo semelhante para que você tenha uma cópia para o caso. Se quiser editá-lo graficamente, digite e digite sua senha. Se estiver usando Kubuntu, Xubuntu ou Lubuntu, você precisará substituir o gedit pelo editor de texto gráfico que seu respin do Ubuntu usa. O Xubuntu, por exemplo, usa mousepad em vez do gedit. Se você estiver usando o Ubuntu Server ou simplesmente preferir trabalhar com a linha de comando, digite , supondo que você não esteja usando um shell de root.

Independentemente de qual método você usou para editá-lo, encontre o nome da interface ifconfig cuspido antes. Suponhamos que você esteja olhando para o primeiro conector Wifi em sua máquina, que provavelmente se chamaria wlan0 ou algo semelhante. Nesse caso, encontre um trecho de código que comece com iface wlan0 inet static ou algo semelhante. Sua milhagem pode variar, mas a próxima linha lerá o endereço seguido por um endereço IP no formato ###. ###. #. ##. Ele pode ser formatado de forma diferente se você estiver em uma conexão IPv6 nativa. Você terá uma máscara de rede e uma linha de gateway, seguidos por algo que lista um nome de host ou algo semelhante. Na parte inferior, você terá outra linha que diz mtu e um número. Substitua esse número pelo valor MTU de otimização, salve o documento e saia do editor de texto. Você vai querer reiniciar o sistema para garantir que funcionou.

Se tudo ficar bem após várias reinicializações, exclua o arquivo interfaces.bak no diretório ~ / Documents. Você pode usar sudo mv e depois

se alguma coisa deu errado no processo.

Método 3: Editando as configurações da janela de recepção TCP (RWIN)

Ubuntu se refere à maior quantidade de dados que um host aceita antes de reconhecer o remetente como o valor RWIN. Se você baixar um arquivo de 30 MB, o servidor remoto não enviará imediatamente um bloco de dados de 30 MB. Seu host Ubuntu envia um número RWIN específico quando solicita o arquivo e, em seguida, o servidor começa a transmitir dados até atingir o número de bytes antes de esperar por uma confirmação de que seu sistema obteve os dados. Depois que o servidor recebe isso, ele começa a enviar blocos adicionais antes de aguardar outra confirmação.

Latência é o tempo que leva para transmitir e receber pacotes de um servidor remoto. As taxas de conexão contribuem para esse valor, mas o mesmo acontece com vários outros atrasos. O comando ping explicará a latência em termos de números de tempo de ida e volta (RTT). Veja a saída de nosso ping anterior do DistroWatch. Você encontrará uma linha que diz tempo = 134 ms, que é quanto tempo levou para os pacotes irem de nossa máquina Ubuntu para distrowatch.com e vice-versa. Estávamos enviando um pacote de 1.492 bytes, então a 134 ms poderíamos calcular uma fórmula para encontrar a velocidade total de transferência:

1.492 / .134 segundos = 11.134.328 bytes / segundo, o que resulta em aproximadamente 10,88 kilobytes binários por segundo. Isso é bastante lento no geral, e é por isso que o RWIN está em vigor para evitar que você tenha que reconhecer cada pacote enviado individualmente.

As configurações de RWIN no Ubuntu são separadas das configurações de MTU. Calcule o produto de atraso de largura de banda (BDP) para sua conexão de Internet com esta fórmula:

(Largura de banda máxima total que sua conexão de Internet deve fornecer em bytes por segundo) (RTT em segundos) = BDP

O tamanho do pacote TCP não influencia o RWIN, mas o tamanho do pacote em si é influenciado pelo valor selecionado no Método 1. Use este comando para encontrar as variáveis ​​do kernel relacionadas ao RWIN:

Lembre-se de que há um espaço após _mem, mas em nenhum outro lugar no texto citado. Você receberá vários valores de volta. Os necessários são net.ipv4.tcp_rmem, net.ipv4.tcp_wmem e net.ipv4.tcp_mem . Os números após esses valores representam os valores mínimo, padrão e máximo para cada um. Eles representam o vetor de memória da janela de recepção, vetor de envio e vetor de pilha TCP. Se você estiver executando o Ubuntu Kylin, pode ter uma longa lista de outros adicionais. Você pode ignorar com segurança qualquer um desses valores adicionais. Alguns usuários do Kylin também podem ver alguns dos valores delineados em outros scripts, mas, mais uma vez, basta procurar por essas linhas.

O Ubuntu não tem uma variável RWIN, mas net.ipv4.tcp_rmem está fechado. Essas variáveis ​​controlam o uso da memória e não apenas o tamanho do TCP. Eles incluem memória consumida por estruturas de soquetes de dados e pacotes curtos em buffers massivos. Se você deseja otimizar esses valores, envie os pacotes de tamanho máximo definidos no Método 1 para outro servidor remoto. Vamos usar o padrão de 1.492 bytes novamente, subtraindo 28 bytes para as informações do cabeçalho, mas lembre-se de que você pode ter um valor diferente. Use o comando ping -s 1464 -c5 distrowatch.com para obter dados RTT adicionais.

Você vai querer executar este teste mais de uma vez em diferentes horas do dia e da noite. Tente fazer o ping de alguns outros servidores remotos também para ver a variação do RTT. Como tínhamos uma média de pouco mais de 130 ms cada vez que tentávamos, podemos usar a fórmula para descobrir nosso BDP. Suponhamos que você esteja em uma conexão muito genérica de 6 Mbits / segundo. O BDP seria:

(6.000.000 bits / s) (. 133 s) * (1 byte / 8 bits) = 99.750 bytes

Isso significa que o valor padrão net.ipv4.tcp_rmem deve ser algo em torno de 100.000. Você pode defini-lo ainda mais alto se tiver medo de obter um RTT tão ruim quanto meio segundo. Todos os valores encontrados em net.ipv4.tcp_rmem e net.ipv4.tcp_wmem precisam ser definidos de forma idêntica, uma vez que a transmissão e a recepção de pacotes acontecem na mesma conexão de Internet. Geralmente, você deseja definir net.ipv4.tcp_mem com o mesmo valor usado por net.ipv4.tcp_wmem e net.ipv4.tcp_rmem, uma vez que esta primeira variável é o maior tamanho total de memória de buffer definido para transações TCP.

Emita o comando e veja se essas duas configurações estão definidas como 0 ou 1, o que indica um estado de desligado ou ligado.

Definir net.ipv4.tcp_no_metrics_save como 1 forçará o kernel Linux a otimizar a janela de recepção entre os valores net.ipv4.tcp_rmem e net.ipv4.tcp_wmem de maneira dinâmica. Quando net.ipv4.tcp_moderate_rcvbuf está ativado, ele evita que o congestionamento influencie a conectividade subsequente. Antes de fazer qualquer alteração permanente, conduza uma verificação de velocidade em http://www.speedtest.net ou http://www.bing.com/search?q=speed+test para se certificar de que você tem controle sobre suas medições.

Altere temporariamente as variáveis ​​com seus valores calculados. Certifique-se de substituir os #s pelas somas calculadas.

sudo sysctl -w net.ipv4.tcp_rmem = ”#### ###### ######” net.ipv4.tcp_wmem = ”#### ##### #######” net.ipv4.tcp_mem = ”#### ##### #######” net.ipv4.tcp_no_metrics_save = 1 net.ipv4.tcp_moderate_rcvbuf = 1

Teste novamente sua conexão para ver se a velocidade melhorou e, se não, ajuste seu comando novamente e execute-o novamente. Lembre-se de que você pode pressionar a tecla para cima em seu terminal para repetir o último comando usado. Depois de encontrar os valores apropriados, abra com o gksu ou sudo comando do editor de texto do Método 1, e edite as linhas para ler como segue, mais uma vez substituindo os #s com seus valores calculados. É claro que você também deseja fazer backup do arquive da mesma forma que você fez na primeira parte, apenas no caso de você cometer um erro. Se você fez um, também pode restaurar da mesma maneira.

net.ipv4.tcp_rmem = #### ##### #######

net.ipv4.tcp_wmem = #### ##### #######

net.ipv4.tcp_mem = #### ##### #######

net.ipv4.tcp_no_metrics_save = 1

net.ipv4.tcp_moderate_rcvbuf = 1

Salve quando tiver certeza de que está tudo bem. Emita o seguinte comando:

sudo sysctl -p

Isso forçará o kernel do Linux a recarregar as configurações em , e se tudo correr bem, deve fornecer pelo menos uma conexão de rede um pouco mais rápida. Dependendo de seus padrões originais, a diferença pode realmente ser dramática ou potencialmente nem mesmo perceptível.

8 minutos lidos