Entendendo o MTU e ICMP versus Path MTU Discovery – CCNA

Tempo de leitura: 7 minutos

Olá caros Alunos e Leitores que nos acompanham, nesse artigo vamos tratar do MTU e do Path MTU Discovery (o qual utiliza uma mensagem de erro do ICMP para funcionar), assuntos importantes para quem trabalha em redes ou está se preparando para a certificação Cisco CCNA, pois eles determinam se um pacote IP deve ser ou não fragmentado para poder ser enviado pela rede IP.

MTU é o acrônimo para a expressão inglesa Maximum Transmission Unit, que em português significa Unidade Máxima de Transmissão, e refere-se ao tamanho do maior datagrama que uma camada de um protocolo de comunicação pode transmitir. Cada tecnologia de camada 2 possui um determinado MTU, por exemplo, o padrão Ethernet tem MTU de 1500 bytes.

O protocolo IP permite a fragmentação de pacotes, possibilitando que um datagrama seja dividido em pedaços, cada um pequeno o suficiente para poder ser transmitido por uma conexão com o MTU menor que o datagrama original. Esta fragmentação acontece na camada IP (camada 3 do modelo OSI) e usa o parâmetro MTU da interface de rede que irá enviar o pacote pela conexão. O processo de fragmentação marca os fragmentos do pacote original para que a camada IP do destinatário possa montar os pacotes recebidos, reconstituindo o datagrama original.

MTU do caminho
MTU do caminho

A norma RFC 2000 descreve o “Path MTU discovery“, uma técnica para determinar o MTU ideal do caminho entre dois computadores evitando a fragmentação dos pacotes IP. Veja na figura a seguir porque a fragmentação ocorre, pois temos um caminho entre dois pontos com três links de MTU diferentes e o MTU mais baixo é o que define o valor máximo que o caminho permite. Se você tentar enviar um pacote de 1500 bytes em um caminho que permite no máximo 800 bytes ele precisará ser fragmentado, ou seja, quebrado em pedaços menores.

Para que haja a fragmentação existe um flag (bit de controle) no protocolo IP chamado DF (Don’t Fragment – Não Fragmente) que deve estar desativado, caso este flag esteja habilitado (setado em 1) o roteador não poderá fragmentar o pacote e se ele estiver acima do MTU o roteador irá gerar uma mensagem de erro para o computador de origem através do ICMP.

Portanto, a técnica de descoberta do MTU do caminho (Path MTU Discovery) utiliza um feedback através de mensagem de erro ICMP para o endereço de origem dos resultados de tentativas de enviar datagramas de tamanhos progressivamente maiores, com o bit DF (Don’t Fragment) ativado. Qualquer dispositivo que ao longo do caminho necessite de fragmentar o pacote irá descartá-lo e enviar uma resposta ICMP de destino inalcançável com o código 4 ou “datagrama demasiado grande” (packet too big) para o endereço de origem. Através deste teste, o computador de origem “aprende” qual o valor máximo de MTU que atravessa a rede sem que seja fragmentado.

ICMP - Packet too big
ICMP – Packet too big

Testando Manualmente o MTU do Caminho com o Ping
Você pode testar manualmente o MTU do caminho até um determinado destino da Internet a partir do seu computador com o comando ICMP ping utilizando as opções “-l” e “-f”.

Com o “-l” você pode definir o tamanho do pacote IP, por exemplo, um “ping 10.0.0.1 –l 1500” define um payload de 1500 bytes para esse pacote do ICMP.

Já o “-f” ativa o bit de não fragmentação do pacote (DF), portanto se o pacote for muito grande e precisar de fragmentação com o bit DF ativo você receberá uma mensagem de erro do ICMP.

O teste é simples, faça um ping com tamanho de 1500, o qual é o MTU limite de uma rede do tipo Ethernet e verifique se ele passa, caso haja erro vá diminuindo o valor até chegar ao máximo que você pode enviar para aquele caminho.

Veja o teste abaixo feito para o site da Cisco. No exemplo abaixo fizemos um teste iniciando com um pacote de 1500 bytes e fomos diminuindo de 100 em 100 bytes, quando chegamos ao valor de 1200 bytes respondendo ao ping, aí subimos mais 50 bytes e fomos aumentando e diminuindo até chegar ao valor de 1270 bytes de MTU ideal para que não houvesse fragmentação nesse caminho.

