# IP TCP TCP / IP # Volume detalhada 1: Protocolo - Capítulo 6 ICMP: Internet Control Message Protocol

6.1 Introdução

ICMP é muitas vezes considerado uma parte da camada IP. Ele se comunica mensagens de erro e outras informações que precisa de atenção. pacotes ICMP são normalmente enviados a camada IP ou o protocolo de camada superior (TCP ou UDP). Alguns pacotes ICMP a mensagem de erro é devolvido ao processo de usuário.

pacotes ICMP são transmitidos dentro de datagramas de IP como 6--1 na FIG.

Ver ICMP especificação formal de RFC 792 [Posterl1 9 8 1 b].

formato de pacote ICMP da FIG 6 - A Fig. 2. Os primeiros 4 bytes de todos os pacotes são as mesmas, mas o resto dos outros bytes são diferentes uns dos outros. Aqui vamos apresentar um por um os vários formatos de mensagem.

campo tipo pode ter valores diferentes 15, para descrever um tipo particular de pacote ICMP. Alguns também usar o campo pacote ICMP valores são substituídos para descrever várias condições.

O campo checksum abrange toda a pacotes ICMP. O algoritmo usado Descrição na Seção 3.2 no mesmo algoritmo de soma de verificação de cabeçalho IP. ICMP checksum é necessário.

Neste capítulo, discutiremos as mensagens ICMP em geral, e como parte de detalhes: endereço máscara pedido e resposta, solicitação de timestamp e responder e porta inacessível. Vamos detalhar Capítulo 27 em resposta a um pedido P ing procedimentos utilizados e a mensagem de resposta e Capítulo 9 pacote ICMP processamento de roteamento IP.


6,2 ICMP do tipo de pacote

Vários tipos de pacotes ICMP FIG 6--3 mostrado, tipos diferentes determinados pelo campo de tipo de mensagem e um campo de código.

A figura das duas últimas colunas indicam a mensagem ICMP é uma mensagem de consulta ou uma mensagem de erro. Por causa de mensagens de erro ICMP às vezes requer tratamento especial, por isso temos de distinguir entre eles. Por exemplo, quando a mensagem de erro ICMP em resposta, nunca vai gerar outra mensagem de erro ICMP (se não há nenhuma regra restrição, você pode encontrar um erro produziu outro caso de erros, e, em seguida, gerar um erro e erro, por isso, o ciclo continua indefinidamente).

Ao enviar um pacotes de erro ICMP, pacote contém sempre o cabeçalho IP e os primeiros 8 bytes para gerar o erro ICMP do datagrama IP. Assim, o módulo recebe a mensagem que vai de erro de ICMP (determinada de acordo com os datagramas IP encapsulado protocolo ICMP cabeçalho campo 6-1 da FIG dentro de datagramas de IP) com um determinado protocolo de processos e de utilizador (tal como contida no datagramas IP nos primeiros oito bytes do cabeçalho de pacotes TCP ou UDP no número de porta TCP ou UDP é determinada ligação). Secção 6.5 descrito ponto vai ser exemplificada.

As seguintes situações não irá resultar em uma mensagem de erro ICMP:

  • 1) mensagem de erro ICMP (no entanto, as mensagens de consulta ICMP podem gerar mensagens de erro ICMP).
  • 2) o endereço de destino é um endereço de transmissão (veja a Figura 3--9) ou endereço de multicast (endereço de classe D, veja a Figura 1--5) datagrama IP.
  • 3) como um link de dados de mensagens de camada de transmissão.
  • 4) da primeira folha não é fragmento de IP (o fragmento descrito na Secção 11.5).
  • 5) um endereço de origem pacote de dados não é um único host. Isto é, o endereço de origem não pode ser zero endereço, um endereço de auto-retorno, um endereço de broadcast ou um endereço de multicast.

Estas regras permitem o passado para evitar mensagens de erro ICMP em resposta a pacotes de transmissão causadas por tempestades de broadcast.
 


solicitação de máscara 6,3 endereço ICMP e resposta

