Curso de Redes – Mensagens ICMP do tipo Time Exceeded (Tempo Excedido)

Mensagens ICMP do tipo Time Exceeded (Tempo Excedido)

Em grandes redes podem existir inúmeros roteadores interconectados que encaminham datagramas entre os dispositivos em redes distintas. O número desses roteadores pode chegar a centenas, senão milhares de dispositivos. Por conta disso, a topologia dessas redes pode ser altamente complexa, tornando as tarefas de roteamento complicadas.

Para realizar o roteamento de pacotes entre as redes os roteadores utilizam protocolos de roteamento, como o OSPF, os quais permitem encontrar as melhores rotas (caminhos) entre as redes. Porém, isso nem sempre ocorre, e em alguns casos uma rota não muito eficiente pode ser selecionada para um datagrama trafegar.

Isso não costuma ser um problema, contudo, desde que os datagramas sejam entregues em suas redes de destino. Porém, em um caso extremos, pode ocorrer o chamado Loop de Roteamento, no qual um pacote fica circulando entre roteadores eternamente, sem que seja entregue em sua rede de destino. Por exemplo, o roteador 1 encaminha para o roteador 2 datagramas destinados à rede Z; o roteador 2 encaminha esses datagramas para o roteador 3, e o roteador 3 os encaminha de volta ao roteador 1. Perceba que nesse caso o datagrama ficou “preso” dentro da rede de roteadores, sem chance de ser entregue em algum momento à sua rede de destino.

Esse é um grande problema, pois os datagramas que entram em um loop de roteamento consomem largura de banda e podem se acumular com o tempo, eventualmente tornando a rede inoperante por excesso de tráfego. Para evitar esse tipo de problema, cada datagrama IP possui um campo em seu cabeçalho denominado TTL – “Time to Live”, ou “Tempo de Vida”, cujo valor é ajustado pelo dspositivo de origem para um número que indica a quantidade de saltos que o datagrama poderá atravessar. O número de saltos é, basicamente, o número de roteadores pelos quais o datagrama poderá atravessar.

Cada vez que o datagrama chega a um roteador, esse roteador decrementa o valor do TTL em seu cabeçalho IP. Caso o valor do TTL atinja zero, o datagrama terá expirado e será sumariamente descartado.

Originalmente o campo TTL deveria limitar o tempo máximo, em segundos, que o datagrama poderia estar presente em uma rede, mas a forma de uso do campo neste caso acabou sendo modificada com o tempo.

É aí que entra em ação o protocolo ICMP. Quando um datagrama é descartado por conta do TTL ter expirado, o roteador que o descartou informa ao dispositivo de origem a respeito enviando uma mensagem ICMPv4 do tipo Tempo Excedido (Time Exceeded). Quando o dispositivo de origem recebe essa mensagem, ele sabe que houve um problema de roteamento durante a transmissão do pacote, ou ainda que o valor do campo TTL foi ajustado para um valor muito baixo a princípio. Então, o dispositivo de origem poderá tomar uma ação, que pode ser reenviar o pacote (com um TTL mais alto), ou desistir.

Formato da mensagem Tempo Excedido

A figura a seguir ilustra o formato da mensagem ICMPv4 Time Exceeded:

Mensagem ICMP do tipo Tempo Excedido - Time Exceeded

O campo Tipo possui o valor 11, e o campo Código pode ter os valores 0 ou 1, sendo que:

  • Valor 0: Indica expiração do campo TTL do datagrama IP;
  • Valor 1: Indica que o tempo de remontagem dos fragmentos foi excedido.

O caso do valor igual a 1 ocorre quando um datagrama IP é dividido em fragmentos (fragmentado). Neste caso, o dispositivo de destino tem a tarefa de remontar esses fragmentos para obter de volta a mensagem original. Porém, pode acontecer de um ou mais fragmentos não chegarem a seu destino, e para evitar que o dispositivo fique esperando esses fragmentos para sempre, um timer é ativado quando o primeiro fragmento chega. Se por acaso esse timer expirar antes que os outros fragmentos sejam recebidos, o dispositivo não mais esperará e a mensagem será descartada. E então, uma mensagem ICMPv4 do tipo Tempo Excedido será gerada. Note que nesse caso a mensagem é gerada pelo host de destino, e não por um roteador, como no caso do TTL decrementado até zero.

Um outro uso muito importante e útil das mensagens “Tempo Excedido” é no comando traceroute (ou tracert), que é utilizada para mostrar a sequência de dispositivos por onde um datagrama passa em uma rota particular entre dois hosts, e o tempo que o datagrama leva para alcançar cada um desses saltos. Veremos o comando traceroute em um próximo artigo.

Anterior: Mensagens ICMP do tipo Source Quench – Controle de Fluxo Básico

Sobre Fábio dos Reis (1343 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 25 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Unix, Linux e Open Source em geral, adora Eletrônica e Música, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.
Contato: Website

1 Trackbacks & Pingbacks

  1. Curso de Redes - Como funciona o utilitário traceroute

Escreva um comentário

Seu e-mail não será divulgado


*