C:\>ping www.cisco.com -l 1500 -f

Disparando e144.dscb.akamaiedge.net [23.57.128.170] com 1500 bytes de dados:
O pacote precisa ser fragmentado, mas a desfragmentação está ativa.
O pacote precisa ser fragmentado, mas a desfragmentação está ativa.
O pacote precisa ser fragmentado, mas a desfragmentação está ativa.
O pacote precisa ser fragmentado, mas a desfragmentação está ativa.

Estatísticas do Ping para 23.57.128.170:
Pacotes: Enviados = 4, Recebidos = 0, Perdidos = 4 (100% de
perda),

C:\>ping www.cisco.com -l 1400 -f

Disparando e144.dscb.akamaiedge.net [23.57.128.170] com 1400 bytes de dados:
O pacote precisa ser fragmentado, mas a desfragmentação está ativa.
O pacote precisa ser fragmentado, mas a desfragmentação está ativa.
O pacote precisa ser fragmentado, mas a desfragmentação está ativa.
O pacote precisa ser fragmentado, mas a desfragmentação está ativa.

Estatísticas do Ping para 23.57.128.170:
Pacotes: Enviados = 4, Recebidos = 0, Perdidos = 4 (100% de
perda),

C:\>ping www.cisco.com -l 1300 -f

Disparando e144.dscb.akamaiedge.net [23.57.128.170] com 1300 bytes de dados:
O pacote precisa ser fragmentado, mas a desfragmentação está ativa.
O pacote precisa ser fragmentado, mas a desfragmentação está ativa.
O pacote precisa ser fragmentado, mas a desfragmentação está ativa.
O pacote precisa ser fragmentado, mas a desfragmentação está ativa.

Estatísticas do Ping para 23.57.128.170:
Pacotes: Enviados = 4, Recebidos = 0, Perdidos = 4 (100% de
perda),

C:\>ping www.cisco.com -l 1200 -f

Disparando e144.dscb.akamaiedge.net [23.57.128.170] com 1200 bytes de dados:
Resposta de 23.57.128.170: bytes=1200 tempo=31ms TTL=54
Resposta de 23.57.128.170: bytes=1200 tempo=29ms TTL=54
Resposta de 23.57.128.170: bytes=1200 tempo=25ms TTL=54
Resposta de 23.57.128.170: bytes=1200 tempo=29ms TTL=54

Estatísticas do Ping para 23.57.128.170:
Pacotes: Enviados = 4, Recebidos = 4, Perdidos = 0 (0% de
perda),
Aproximar um número redondo de vezes em milissegundos:
Mínimo = 25ms, Máximo = 31ms, Média = 28ms

C:\>ping www.cisco.com -l 1250 -f

Disparando e144.dscb.akamaiedge.net [23.57.128.170] com 1250 bytes de dados:
Resposta de 23.57.128.170: bytes=1250 tempo=28ms TTL=54
Resposta de 23.57.128.170: bytes=1250 tempo=33ms TTL=54
Resposta de 23.57.128.170: bytes=1250 tempo=26ms TTL=54
Resposta de 23.57.128.170: bytes=1250 tempo=28ms TTL=54

Estatísticas do Ping para 23.57.128.170:
Pacotes: Enviados = 4, Recebidos = 4, Perdidos = 0 (0% de
perda),
Aproximar um número redondo de vezes em milissegundos:
Mínimo = 26ms, Máximo = 33ms, Média = 28ms

C:\>ping www.cisco.com -l 1280 -f

Disparando e144.dscb.akamaiedge.net [23.57.128.170] com 1280 bytes de dados:
O pacote precisa ser fragmentado, mas a desfragmentação está ativa.
O pacote precisa ser fragmentado, mas a desfragmentação está ativa.
O pacote precisa ser fragmentado, mas a desfragmentação está ativa.
O pacote precisa ser fragmentado, mas a desfragmentação está ativa.

Estatísticas do Ping para 23.57.128.170:
Pacotes: Enviados = 4, Recebidos = 0, Perdidos = 4 (100% de
perda),

C:\>ping www.cisco.com -l 1270 -f