ICMP endereço máscara pedido para adquirir o seu próprio sistema diskless máscara de sub-rede durante o processo de inicialização (Seção 3.5). O sistema transmite seu ICMP pedido de pacotes (sistema RARP processo sem disco obtém um endereço IP utilizado no processo de boot são semelhantes). Outro sistema diskless maneira de obter a máscara de sub-rede é o protocolo BOOTP, vamos apresentar no primeiro capítulo 6. ICMP pedido máscara de endereço e pacote de resposta formato é mostrado 6--4 na FIG.


 

identificador de mensagem de ICMP e um conjunto campo de número de sequência arbitrariamente seleccionado pelo remetente, os valores são devolvidos na resposta. Assim, o remetente pode solicitar uma resposta a ser correspondido.

Podemos escrever um programa simples (chamado icmpaddrmask), ele envia uma máscara de endereço mensagem de solicitação ICMP, em seguida, imprimir todas as respostas. Como a mensagem de solicitação geral é enviado para o endereço de broadcast, por isso vamos fazer o mesmo. endereço de destino (... 1402521363) é o endereço de sub-transmissão 1402521332 (ver FIG 3--12) ....

sun % icmpaddrmask 140.252.13.63
received mask = ffffffe0, from 140.252.13.来3自3 本 机
received mask = ffffffe0, from 140.252.13.来3自5 b s d i
received mask = ffff0000, from 140.252.13.来3自4 s v r 4

Nós notou pela primeira vez na saída é retornado da máscara de sub-svr 4 é errado. Claramente, embora svr 4 interfaces ter definido a máscara de sub-rede adequada, mas SVR 4 está retornando a máscara endereço de classe B geral, sub-rede, como se ela não existisse.

svr4 % ifconfig emd0
emd0: flags=23<UP,BROADCAST,NOTRAILERS>
inet 140.252.13.34 netmask ffffffe0 broadcast 140.252.13.63

existe processo SVR4 ICMP máscara de endereço de erro procedimento de pedido.

Encaramos a situação usando tcpdump no BSDI hospedeiro, saída FIG 6--5 na FIG. Nós usamos a opção -e para ver o endereço de hardware.

Note-se que, embora a linha não pode ver nada, mas o envio de acolhimento pode receber a resposta ICMP sol (com o acima "de um local" linha de saída). Esta é uma característica geral da radiodifusão: o envio de acolhimento também através de algum mecanismo de auto-retorno interna para receber uma cópia da mensagem de broadcast. Desde o termo "radiodifusão" é definido para se referir a todos os hosts na rede local, ele deve ser incluído, incluindo o envio de acolhimento (ver Figura 2 - 4, quando o motorista Ethernet reconhece que o endereço de destino é um endereço de transmissão, o pacote é enviado rede, enquanto que uma cópia é a interface de auto-retorno).

Em seguida, BSDI para transmitir a resposta, o SVR. 4, mas apenas a resposta para o solicitante. Normalmente, o endereço deve ser um endereço de resposta unicast, a menos que o final do endereço IP pedido fonte de 0.0. 0.0. A presente forma de realização não é o caso, por conseguinte, a resposta para o endereço de difusão é um erro BSD interno / 3 8 6 em.

regulamentos RFC, a menos que o sistema é uma máscara de endereço de um agente autorizado, caso contrário ele não pode enviar uma resposta máscara de endereço (para se tornar um agente autorizado, deve ser especialmente configurado para enviar a resposta. Veja o Apêndice E). Mas, como podemos ver neste exemplo que, na maioria host envia uma resposta quando recebe um pedido, até mesmo alguns do principal
equipamento também envia resposta de erro.

O último ponto pode ser ilustrado pelos exemplos seguintes. Nós enviar um pedido de máscara de endereço para o endereço IP local e endereços de loopback são:

sun % icmpaddrmask sun
received mask= ff000000, from 140.252.13.33
sun % icmpaddrmask localhost
received mask= ff000000, from 127.0.0.1

Retorna a máscara de endereços em ambos os casos é o endereço de auto-retorno correspondente a, isto é, Classe A endereço 127. 0.0 1. Além disso, a partir da Fig. 2 - 4 pode ser visto, os pacotes de dados enviados para os endereços IP locais (1402521233 ...) Na verdade enviados para a interface de auto-retorno. ICMP máscara endereço de resposta deve ser recebido de uma interface de máscara de sub-rede pedido (Isso ocorre porque o anfitrião multi-interface de cada interface tem uma máscara de sub-rede diferente), a solicitação de máscara de endereço em ambos os casos a partir da interface de auto-retorno .


