.O ICMP é um protocolo que trabalha na camada de rede do modelo de referência OSI. Ele é usado para dar suporte a outros protocolos, pois algumas vezes um host ou um gateway precisa se comunicar com a origem ou com o destino para reportar um erro no pacote processado. Palma e Prates (2003, p. 56) expõem que o ICMP é usado internamente pelo IP para fornecer informações sobre as transmissões e sobre os erros. Para se ter uma idéia, o ICMP pode ser enviado quando um datagrama não consegue chegar no destino, quando o gateway não tem capacidade de buffering para encaminhar (forward) um datagrama, quando o gateway redireciona a origem para enviar o tráfego por uma outra rota etc.
O IP e UDP, por exemplo, não foram projetados para serem confiáveis. Assim, o ICMP prover um feedback sobre os problemas na comunicação, mas não tem o intuito de torná-los confiáveis. Na maioria das vezes o ICMP reporta erros, mas também é muito utilizado para verificar se um determinado host está ativo (comando “ping”).
O cabeçalho e os dados ICMP são transportados dentro da área de dados do pacote IP. Apesar de cada tipo de pacote ICMP ter um formato único, todos começam com os mesmos três campos: type, code e checksum. Ele é composto de 4 bytes mais uma parte que depende do tipo do pacote ICMP.
O ICMP echo request e o echo reply são usados para determinar se uma estação está ativa. Ao se enviar uma requisição echo request a um destino, este deve responder com um echo reply. Um comando muito utilizado para realizar essa tarefa é o ping. Geralmente, em linha de comando de um Sistema Operacional, se digita o comando ping e endereço IP (ex: ping 10.0.0.1), sendo exibida na tela informações sobre a estação de destino (10.0.0.1). Essas informações indicam qual é o estado do destino. A seguir é apresentado o pacote ICMP echo request, o echo reply e em seguida o conceito de cada campo, sendo realizada uma síntese de acordo com Tanenbaum (1997); Diógenes (2004); Comer (1998); Firewall.cx [200-?]; Postel (1981b):
Fonte: Postel (1981b, p. 14) adaptado.
- Type: indica a finalidade do pacote ICMP. Se contiver 8, é uma requisição (echo request). Se o conteúdo for 0, é uma reposta (echo reply). Este campo é de 8 bits;
- Code: não é utilizado e deve conter o valor 0. Este campo é de 8 bits;
- Checksum: verifica a integridade do pacote ICMP. Este campo é de 16 bits;
- Identifier: identifica unicamente uma seqüência de requisições e respostas ICMPs enviada. Se esta seqüência for interrompida e reinicializada, o identificador deve ser diferente. Este campo é de 16 bits;
- Sequence number: associa uma requisição com um reposta. Este campo é de 16 bits;
O ICMP destination unreachable é enviado quando um roteador ou uma estação não consegue entregar um datagrama. Dentre as vária possibilidades, isso pode acontecer quando um roteador não sabe quem é o destino ou quando o bit DF do datagrama IP está ligado e a rede de destino precisa fragmentar o datagrama. A seguir é apresentado o pacote ICMP destination unreachable e em seguida o conceito de cada campo, sendo realizada uma síntese de acordo com Tanenbaum (1997); Diógenes (2004); Comer (1998); Firewall.cx [200-?]; Postel (1981b):
Fonte: Postel (1981b, p. 4) adaptado.
- Type: indica a finalidade do pacote ICMP. Se contiver 3 mostra que o pacote não pode ser entregue. Este campo é de 8 bits;
- Code: especifica o motivo que causou a não entrega do pacote. O 0 é para rede não alcançável, o 1 é para host não alcançável, o 2 é para protocolo não alcançável, o 3 é para porta não alcançável, o 4 é para a necessidade de fragmentação, o 5 é para falha na rota (caminho) de origem etc. Este campo é de 8 bits;
- Checksum: verifica a integridade do pacote ICMP. Este campo é de 16 bits;
- Unused: não utilizado e deve conter zeros. Este campo é de 32 bits;
- Internet header + 64 bits of original data datagram: contêm o cabeçalho IP, mais 64 bits dos dados do datagrama anteriormente enviado pelo transmissor. Dessa maneira, indica a ele qual o endereço IP que está inacessível e pode ser usado pelos administradores de rede para resolução de problemas;