Disparando e144.dscb.akamaiedge.net [23.57.128.170] com 1270 bytes de dados:
Resposta de 23.57.128.170: bytes=1270 tempo=28ms TTL=54
Resposta de 23.57.128.170: bytes=1270 tempo=26ms TTL=54
Resposta de 23.57.128.170: bytes=1270 tempo=31ms TTL=54
Resposta de 23.57.128.170: bytes=1270 tempo=28ms TTL=54

Estatísticas do Ping para 23.57.128.170:
Pacotes: Enviados = 4, Recebidos = 4, Perdidos = 0 (0% de
perda),
Aproximar um número redondo de vezes em milissegundos:
Mínimo = 26ms, Máximo = 31ms, Média = 28ms

C:\>

Nos roteadores da Cisco o MTU é mostrado no comando “show interfaces”.

dltec#show interfaces fast 0/0
FastEthernet0/0 is up, line protocol is up
  Hardware is Gt96k FE, address is 001e.130b.1aee (bia 001e.130b.1aee)
  Internet address is 192.168.1.6/24
  MTU 1500 bytes, BW 100000 Kbit/sec, DLY 100 usec,
     reliability 255/255, txload 1/255, rxload 1/255

O valor do MTU pode ser alterado dentro do modo de configuração de Interface com o comando “ip mtu”.
dltec(config)#int f0/0
dltec(config-if)#ip mtu ?
  <68-1500>  MTU (bytes)

Por hoje ficamos com esses conhecimentos, espero que vocês tenham gostado e caso tenham alguma sugestão de post é só colocar no comentário que os mais pedidos serão analisados com muito carinho.

Até uma próxima!!!

Se você quer aprender a dominar o mundo das redes se matricule agora mesmo em um dos nosso cursos online. Curso CCNA NetworkCurso CCNA Security e Curso CCNA Voice.

A DlteC do Brasil oferece o melhor em treinamentos online para você. Venha estudar conosco.

Sobre Marcelo B do Nascimento

Cofundador da DlteC do Brasil e 7Bit Tecnologia, graduado em Engenharia Eletrônica/Telecomunicações pela UTFPR e pós-graduado em Redes e Sistemas Distribuídos pela PUC-PR. Trabalha na área de Tecnologia da Informação e Telecomunicações desde 1996. Certificado ITIL Foundations, CCNA Routing & Switching, CCNA Voice, CCNA Security e CCNP Routing & Switching.

  • Diogo Maia

    Otimo post parabéns ! quem trabalha em provedor sabe o como isso e importante no dia a dia : )

  • Felizardo

    Bom dia Prof. Marcelo.
    Estou com uma duvida.

    Será que o valor de MTU muito baixo pode reduzir a largura de banda de uma ligação?

    Estou com um problema e estou seriamente a pensar que o causa está no valor do MTU.

    • http://www.dltec.com.br DlteC do Brasil

      Olá Felizardo, o MTU muito baixo gera o uso maior de banda com mais cabeçalhos de camada 3, pois você pode acabar enviando mais pacotes para enviar as informações, porém os pacotes de voz já são pequenos. Você teria que utilizar um analisador de protocolos para verificar o efeito da configuração do MTU nas suas ligações, aumentando o valor e depois voltando ao seu padrão atual para certificar se realmente é MTU ou outro motivo.

      Prof Marcelo Nascimento

  • Ezequiel Mateus

    Existe algum curso de vocês que falam sobre MTU?

    • http://www.dltec.com.br DlteC do Brasil

      Oi Ezequiel, falamos do MTU no curso de redes completo, de IPv6 e no CCENT.

  • Priscila Fuller

    Olá, estou com uma dúvida. Fiz os testes como explicado, mas, quando inicio com 1500, aparece a mensagem “pacote precisa ser fragmentado, mas a desfragmentação está ativa”.

    Mesmo assim, aparece: Pacotes: Enviados = 4, Recebidos = 4, Perdidos = 0 (0% de
    perda)

    Já com 1470, não aprece o erro, mas também não mostra a velocidade. As respostas são todas <1ms, e aparecePacotes: Enviados = 4, Recebidos = 4, Perdidos = 0 (0% de
    perda), Mínimo = 0ms, Máximo = 0ms, Média = 0ms

    O que está acontecendo?