6,4 ICMP timestamp pedido e resposta

pedido ICMP timestamp permite que o sistema para verificar o tempo atual para o outro sistema. O valor de retorno é o número recomendado de milissegundos após a meia noite, tempo coordenado unificada (Tempo Universal Coordenado, UTC) (manual de referência cedo para UTC como Greenwich Mean Time). Esta vantagem pacote ICMP é que ela fornece resolução de milisegundos, enquanto o uso de outros métodos do tempo (tal como comando rdate algum sistema nix L fornecido) para se obter outros hospedeiros para fornecer apenas a segunda classe resolução. Desde o tempo de retorno é calculado a partir de meia-noite, de modo que o chamador deve saber a data atual por outros meios, que é um dos seus inconvenientes.

formato ICMP pedido timestamp e pacote de resposta mostradas na FIG 6-6 mostrado na FIG.


 

O solicitante para preencher o timestamp originam , em seguida, enviar a mensagem. sistema de atendimento recebe um pedido para preencher o pacote de carimbo de tempo é recebida , a hora de transmissão ao enviar a resposta . No entanto, na prática, para alcançar a maior parte dos dois últimos domínios são ajustados para o mesmo valor (devido a três domínios está previsto que permite que o remetente calcula o tempo e o tempo de transmissão das respostas pedido de transmissão).


6.4.1 Exemplos

Podemos escrever um programa simples (chamado icmptime), solicitação de timestamp ICMP é enviado para um host, e imprimir uma resposta retornado. Ele roda em nossa pequena Internet da seguinte forma:

programa ICMP pacotes imprime as três marcas de tempo: iniciando um carimbo de tempo (orig), recebendo carimbo de tempo (o recv) e um carimbo de tempo de transmissão (xmit). Como nós neste exemplo e nos exemplos seguintes vimos, todos os anfitriões recebem e marcas de tempo de transmissão são definidos para o mesmo valor.

Nós podemos calcular o tempo de ida e volta (RTT), o seu valor é o valor da hora do valor altura em que a resposta é recebida menos enviar o pedido. diferença de valor é para receber um valor timestamp menos o valor originam timestamp. A relação entre estes valores na Figura 6 - a Fig. 7.

Se acreditamos no valor do RT T, e metade acreditava RT T para transmissão de pacote de solicitação, ea outra metade para a transmissão mensagem de resposta, a fim de torná-lo compatível com o relógio local e consultar o relógio do host, necessidades relógio local a ser ajuste, o valor de ajuste, é a metade diferença de menos de RT T. No exemplo anterior, relógio BSDI é mais lento do que o sol relógio 7 ms e 8 ms.

Uma vez que os valores de timestamp é calculado o número de milissegundos desde a meia-noite, isto é, UTC, que deve ser sempre inferior a 86 400 000 (2 × 4 6 0 0 6 × × 1 0 0 0). Estes exemplos são a 4: Executar 00 antes de, e uma zona de tempo lento de 7 horas, a UTC, valorizam que 82800000 (2.300 horas) é maior justificado.

Repita várias vezes se o anfitrião BSDi executar o programa, descobrimos que para receber e timestamp de transmissão do último dígito é sempre 0. Isso ocorre porque a versão do software (0.9. Versão 4) só pode fornecer 1 0 ms resolução de tempo (ver instruções Apêndice B).

Se o host svr 4 para executar o programa duas vezes, encontramos os três últimos dígitos do SVR4 timestamp são sempre 0:

Por alguma razão, SVR 4 resolução de milissegundos não é fornecido no timestamp ICMP. Assim, os segundos ajustamento da diferença horária não terá nenhum efeito.

. Se nós executar o sub-programa 140 252 1 em outros hospedeiros, em que um resultado hospedeiras mostram que a diferença entre o relógio e os dom 37 segundos, enquanto outro relógio principal diferença de quase 75 segundos .:

Um outro exemplo interessante é um roteador portal (um C ISCO roteador). Isso mostra que, quando o sistema retorna um valor timestamp fora do padrão (não o número de milissegundos desde a meia-noite de cálculo, UTC), é com o bit timestamp de alta ordem de 32 representados. Nosso programa detecta isso e imprimir o valor timestamp recebido transmitido (depois de desligar o alto) entre parênteses em ângulo. vez mais, a iniciação não pode ser calculada entre a diferença e receber timestamps, já que eles são unidades.

Se estiver executando em que hospedam o programa várias vezes, será óbvio que os valores têm milissegundo resolução, e é o número de milissegundos, contados a partir de um ponto de partida, mas o ponto de partida não é meia-noite, UTC (por exemplo, possível é o número de milissegundos a partir de quando o roteador começa a contar o guia).

Como exemplo final, vamos comparar sol é conhecido por ser o relógio do sistema precisa - um servidor NT Pstratum 1 (vamos dizer mais sobre NTP, Network Time Protocol).

Se calcularmos a diferença de menos de metade RT T, os resultados indicam que o relógio do sol é mais rápido 3 8. 5 ~ 51,5 ms.


6.4.2 Outro método

Outro método também pode ser utilizado para obter o tempo e a data.

  • 1) na Seção 1. 12 descreve os programas e serviços de serviços de data e hora. O primeiro é um formato legível retorna a data atual e tempo, uma linha de caracteres ASCII. Este serviço pode ser verificada usando o comando telnet: Por outro lado, o serviço de tempo retorna um valor binário com 3 2 bit, mostrando a partir de UTC, o número de segundos em Janeiro de 1900 a data da meia-noite. Este programa baseia-se na data e hora em segundos prestados (que mencionamos anteriormente o comando rdate usa o serviço de tempo de TCP).
  • 2) temporizador rigorosa utilizando Network Time Protocol (NTP), é feita uma descrição do protocolo [M doente s1 9 9 2] no RFC 1305. Este protocolo usa tecnologias avançadas para garantir o erro do relógio milissegundo dentro de um grupo de sistemas na LAN ou WA N. Computer tempo preciso o leitor interessado deve ler este RFC.
  • 3) Open Software Foundation (OSF) Distributed Computing Environment (DCE) define o serviço de tempo distribuído (DTS), ele também fornece sincronização do relógio entre computadores. Documento [R osenbe rg, Kenney e Fisher 1992] fornecer detalhes adicionais da descrição do serviço.
  • 4) Sistema de nix U fornecendo Berkeley daemon cronometrado (8), para sincronizar o relógio do sistema na LAN. Ao contrário de NTP e DTS, cronometrado não funciona dentro do intervalo de WAN.


6,5 porta ICMP erro inacessível

As duas últimas seções iremos discutir as mensagens ICMP de consulta - máscara de endereço e consultas timestamp e respostas. Agora Análise de uma mensagem de erro ICMP, o porto inacessível mensagem, é destino ICMP pacotes OSPF inacessíveis, a fim de ver se a mensagem de erro ICMP como informação adicional. Use UDP (ver Capítulo 11) para visualizá-lo.

UDP é uma das regras, se você receber um datagrama UDP e a porta de destino não corresponde a um processo está usando, em seguida, retorna uma mensagem inacessível UDP ICMP. TFTP pode ser utilizado para forçar uma mensagem inacessível porta (TFTP descrito no Capítulo 15).

Para servidores TFTP, número de porta UDP comum é 69. Mas a maioria dos programas cliente TFTP permitir que um comando de conexão para especificar um número de porta diferente. Aqui, podemos usá-lo para especificar porta 8888:

Primeiro comando de conexão para especificar o nome do host eo número da porta para conectar-se, seguido por um comando get para obter o arquivo. Depois de digitar o comando get um datagrama UDP enviado para a porta 8888 no computador host 4 SVR. Tcpdump resultados de troca de pacotes de saída são mostradas 6--8 na FIG.

Antes dos dados UDP submetidos a SVR4, primeiro envie um pedido ARP para determinar o endereço de hardware (linha 1). Em seguida, retorna uma resposta ARP (linha 2), em seguida, envia um datagrama UDP (linha 3) (pedido reservados ARP e de resposta no tcpdump saída para nos lembrar que essas mensagens podem ser trocados em um primeiro datagrama IP do antes de um host envia para outro host é necessária. em capítulos posteriores deste livro, se essas mensagens não estão relacionados com os temas discutidos, então vamos salvar
omitido-los).

