Como solucionar problemas de desempenho de rede entre instâncias Linux ou Windows do EC2 em uma VPC e um host on-premises pelo gateway da Internet?

12 minuto de leitura
0

Existem problemas de perda ou latência de pacotes entre minhas instâncias do Amazon Elastic Compute Cloud (Amazon EC2) e o host local pelo gateway da Internet. Como posso solucionar esses problemas com o desempenho da rede?

Breve descrição

Para diagnosticar problemas de rede, como perda ou latência de pacotes, primeiro teste a rede para isolar a origem do problema. A resolução a seguir pode ajudar a determinar se a origem do problema é uma rede ou uma aplicação. É uma prática recomendada comparar os resultados de desempenho para que você possa compará-los ao observar os problemas de desempenho.

Antes de começar a solução de problemas:

  • Certifique-se de que os utilitários de rede estejam instalados nos dois endpoints (na instância do EC2 e no host on-premises).
  • Use uma instância do EC2 que ofereça suporte a redes aprimoradas e verifique se os drivers estão atualizados. A rede aprimorada fornece maior E/S com baixa utilização da CPU, o que ajuda a evitar problemas no nível da instância ao executar testes de desempenho. Se a rede aprimorada não estiver ativada, consulte Rede aprimorada no Linux ou Rede aprimorada no Windows.
  • Conecte-se à sua instância do EC2 para acessar as instâncias e verifique se há conectividade de ponta a ponta entre sua instância do EC2 e seu host on-premises.

Resolução

Instale as seguintes ferramentas para ajudar a solucionar problemas e testar sua rede:

  • AWSSupport-SetupIPMonitoringFromVPC para coletar métricas de rede, como perda de pacotes, latência, MTR, tcptraceroute e tracepath.
  • MTR para verificar se há perda de pacotes ICMP ou TCP e problemas de latência.
  • Traceroute para determinar problemas de latência ou roteamento.
  • Hping3 para determinar problemas de latência e perda de pacotes TCP de ponta a ponta.
  • Tcpdump para analisar amostras de captura de pacotes.

Analise os saltos nos relatórios traceroute ou MTR usando uma abordagem de baixo para cima. Por exemplo, verifique se há perda no último salto ou destino e, em seguida, revise os saltos seguintes. Se os problemas de perda ou latência de pacotes continuarem até o último salto, pode haver um problema de rede ou roteamento. A perda de pacote ou latência em um salto no caminho pode ocorrer se houver um problema com a limitação da taxa do ambiente de gerenciamento nesse nó. Verifique se o último salto relatado é o destino indicado no comando. Caso contrário, pode haver um problema causado por um grupo de segurança restritivo.

Teste o desempenho usando AWSSupport-SetupIPMonitoringFromVPC

Essa ferramenta integrada coleta muitas das métricas de que você precisa para solucionar problemas de sua rede. Para obter mais informações, consulte Ferramenta de depuração para conectividade de rede na Amazon VPC.

Solução de problemas de desempenho para instâncias Linux

Verifique as estatísticas de desempenho do Linux

Se você tiver acesso à instância de origem ou à instância de destino, verifique se há problemas com a CPU, a utilização da memória e a média de carga.

Teste o desempenho usando MTR

O comando MTR do Linux fornece uma saída contínua e atualizada. Essa saída permite analisar o desempenho da rede. Essa ferramenta de diagnóstico combina a funcionalidade dos utilitários traceroute e ping. A maioria das distribuições Linux vem com traceroute e MTR pré-instalados. Você também pode baixá-lo no gerenciador de pacotes de software da sua distribuição.

Para instalar o MTR, execute os seguintes comandos:

Amazon Linux:

sudo yum install mtr

Ubuntu:

sudo apt-get install mtr-tiny

Para testar o desempenho da sua rede usando o MTR, execute esse teste bidirecionalmente entre o endereço IP público de suas instâncias do EC2 e seu host on-premises. O caminho entre os nós em uma rede TCP/IP pode mudar se a direção for invertida. Portanto, é importante obter resultados do MTR para ambas as direções. Você pode usar um rastreamento baseado em TCP em vez de ICMP, porque a maioria dos dispositivos da Internet desprioriza as solicitações de rastreamento baseadas em ICMP.

Revise sua perda de pacotes. A perda de pacotes em um único salto geralmente não indica um problema. A perda pode ser o resultado de uma política do plano de controle que faz com que as mensagens de “tempo de ICMP excedido” sejam descartadas. Se você notar uma perda contínua de pacotes até o salto de destino, ou perda de pacotes em vários saltos, essa perda pode indicar um problema.

Observação: é comum ver algumas solicitações se esgotarem.

MTR baseado em ICMP:

mtr -n -c 200 <Public IP EC2 instance/on-premises host> --report

MTR baseado em TCP:

mtr -n -T -c 200 <Public IP EC2 instance/on-premises host> --report

O argumento -T executa um MTR baseado em TCP e a opção --report coloca o MTR no modo de relatório. O MTR é executado pelo número de ciclos especificado pela opção -c. Imprima as estatísticas e saia.

Observação: o MTR baseado em TCP testa a porta TCP 80 de destino para MTR, uma porta TCP de destino específica, anexada com -P, seguida pelo número da porta. Veja a seguir um exemplo da porta TCP 443 de destino do MTR:

mtr -n -T -c 200 <Public IP EC2 instance/on-premises host> -P 443 --report

Teste o desempenho usando o traceroute

O utilitário traceroute do Linux identifica o caminho percorrido de um nó cliente até o nó de destino. O utilitário registra o tempo em milissegundos para cada roteador responder à solicitação. O utilitário também calcula a quantidade de tempo que cada salto leva antes de chegar ao destino.

Para instalar o tracerout, execute os seguintes comandos:

Amazon Linux:

sudo yum install traceroute

Ubuntu:

sudo apt-get update
sudo apt-get install traceroute

Observação: o traceroute não é necessário se você executar um relatório MTR. O MTR fornece estatísticas de latência e perda de pacotes para um destino.

Certifique-se de que a porta 22 ou a porta que você está testando esteja aberta nas duas direções. Para solucionar problemas de conectividade de rede usando o traceroute, execute o comando do cliente para o servidor e do servidor de volta para o cliente. O caminho entre os nós em uma rede TCP/IP pode mudar se a direção for invertida. Use um rastreamento baseado em TCP em vez de ICMP (sua porta de aplicativo), porque a maioria dos dispositivos da Internet desprioriza as solicitações de rastreamento baseadas em ICMP.

Traceroute baseado em ICMP:

sudo traceroute -I <Public IP of EC2 instance/on-premises host>

Traceroute baseado em TCP:

sudo traceroute -n -T -p 22 <Public IP of EC2 instance/on-premises host>

O argumento -T -p 22 -n executa um rastreamento baseado em TCP na porta 22.

Observação: você pode usar a porta específica da sua aplicação para testes. Use a porta específica para entender se há algum dispositivo intermediário no caminho que esteja eliminando o tráfego da aplicação.

Teste o desempenho usando hping3

O hping3 é um montador e analisador de pacotes TCP/IP orientado por linha de comando que mede a perda e a latência de pacotes de ponta a ponta em uma conexão TCP. Além das solicitações de eco ICMP, o hping3 oferece suporte aos protocolos TCP, UDP e RAW-IP. O hping3 também inclui um modo traceroute que pode enviar arquivos entre um canal coberto. O hping3 foi projetado para escanear hosts, auxiliar em testes de penetração, testar sistemas de detecção de intrusão e enviar arquivos entre hosts.

MTRs e latência por salto de captura de traceroute. No entanto, o hping3 produz resultados que mostram latência mín/média/máx de ponta a ponta no TCP, além da perda de pacotes. Para instalar o hping3, execute os seguintes comandos:

Amazon Linux 2. Instale o pacote de versão EPEL para o RHEL 7 e, em seguida, ative o repositório EPEL.

sudo amazon-linux-extras install epel -y

Amazon Linux 2:

sudo yum --enablerepo=epel install hping3

Ubuntu:

sudo apt-get install hping3

O comando a seguir envia 50 pacotes SYN TCP pela porta 0. Por padrão, o hping3 envia cabeçalhos TCP para a porta 0 do host de destino, com um tamanho de janela de 64 e sem um sinalizador TCP:

sudo hping3 -S -c 50 -V <Public IP of EC2 instance/on-premises host>

O comando a seguir envia 50 pacotes SYN TCP pela porta 22:

sudo hping3 -S -c 50 -V <Public IP of EC2 instance/on-premises host> -p 22

Observação: certifique-se de que a porta 22 ou a porta que você está testando esteja aberta.

Teste amostras de captura de pacotes usando tcpdump

É uma prática recomendada realizar capturas simultâneas de pacotes na instância do EC2 e no host on-premises ao diagnosticar problemas de perda/latência de pacotes. Isso pode ajudar a identificar os pacotes de solicitação e resposta para que possamos isolar o problema nas camadas de rede e da aplicação. Também é uma prática recomendada iniciar primeiro a captura de pacotes e depois iniciar o tráfego. Isso ajuda a capturar todos os pacotes para o fluxo. Para instalar o tcpdump, execute os seguintes comandos:

Amazon Linux:

sudo yum install tcpdump

Ubuntu:

sudo apt-get install tcpdump

Depois que o tcpdump for instalado, você poderá executar o seguinte comando para capturar o tráfego da porta tcp 22 e salvá-lo em um arquivo pcap.

sudo tcpdump -i eth0 port 22 -s0 -w samplecapture.pcap

