Introdução ao MTU

Fevereiro 2017



O que significa MTU ?


A Maximum Transmission Unit (MTU - unidade máxima de transmissão) é um parâmetro que determina a maior datagrama que pode ser transmitida através de uma interface de IP, sem precisar ser dividida em unidades menores. A MTU deve ser maior do que o maior datagrama que você quiser transmitir, sem ser fragmentado. (Mais simplesmente, a MTU define o tamanho máximo (em bytes) do pacote que pode ser transmitido de uma vez só).

Para a Ethernet, este valor deve ser de 1500 bytes.
Para as conexões em PPPoE, 1492
Para o RTC (velocidade baixa), 576

Calcular a MTU


Cada transmissão de trama (pacote de informação) é definida pelo corpo (= tamanho máximo do segmento = MMS), que define o maior segmento de dados TCP que pode ser transmitido, e o cabeçalho (header em inglês).
Ou seja, MTU=MSS + TCP/IP headers

Consideremos:

MSS=MTU-40 <-- 40 para o cabeçalho (20 byte IP e 20 byte TCP)
Os pacotes não são fragmentados
Sem perda de pacotes
Tamanho dos pacotes / velocidade
Seja, uma transferência de informações de 1.500.000 bytes usando diferentes tamanhos de pacotes através de uma linha T1 (RTC) (T1 = 1.544.000 bits por segundo), de acordo com a fórmula:

( MSS + header ) * 8 bits/byte
---------------------------------- = latência
1,544,000 bits/segundo.

Usando diferentes valores de MTU, podemos calcular a latência de transmissão:
Se MTU for = 1500, então: (1460+40) * 8 / 1,544,000 = 7.772 ms
Se MTU for = 576, então: (536+40) * 8 / 1,544,000 = 2.924 ms
Em 10 voltas, obtemos 77,72 ms para a MTU a 1500 e 29,24 ms para a 576.

Para resumir, quanto mais pacotes, mais demorada a transferência.
Vamos usar a mesma fórmula para uma transferência de 1mb.
1MByte = 1024 KB = 1.048.576 bytes.

Se MTU for = 1500, então: (1460+40) * 8 / 1,544,000 = 7.772 ms
1 MByte / MSS = 1.048.576 bytes / 1460 = 718.2, portanto, 719 pacotes para transferir 1 MByte.

Seja, para transferir 1Mbyte: 719 pacotes * 7.772 ms (sempre circular) = 5588.068 ms, ou 5.588 segundos.

Se transferirmos nosso 1 MByte em 10 loops (definidos pelo cabeçalho), isso vai levar-nos idealmente a:

(1° pacote * 10 loops * 7.772ms atraso) + 718 * 7.772 = 5.658 segundos.

Se MTU = 576, então: (536 +40) * 8 / 1,544,000 = 2.924 ms
1 MByte / MSS = 1,048,576 bytes / 536 = 1956.3, logo 1957 pacotes para transferir 1 MByte.

Para transferir um MByte: 1957 pacotes * 2.924 ms (sempre por loop)= 5722.268 ms, ou 5.722 segundos por loop.

Se você transferir esse 1 MByte para 10 loops:
(1° pacote *10 loops * 2.924ms) + 1956 * 2.924 = 5.748 segundos.

A diferença é devida ao fato de que quanto maior o pacote, menor o tamanho do cabeçalho (relativamente ^ ^)
Portanto, para transferir 1Mbyte, se você usar um MTU a 1500, então há 719*40 = 28,760 bytes para o cabeçalho, enquanto que o MTU a 576, obtem-se 1957*40 = 78,280, ou seja, mais de 49,520 bytes de cabeçalho enviado a cada Mbyte. Para o nosso exemplo, 10 loops, não é importante mas nas transferências diárias ...
Além disso, a maioria dos modems usa um cabeçalho maior, mas nós não levaremos em conta neste exemplo outras latências que possam ser associadas.

Encontrar o valor do MTU no Windows


Para encontrar o valor máximo do MTU, você deve ir para o prompt de comando (Iniciar> Executar> "cmd"). Uma vez no prompt de comando (página de fundo negro), é necessário fazer testes de ping, especificando o tamanho dos pacotes a serem testados:
ping -f -l (tamanho do pacote -28) (IP do seu servidor)
a opção-f permite fazer o teste obrigando os roteadores encontrados a não fragmentarem o pacote
a opção-l envia o tamanho do pacote
Remover 28 do tamanho do pacote a ser testado corresponde ao cabeçalho deste pacote
É preciso fazer o teste para um IP. Por uma questão de navegação na internet, é melhor usar um endereço web.
O que dá:
ping -f -l 1372 192.168.0.1

- Se a resposta a consulta for:
Resposta de 192.168.0.1: bytes = 1372 ....
Resposta de 192.168.0.1: bytes = 1372 ....
Resposta de 192.168.0.1: bytes = 1372 ....
Resposta de 192.168.0.1: bytes = 1372 ....

Aqui, o tamanho do pacote pode transportar sem fragmentação, você pode testar um valor maior. Quando você receber a mensagem: "O pacote precisa ser fragmentado, mas definido DF", é porque o tamanho do pacote é muito grande.

Mudar o MTU no Windows


Depois de ter definido o MTU ideal, existem duas maneiras de modificar o valor do MTU. Indico aqui o mais fácil de implementar, através do software Dr TCP
Depois de instalar, você verá uma caixa "MTU", ou deverá especificar o valor encontrado durante os testes no DOS adicionando 28 para o cabeçalho.

Encontrar o valor do MTU no Linux


Basta executar este comando como roteador com o nome_da_interface, para substituir com o nome da interface de rede em questão:
ifconfig nome_da_interface | grep -Eo "MTU:[0-9]+"

Mudar o MTU no Linux


É como roteador com o comando ifconfig que se muda o mtu no Linux, com a seguinte sintaxe:
ifconfig nome_da_interfacemtuvalor_do_mtu

Exemplo: definir o mtu da interface eth0 a 1500
ifconfig eth0 mtu 1500

Links


O MTU se conecta ao RFC 791, mais geralmente no protocolo IP
Veja o Index of/refc-vf/pdf

Tradução feita por Lucia Maurity y Nouira

Veja também

Publicado por pintuda. Última modificação: 13 de janeiro de 2013 às 09:02 por pintuda.
Este documento, intitulado 'Introdução ao MTU', está disponível sob a licença Creative Commons. Você pode copiar e/ou modificar o conteúdo desta página com base nas condições estipuladas pela licença. Não se esqueça de creditar o CCM (br.ccm.net) ao utilizar este artigo.