Uma porta ICMP inacessível é imediatamente devolvido (linha 4). No entanto, o cliente TFTP parece ignorar o pacote ICMP, e depois de 5 segundos mais tarde, o envio de outro datagrama UDP (linha 5). Antes de dar-se a reenviar cliente três vezes.

Note-se que, as mensagens ICMP são trocados entre o hospedeiro, em vez de um número de porta de destino e cada datagrama UDP de 20 bytes são transmitidos a partir de uma porta específica (2924) para uma outra porta específica (8 888).

Seguiu-se o número de UDP 20 refere-se a cada um o comprimento dos dados do datagrama UDP. Neste exemplo, de 20 bytes, incluindo 2 bytes do código de operação TFTP, 9-byte nulo terminada nome Temp. Foo, e 9-byte cadeia netascii terminada com nulo (TFTP o formato detalhada do pacote Referindo a Fig 15--1).

Se - e opção para executar o mesmo exemplo, podemos ver que cada retornou porta ICMP inacessível pacotes completos. Este comprimento é de 70 bytes, e é atribuído na FIG 6-9 mostrado na FIG.

Uma regra ICMP é, a mensagem de erro de ICMP (ver Fig. 6 - a última um 3.) Deve ser incluído que gera a mensagem de erro de pacotes de dados de IP de cabeçalho (que não contém opções), também deve conter, pelo menos, precedido por trás no cabeçalho IP 8 bytes. No nosso exemplo, com a primeira porção de trás dos primeiros 8 bytes de cabeçalho contém o UDP IP (ver a FIG 11--2).

Um fato importante é que o conteúdo contido no cabeçalho do número da porta de origem UDP e porta de destino número. É este número de porta de destino (8888) só resultou em mensagem de erro inacessível porta ICMP. ICMP sistema recebe um utilizador particular pode ser associado com o processo (no presente exemplo cliente TFTP) de acordo com o número da porta de origem (2924) da mensagem de erro.

Causas erros nos pacotes de dados de IP de cabeçalho para ser devolvido está incluído porque o protocolo campo de cabeçalho IP, de modo a que o ICMP sabem interpretar os últimos 8 bytes (na presente forma de realização o UDP cabeçalho). Se considerarmos o cabeçalho do TCP (Figura 17--2), pode ser encontrada nos números de porta de origem e de destino são contidas nos oito primeiros bytes do cabeçalho do TCP.

O formato geral de pacotes ICMP inacessíveis FIG 6--10 FIG.

Na Figura 6 - 3, nota-se que existem 16 tipos diferentes de pacotes ICMP inacessíveis, códigos de 0 a 15, respectivamente. porta ICMP código de erro é inacessível 3. Além disso, embora a FIG 6--10 indicado no pacote ICMP na segunda palavra de 32 bits deve ser de 0, mas quando o código é 4 ( "fragmentação necessária, mas não faz os bits de fragmentos definidos"), de MTU do caminho mecanismo (secção 2.9), mas permite que a interface router para preencher o exterior MTU inferior 16 bit da palavra de 32 bits. Damos um exemplo desse erro em 11,6 em.

Embora as regras ICMP permitem que o sistema retornar mais de 8 bytes de dados para gerar um erro no datagrama IP, mas a maioria dos sistemas derivado de Berkeley retorno apenas 8 bytes. Retorna os primeiros 64 bytes de (E. Seção 4) sob condições ipicmpreturndatabytes opção padrão no Solaris 2.2.

séries temporais tcpdump

Ao longo do texto, também damos uma série temporal do formato de saída tcpdump, como mostrado na FIG 6--11 FIG.

Com o tempo é incrementado para baixo, a saída está no lado esquerdo da FIG saída tcpdump carimbo de tempo da mesma (ver Fig. 6 - 8). Localizado no topo da marca figura é a comunicação de ambos o nome de host e número de porta. Note-se que, para baixo a página y eixos de coordenadas e o verdadeiro valor não é proporcional ao tempo. Quando há um período significativo de tempo, uma retransmissão é entre cada 5 segundos no presente exemplo, que marcou em ambos os lados da linha do tempo. Quando os dados UDP ou TCP está sendo transmitido, usamos uma linha mais grossa para representar.