Observação: o sinalizador -i do tcpdump especifica a interface na instância em que o tcpdump captura o tráfego. Talvez seja necessário alterar a interface em eth0 para a interface configurada em seu ambiente.

Solução de problemas de desempenho para Windows

Verifique o recurso ECN

1.    Execute o comando a seguir para determinar se o recurso Notificação Explícita de Congestionamento (ECN) está ativado:

netsh interface tcp show global

2.    Se o recurso ECN estiver ativado, execute o seguinte comando para desativá-lo:

- netsh interface tcp set global ecncapability=disabled

3.    Se você não observar uma melhoria no desempenho, você pode reativar o recurso ECN usando o seguinte comando:

netsh interface tcp set global ecncapability=enabled

Analise os saltos e solucione problemas de conectividade da porta TCP

Primeiro, use MTR ou tracert para revisar os saltos:

Método MTR:

1.    Baixe e instale o WinMTR.

2.    Insira o IP de destino na seção Host e escolha Iniciar.

3.    Deixe o teste ser executado por um minuto e escolha Interromper.

4.    Escolha Copiar texto para a área de transferência e cole a saída em um arquivo de texto.

5.    Procure por perdas na coluna % que sejam propagadas até o destino.

Observação: ignore qualquer salto com a mensagem Sem resposta do host. Essa mensagem indica que esses saltos específicos não estão respondendo às sondas do ICMP.

6.    Analise os saltos nos relatórios MTR usando uma abordagem de baixo para cima. Por exemplo, verifique se há perda no último salto ou destino e, em seguida, revise os saltos seguintes.

Método tracert:

se você não quiser instalar o MTR, você pode usar a ferramenta de utilitário de comando tracert.

1.    Execute um tracert no URL ou endereço IP de destino.

2.    Procure por saltos que mostrem um aumento abrupto no tempo de ida e volta (RTT). Um pico abrupto no RTT pode indicar que há um nó sob alta carga, o que, por sua vez, induz latência ou queda de pacotes em seu tráfego.

Observação: a opção -d não resolve endereços IP em nomes de host. Remova -d se a resolução de IP para nome de host for necessária.

tracert -d <Public IP of EC2 instance/on-premises host>

Em seguida, verifique a conectividade da porta TCP.

Observação: como o WinMTR e o tracert são baseados em ICMP, você pode usar o tracetcp para solucionar problemas de conectividade da porta TCP.

1.    Baixe WinPcap e tracetcp.

2.    Extraia o arquivo ZIP tracetcp.

3.    Copie o arquivo tracetcp.exe na sua unidade C.

4.    Instale o WinPcap.

5.    Abra o prompt de comando e faça o root do WinPcap na unidade C usando o comando **C:\Users\username>cd **.

6.    Execute tracetcp usando os comandos tracetcp.exehostname:port ou tracetcp.exe ip:port.

Verifique o Gerenciador de Tarefas do Windows

Se você tiver acesso à instância de origem ou à instância de destino, verifique o Gerenciador de Tarefas do Windows. Procure problemas com a utilização da CPU e da memória ou com a média de carga.

Faça uma captura de pacotes

Observação: é uma prática recomendada realizar capturas simultâneas de pacotes em sua instância do EC2 e em seu host on-premises ao diagnosticar problemas de perda de pacotes ou latência. Isso ajuda a identificar os pacotes de solicitação e resposta para isolar o problema nas camadas de rede e da aplicação. Também é uma prática recomendada iniciar primeiro a captura de pacotes e depois iniciar o tráfego. Isso ajuda a capturar todos os pacotes para o fluxo.

1.    Instale o Wireshark e faça uma captura de pacotes.

2.    Use o filtro a seguir para isolar o tráfego entre fontes específicas na captura de pacotes: (ip.addr eq source_IP) &&(tcp.flags.syn == 1). A saída mostra todos os fluxos tcp iniciados por esse IP de origem.

3.    Selecione a linha com o IP de origem e o IP de destino relevantes.

4.    Escolha o menu de contexto (clique com o botão direito do mouse) e escolha Seguir, Fluxo TCP. Isso resulta em um fluxo TCP entre o IP de origem e o IP de destino que você quer investigar.

5.    Procure retransmissões, pacotes duplicados ou notificações de tamanho de janela TCP, como janela TCP cheia ou Janela tamanho zero. Essas notificações podem indicar que os buffers TCP estão ficando sem espaço.

Se você encontrar perda de pacotes ou se o número de saltos mudar significativamente em relação às suas comparações, consulte a documentação do fornecedor do equipamento de rede. Se estiver trabalhando em um ambiente de rede com várias hospedagens, realize esses testes usando um ISP diferente.


Informações relacionadas

Rede aprimorada no Linux

Rede aprimorada no Windows

AWS OFICIAL
AWS OFICIALAtualizada há um ano