quarta-feira, 20 de dezembro de 2017

Entendendo o funcionamento do comando tracert

Tracert é uma ferramenta de diagnóstico ponto a ponto que utiliza o protocolo ICMP e o campo TTL e para determinar e testar o caminho que os datagramas IP seguem quando são transmitidos entre origem e destino.

Assim como o comando “ping”, ele atua na camada 3 do modelo de referência OSI.

O campo TTL (Time to Live) é um campo de 8 bits cujo o valor padrão varia entre os diversos sistemas operacionais existentes, sendo comuns os valores 128 para sistemas operacionais Windows e 64 para sistemas baseados em Linux. Pelo menos em sistemas operacionais Microsoft, esse valor pode ser alterado conforme necessidade.

O propósito do TTL é determinar o tempo de vida de um datagrama, impedindo que o mesmo trafegue na rede indefinidamente.

Utilizando o comando tracert, toda vez que um datagrama chega a um roteador o TTL é decrementado em um antes de ser encaminhado adiante.

Quando um roteador recebe um datagrama cujo TTL é igual a 0 (zero), ele não o encaminhará mais. O roteador descartará o pacote e enviará de volta ao host de origem uma mensagem ICMP do tipo “Tempo Excedido”.

Essa mensagem contém o endereço IP do roteador como endereço de origem e esse é o mecanismo de funcionamento do comando tracert.

O tracert possui como característica o envio de um datagrama com um TTL igual a 1 ao host de destino. Ao encontrar o primeiro rotador no caminho, esse TTL é decrementado, ficando com o valor zero (TTL 0).

Consequentemente o datagrama é descartado e a mensagem ICMP "Tempo Excedido", é enviada de volta à origem. Lembrem-se de que essa mensagem, possui o endereço IP do roteador e dessa forma, o primeiro roteador no caminho foi identificado.

Então, o tracert enviará um novo datagrama, com o TTL igual a 2, que passará pelo primeiro roteador, que o decrementará para 1, e então será descartado no segundo roteador. Dessa forma o endereço IP do segundo roteador também será identificado.

Esse processo é continuo até que o datagrama chegue (ou não) ao host de destino.

Ao chegar no host de destino, ainda que o TTL do datagrama seja igual a 1, ele não será descartado e, consequentemente a mensagem ICMP “Tempo Excedido” não será enviada.

Neste caso, no que se refere a sistemas operacionais Microsoft, serão enviados datagramas ICMP do tipo “Echo Request” (Ping) e se o dispositivo de origem receber uma resposta do tipo “Echo Reply”, ele saberá que o pacote chegou a seu destino.

Em sistemas operacionais Microsoft, o comando tracert possui parâmetros adicionais que podem ser obtidos digitando em um prompt de comandos o comando tracert /?.

Abaixo, exemplo em sistema operacional Windows 10 Pro.





Conforme imagem, os endereços dos roteadores por onde os pacotes passaram até chegar ao destino especificado são mostrados. 

A primeira coluna contém o número de sequência do salto. As três colunas seguintes mostram os RTTs (Round Trip Times) das mensagens enviadas (o traceroute envia três mensagens por padrão para cada salto). A última coluna mostra os endereços IP dos roteadores descobertos na rota.

Assim, espero ter contribuído para o enriquecimento técnico dos leitores.

quarta-feira, 18 de outubro de 2017

Entendendo o funcionamento do comando PING

Durante uma das fases (entrevista técnica) do processo seletivo para PFE na Microsoft, me foi solicitado explicação sobre o funcionamento do comando ping.

O que ocorre "por baixo dos panos" quando disparamos um ping de um host para outro?

Felizmente eu sabia responder e tive que fazê-lo de forma "resumida". Vamos lá ...

O ping é um comando utilizado para testes de conectividade entre dois hosts, que utiliza o protocolo ICMP (Internet Control Message Protocol), que por sua vez atua na camada 3 do modelo OSI (Rede).

Quando "disparamos" um ping de um host para outro, é enviado uma mensagem ICMP do tipo "Echo Request" (tipo 8) e espera-se receber uma mensagem Echo Reply (Tipo 0).

Quando a mensagem do tipo Echo Reply é recebida, é exibido o calculo do TTL (Time to Live), RTT (Round Trip Time), erros e perda de pacotes.

O TTL é responsável por impor limites à transmissão de um pacote, de modo a não permitir que esse trafegue indefinidamente. Ele define o tempo máximo de vida de um pacote.

A cada roteador pelo qual o pacote passa em busca de seu destino, o valor de TTL sofre um decréscimo. Ao chegar a zero, o pacote é descartado enviando um pacote ICMP "Time Exceeded".

Conforme abaixo, cada sistema operacional possui um valor de TTL padrão. Isso nos permite inclusive identificar qual sistema operacional está respondendo ao ping.

Sistemas operacionais Microsoft => TTL 128
Sistemas operacionais Linux => TTL 64
Sistemas operacionais Unix => TTL 255

OBS: Ao menos em sistemas operacionais Microsoft é possível alterar o valor de TTL padrão através da inserção da chave de registro do tipo DWORD denominada  "DefaultTTL" com valor decimal em  HKLM\System\CurrentControlSet\Services\tcpip\Parameters. Para que a alteração surta efeito, é necessário reiniciar o Sistema Operacional.

Abaixo um exemplo do comando ping com destino a google.com.br.


Resultado do comando ping

Partindo do pressuposto de que o valor de TTL do servidor que respondeu ao ping acima evidenciado não tenha sido alterado, podemos deduzir que:

1-) Trata-se de um servidor Linux (TTL 64, mais próximo de 56);
2-) Para chegar ao destino, o pacote passou por 08 roteadores (64-56)

O cálculo do RTT é efetuado armazenando a hora de envio do pacote Echo Request na área de dados da mensagem ICMP. Quando o Echo Reply é recebido, ocorre a subtração (Echo Reply - Echo Request).

Com essa breve explicação, espero ter contribuído para o enriquecimento técnico e conceitual de vocês.

Um abraço e até a próxima postagem.