Quando o pacote ICMP é devolvido, por que o cliente TFTP pedido keep retransmissão isso? Isto é devido a um fator em programação de rede, sistema BSD que não é os pacotes de dados ICMP UDP recebidos do soquete (socket) para notificar o usuário do processo, a menos que o processo tenha enviado um comando para ligar à tomada. cliente padrão BSD TFTP não envia um comando de conexão, por isso nunca notificado pacotes de erro ICMP.

Outro ponto a salientar aqui é usado pelo cliente TFTP não é um algoritmo bom retransmissão timeout. Assume-se apenas que 5 segundos é suficiente, e, por conseguinte, retransmite a cada 5 segundos para um total de 25 segundos necessários. Mais tarde veremos um algoritmo de retransmissão tempo limite boa TCP.

algoritmo de retransmissão tempo limite usado pelo cliente TFTP é proibido pela RFC. No entanto, ainda está em uso em todos os três sistemas sobre os autores e Solaris 2.2. AIX 3.2.2 aplica-se uma retirada exponencial para o valor limite de tempo, respectivamente, quando o envio de pacotes 0,5,1 5 e 35 segundos, o que é o método recomendado. Vamos discutir a questão de horas extras em mais detalhes no Capítulo 21.

Finalmente, deve-se salientar que, ICMP mensagens são enviadas datagrama UDP retornou cerca de 3,5 ms após o tempo de ida e volta que vimos no capítulo 7 do P ing respostas semelhantes.


6,6 ICMP BSD 4.4 processamento de pacotes

Desde que cobre uma ampla gama de ICMP, a partir das informações de erro para um erro fatal, mesmo que em uma determinada implementação do sistema, cada processamento de pacotes ICMP são diferentes. Conteúdo e 12 na Fig. 6 - - 3 são as mesmas, que mostra o método de processamento 4 4 sistemas BSD para cada possível pacotes ICMP 6 A FIG.


 

Se o último marcado como "core", o ICMP serão tratadas pelo kernel. Se o último indica "processo usuário", então a mensagem é transferida para todos os processos de usuários registrados no kernel para ler os pacotes ICMP recebidos. Se qualquer processo de usuário não existir, a mensagem será descartada silenciosamente (Estes processos de usuário também receberá uma cópia de todos os pacotes ICMP outros tipos, embora eles devem ser manipulados pelo kernel, é claro, apenas no processamento de núcleo processo de usuário mais tarde para receber estas mensagens). Algumas mensagens completamente ignorado. Finalmente, se indicado na última coluna é uma cadeia de caracteres entre aspas, então é o erro nix U correspondente. Alguns erros, como o TCP do processamento do lado de transmissão fechado, eles serão discutidos em seções posteriores.


6,7 Resumo

Este capítulo foi discutido em I nternet Cada sistema deve incluir protocolo de mensagem de controle. Figura 6--3 listas de todos os tipos de mensagens ICMP, a maioria dos quais serão discutidas em capítulos posteriores.

Discutimos detalhadamente o endereço máscara pedido ICMP e responder eo pedido timestamp e resposta. Estes são pedido típico - mensagem de resposta. Tanto o identificador de mensagem de ICMP e número de sequência em ambos. Enviando final memória de campo identificador de aplicação em um número único para distinguir a resposta de outros processos. O número sequencial campo para que o cliente pode solicitações e respostas entre correspondido.

Também discutimos a porta ICMP de erro inacessível, um erro comum ICMP. ICMP mensagem de erro é retornada ao analisados: causa um erro de cabeçalho datagrama IP e os subsequentes 8 bytes. As informações para o destinatário do erro ICMP é necessário, você pode aprender mais sobre as causas dos erros. Isso ocorre porque TCP e número de porta de origem UDP e armazenados no número da porta de destino no cabeçalho de seus primeiros 8 bytes.

Finalmente, pela primeira vez, ele mostra a saída tcpdump cronologicamente. Esta representação será usado freqüentemente nos próximos capítulos deste livro.

Publicado 170 artigos originais · Louvor obteve 207 · Visualizações 4,59 milhões +

Acho que você gosta

Origin blog.csdn.net/xiaoting451292510/article/details/103281565
Recomendado
Clasificación