Protocolo ICMP

De Wiki Cursos IFPR Foz
Revisão de 18h35min de 28 de maio de 2015 por Evandro.cantu (discussão | contribs) (→‎Traceroute)
(dif) ← Edição anterior | Revisão atual (dif) | Versão posterior → (dif)
Ir para navegaçãoIr para pesquisar

Protocolo ICMP

O protocolo ICMP (Internet Control and Message Protocol), definido na RFC 792, permite que os roteadores enviem mensagens de erro e controle a outros roteadores ou hosts, proporcionando uma comunicação entre a camada rede de uma máquina e a camada rede de outra máquina [1].

Quando um datagrama sofre um erro, o protocolo ICMP reporta a condição de erro de volta a fonte original do datagrama. Por exemplo, quando rodando uma aplicação HTTP, podemos encontrar mensagens como rede destino não encontrada (Destination Network Unreachable), que tem origem no protocolo ICMP. Também se um roteador não consegue encontrar uma rota ou entregar um datagrama, ou se uma condição anormal é detectada, o roteador precisa informar a fonte original dos dados para que esta tome alguma ação ou corrija o problema.

O protocolo ICMP é considerado como parte do IP, todavia as mensagens ICMP são carregadas na porção de dados de um datagrama IP, que as identifica no campo protocol como tipo ICMP (1). Os datagramas contendo as mensagens ICMP seguem de volta, seguindo o caminho que tomaram os dados do usuário, podendo elas também serem perdidas ou corrompidas.

Formato das Mensagens ICMP

Cada mensagem ICMP tem um campo de tipo (Type) e um campo de código (Code) e um campo de checksum, além de outros campos, dependendo do tipo da mensagem.

Exemplo
Mensagem Destino Inalcançável

Além dos campos Type, Code e Checksum contém os primeiros 8 bytes do datagrama que causou o erro (com isto o emissor pode determinar o pacote que causou o erro):

Destination Unreachable Message
0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type      |     Code      |          Checksum             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                             unused                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      Internet Header + 64 bits of Original Data Datagram      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 Type 3
 Code
  0 = net unreachable;
  1 = host unreachable;
  2 = protocol unreachable;
  3 = port unreachable;
  4 = fragmentation needed and DF set;
  5 = source route failed.

Tipos de mensagens ICMP

Na sequência estão listados alguns tipos de mensagens ICMP:

Summary of Message Types
  0  Echo Reply
  3  Destination Unreachable
  4  Source Quench
  5  Redirect
  8  Echo
 11  Time Exceeded
 12  Parameter Problem
 13  Timestamp
 14  Timestamp Reply
 15  Information Request
 16  Information Reply

Ping

Nem todas as mensagens do protocolo ICMP são mensagens de erro. Por exemplo, o ping está baseado no envio de mensagens do protocolo ICMP de solicitação de eco (echo request) e de resposta de eco (echo reply).

Echo or Echo Reply Message
0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type      |     Code      |          Checksum             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Identifier          |        Sequence Number        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Data ...
+-+-+-+-+-
Type
 8 for echo message;
 0 for echo reply message.
Code
 0

Traceroute

O traceroute também usa mensagens ICMP e através delas é capaz de traçar uma rota aproximada entre dois hosts.

Para determinar o nome e o endereço dos roteadores entre a fonte e o destino, o traceroute na fonte envia uma série de datagrama IP ao destino usando o protocolo UDP e uma porta não utilizada. O primeiro datagrama tem o TTL (time to livetempo de vida) igual a 1, o segundo 2, o terceiro 3, e assim por diante, e inicia temporizadores para cada datagrama. Quando o enésimo datagrama chega ao enésimo roteador, este verifica que o tempo de vida do datagrama acaba de terminar. Pelas regras do IP, o datagrama é então descartado e uma mensagem ICMP de advertência tipo tempo de vida excedido é enviada a fonte com o nome do roteador e seu endereço IP. Quando a resposta chega de volta a fonte, a mesma calcula o tempo de viagem em função dos temporizadores. Quando o pacote chega ao destino bate na porta UDP não usada e uma nova mensagem ICMP porta inalcansável é enviada a origem e o traceroute conclui o destino final da rota.

Referências

  1. KUROSE, J.F; ROSS K. W. Redes de Computadores e a Internet: Uma abordagem top-down, São Paulo: Pearson, 2010.

--Evandro.cantu (discussão) 10h25min de 1 de setembro de 2014 (BRT)