Wireshark - Parte 2 - Analisando a Performance da Rede e Identificando Problemas
por
em 09-01-2013 às 20:05 (30285 Visualizações)
Quem nunca precisou identificar problemas na rede e gastou horas revisando tudo que foi feito? As vezes, nos esquecemos de verificar o básico e ficamos criando possibilidades super complexas. Nesse contexto, vou utilizar uma metáfora bem simples para exemplificar a questão: Quando uma pessoa está doente o que o médico faz? Tudo se inicia com um questionário ao paciente, certo? Pois é, para analisar a rede é a mesma coisa, a rede seria o paciente, e nós seriámos o médico. A grande pergunta agora é: Como você pergunta algo para a rede? Bem.. não se pergunta, ao menos diretamente; nós apenas escutamos o tráfego e a partir daí, tentamos diagnosticar o problema.
Antes de continuar com o artigo gostaria de deixar claro que muitos termos utilizados estarão em inglês, pois é assim que você encontrará na maior parte das documentações disponíveis, e sinceramente, muitas delas traduzidas ficam horríveis (pelo menos para mim). O Wireshark provê uma gama de funcionalidades muito extensa e muitas delas são extremamente úteis, porém pouco conhecidas.
Veremos agora o que no Wireshark é chamado de “Expert info”. O expert info na verdade, é um log de todas as anomalias encontradas no tráfego capturado, como por exemplo, retransmissões, pacotes mal formados,etc. Para isso deixei previamente o Wireshark capturando o tráfego da minha máquina por alguns minutos enquanto navegava para ver o que aparecia. Após finalizar a captura, você precisa clica em Analyze > Expert Info Composite. Isto irá abrir uma janela com os dados encontrados.
Você pode clicar em qualquer um dos pacotes encontrados que ele irá, automaticamente, marcar este pacote na lista de captura como pode ser visto na imagem abaixo:
Com isso, você pode analisar melhor o pacote e tentar identificar a causa do problema, mas este foi apenas um exemplo para visualizar a ferramenta. O importante é entender cada uma das “Expert info” que você poderá encontrar, para isso veremos cada uma delas separadamente. Estas mensagens aparecem na lista de pacotes com a cor de fundo preta.
Agora, vamos analisar as mensagens possíveis:
Zero Window
Esta notificação indica que o pacote contém em seu cabeçalho o TCP window size com 0 e as flags RST ou FIN não estão definidas, o que deveria ocorrer para indicar o fim de uma conexão. Esta é uma indicação de que o receive buffer está cheio, mais nenhum dado pode ser recebido até que algum espaço seja liberado. Esta condição pode causar um incremento no delay dos pacotes.
Window is Full
Esta notificação indica que o pacote irá esgotar o espaço em buffer, disponível do lado que está recebendo o pacote.
Keep Alive
Esta notificação indica que um lado da comunicação está tentando manter uma conexão TCP ativa.
Window Update
Esta notificação indica que uma nova window size está sendo anunciada. Tipicamente, este pacote não contém nenhum dado, utiliza os mesmos números de sequência e ack do pacote anterior com um novo valor de window size.
Previous Segment Lost (Comum no início de uma captura)
Esta notificação indica que o pacote TCP anterior está faltando. Se você iniciar a captura no meio de um download, com certeza você terá este tipo de notificação. Você não deve ver este tipo de notificação a menos que haja perda de pacotes na rede, ou você tenha iniciado a captura no meio da transmissão como dito anteriormente. A “correção” deste tipo de problema inclui ACKs duplicados e a retransmissão de pacotes.
Retransmissions/Fast Retransmissions
Esta notificação indica que o pacote foi considerado como retransmitido. É definido por um pacote que contenha dados, tenha alterado seu sequence number e na sequência, deve haver dois ou mais ACKs duplicados na direção oposta. Estes ACKs duplicados devem conter o sequence number da retransmissão. Se a retransmissão ocorrer dentro de 20 milisegundos desde o último ACK duplicado, ele será considerado um Fast Retransmission. Se os ACKs forem perdidos na outra direção, o Wireshark vê que o pacote contém dados utilizando o mesmo sequence number e os marca como retransmissions.
Duplicate ACKs
Esta notificação indica que a comunicação perdeu um pacote durante a transferência de dados. Estes sequence numbers devem ser incrementados pelo número de bytes de dados contidos em cada pacote. Se um pacote chega com um sequence number 10.000 e 1460 bytes de dados, o próximo sequence number esperado é 11.460. Mas se o próximo pacote contém o sequence number 12.920, depois 14.380,etc, é enviada uma notificação que o pacote 11.460 está faltando. Isto é feito enviando vários ACKs com este sequence number no campo Acknowledgment Number.
O remetente deve receber 3 ACKs idênticos (um ACK normal e dois duplicados) antes de retransmitir o pacote. Um alto número de ACKs duplicados pode indicar problemas de latência e perda de pacotes. Conhecendo estes alertas já é possível detectar ou ao menos direcionar os esforços para identicar muitos dos problemas comuns de comunicação.
Outra funcionalidade muito boa do Wireshark é o IO Graph. Com ele, é possível ver graficamente o tráfego, e criar filtros para conseguir identificar quem é responsável pelo que. Para utilizar os gráficos basta clicar em Statistics > IO Graph, e isto irá abrir uma janela parecida com esta:
Como pode ser visto existem várias chaves que podem ser alteradas, mas neste caso, vamos focar apenas nos filtros. Podemos definir até 5 filtros distintos neste gráfico, cada um com uma cor diferente. A outra opção é o botão do lado direito inferior, nele é possível alterar a unidade do gráfico, para pacotes por segundo, bytes por segundo, bits,etc.
Na imagem vemos 2 picos de tráfego, o primeiro maior e um segundo menor. Agora vem a parte interessante: se você clicar na linha deste pico, na janela principal do Wireshark aparecerá qual é o pacote responsável por aquele ponto, veja a imagem
Se você voltar a tela principal do Wireshark ,você poderá analisar melhor os dados referente ao pacote. No meu caso, a porta de origem é 80 e a de destino 54832, indicando tráfego HTTP. Agora quero saber exatamente a que parte do gráfico este tráfego pertence; para isso, vou criar um filtro no IO Graph. O Graph1 que é a linha preta, é referente ao tráfego total, então vou criar o filtro no Graph2, o filtro utilizado será tcp.port == 80 (caso ainda não tenha visto a Parte 1 do artigo e não esteja familiarizado com os filtros clique aqui). Após digitar o filtro, basta clicar em cima do botão Graph2 que o gráfico será atualizado, como fica difícil visualizar o novo gráfico por ele ter sido sobreposto pelo antigo eu vou desabilitar o Graph1 clicando sobre o botão.
O resultado foi o seguinte:
Com isto, identificamos o responsável pelo primeiro pico, faltando o segundo. Para isso, basta reativar o Graph1 e repetir o processo de clicar sobre a linha e identificar o pacote na tela principal do Wireshark.
Neste exemplo a porta é a 3389, então vou criar o filtro na linha referente ao Graph3 com o conteúdo tcp.port == 3389. Novamente desabilito o Graph1, e deixo ativos o Graph2 e 3, o resultado é o gráfico com os 2 picos, o primeiro em verde e o segundo em vermelho.
Como podemos ver nesta última imagem conseguimos identificar visualmente e de forma simples os responsáveis pelo tráfego. Isto pode ser utilizado para identificar possíveis problemas na rede, por exemplo, latência na resposta, perda de pacotes,etc.
Neste artigo, utilizei o tráfego apenas da minha máquina, então obviamente não precisei me preocupar com outros hosts, mas no caso de uma rede real você poderia criar os filtros utilizando endereços ip em conjunto com a porta, para saber qual máquina é a responsável pelo tráfego.
Comentários
+ Enviar Comentário