Comment résoudre des problèmes de performance réseau entre des instances EC2 Linux ou Windows dans un VPC et sur un hôte sur site via la passerelle Internet ?

Date de la dernière mise à jour : 21/03/2022

Il existe des problèmes de perte de paquets ou de latence entre mes instances Amazon Elastic Compute Cloud (Amazon EC2) et l'hôte sur site via la passerelle Internet. Comment résoudre ces problèmes de performances réseau ?

Brève description

Pour diagnostiquer les problèmes de réseau tels que la perte de paquets ou la latence, commencez par tester le réseau afin d'isoler la source du problème. La résolution suivante peut aider à déterminer si la source du problème est un réseau ou une application. Il est recommandé de comparer les résultats de performances afin de pouvoir comparer les résultats lorsque vous observez les problèmes de performances.

Avant de procéder au dépannage, vérifiez les éléments suivants :

  • Veillez à ce que les utilitaires réseau soient installés sur les deux points de terminaison (l'instance EC2 et l'hôte sur site).
  • Utilisez une instance EC2 qui prend en charge les réseaux améliorés et assurez-vous que les pilotes soient à jour. Les réseaux améliorés fournissent des I/O plus élevées avec une faible utilisation du processeur, ce qui permet d'éviter les problèmes au niveau de l'instance lors de l'exécution des tests de performances. Si les réseaux améliorés ne sont pas activés, consultez Réseaux améliorés sous Linux ou Réseaux améliorés sous Windows.
  • Connectez-vous à votre instance EC2 pour accéder aux instances et assurez-vous qu'il existe une connectivité de bout en bout entre votre instance EC2 et votre hôte sur site.

Résolution

Installez les outils suivants pour dépanner et tester votre réseau :

  • AWSSupport-SetupIPMonitoringFromVPC pour collecter des métriques réseau telles que la perte de paquets, la latence, le MTR, le tcptraceroute et le tracepath.
  • MTR pour vérifier la perte de paquets ICMP ou TCP et les problèmes de latence.
  • Traceroute pour déterminer les problèmes de latence ou de routage.
  • Hping3 pour déterminer la perte de paquets TCP de bout en bout et les problèmes de latence.
  • Tcpdump pour analyser les échantillons de capture de paquets.

Examinez les sauts sur traceroute ou les rapports MTR en adoptant une approche de bas en haut. Par exemple, vérifiez les pertes sur le dernier saut ou la dernière destination, puis examinez les sauts suivants. Si le problème de perte de paquets ou de latence continue jusqu'au dernier saut, il s'agit éventuellement d'un problème de réseau ou de routage. Un problème de perte de paquets ou de latence sur un seul saut du chemin peut se produire s'il y a un problème avec la limitation de débit du plan de contrôle sur ce nœud. Vérifiez si le dernier saut signalé correspond à la destination indiquée dans la commande. Si ce n’est pas le cas, il s’agit peut-être d’un problème provoqué par un groupe de sécurité restrictif.

Testez les performances avec AWSSupport-SetupIPMonitoringFromVPC

Cet outil intégré collecte de nombreuses métriques dont vous avez besoin pour dépanner votre réseau. Pour plus d'informations, consultez Outil de débogage pour la connectivité depuis Amazon VPC.

Dépannage des problèmes de performances pour les instances Linux

La commande MTR Linux fournit une sortie continue et mise à jour. Cette sortie vous permet d'analyser les performances du réseau. Cet outil de diagnostic combine les fonctionnalités des utilitaires traceroute et ping. Dans la plupart des distributions Linux traceroute et MTR sont déjà installés. Toutefois, vous pouvez également les télécharger depuis le gestionnaire de package de logiciels de votre distribution.

Pour installer MTR, exécutez les commandes suivantes:

Amazon Linux :

sudo yum install mtr

Ubuntu :

sudo apt-get install mtr

Pour tester les performances de votre réseau à l’aide de MTR, exécutez ce test de manière bidirectionnelle entre l’adresse IP publique de vos instances EC2 et votre hôte sur site. Le chemin entre les nœuds d’un réseau TCP/IP peut changer si la direction est inversée. Par conséquent, il est important d’obtenir des résultats MTR dans les deux directions. Vous pouvez utiliser un traçage basé sur TCP au lieu d'ICMP car la plupart des appareils Internet annulent la priorité des demandes trace basées sur ICMP.

Examiner votre perte de paquets. La perte de paquets sur un seul saut n’indique généralement pas un problème. La perte peut résulter de la stratégie d’un plan de contrôle entraînant l’émission de messages «ICMP time exceeded ». Si vous remarquez une perte de paquets durable allant jusqu’au saut de destination, ou une perte de paquets sur plusieurs sauts, cette perte peut-être indiquer l’existence d’un problème.

Remarque : il est courant que certaines requêtes expirent.

MTR basé sur ICMP :

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

MTR basé sur TCP :

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

L’argument -T exécute un MTR basé sur TCP et l’option --report place le MTR en mode rapport. MTR s’exécute pour le nombre de cycles spécifié par l’option -c. Imprimez les statistiques, puis quittez.

Remarque : il existe un problème connu avec certaines versions de MTR où le saut final signale une valeur incorrecte si TCP est utilisé.

Tester les performances à l'aide de traceroute

L’utilitaire traceroute de Linux identifie le chemin suivi entre un nœud client et le nœud de destination. L’utilitaire enregistre pour chaque routeur le temps de réponse en millisecondes à la requête. L’utilitaire calcule également le temps que met chaque saut pour atteindre sa destination.

Pour installer traceroute, exécutez les commandes suivantes:

Amazon Linux :

sudo yum install traceroute

Ubuntu :

sudo apt-get install traceroute

Remarque : traceroute n'est pas nécessaire si vous exécutez un rapport MTR. MTR fournit des statistiques en matière de latence et de perte de paquets vers une destination.

Assurez-vous que le port 22 ou le port que vous testez est ouvert dans les deux sens. Pour résoudre les problèmes de connectivité réseau à l'aide de traceroute, exécutez la commande du client vers le serveur et du serveur vers le client. Le chemin entre les nœuds d’un réseau TCP/IP peut changer si la direction est inversée. Utilisez un traçage basé sur TCP au lieu (du port de votre application) d'ICMP, car la plupart des appareils Internet annulent la priorité des demandes trace basées sur ICMP.

traceroute basé sur ICMP :

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

traceroute basé sur TCP :

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

L'argument -T -p 22 -n effectue un traçage basé sur TCP sur le port 22.

Remarque : vous pouvez utiliser le port spécifique à votre application pour les tests. Utilisez le port spécifique pour savoir s'il existe des appareils intermédiaires dans le chemin d'accès qui prend en charge le trafic de votre application.

Tester les performances à l'aide de hping3

Hping3 est un assembleur et un analyseur de paquets TCP/IP utilisable en ligne de commandes qui mesure la latence et la perte de paquets de bout en bout sur une connexion TCP. En plus des requêtes d'écho ICMP, hping3 prend en charge les protocoles TCP, UDP et RAW-IP. Hping3 inclut également un mode traceroute qui peut envoyer des fichiers entre un canal couvert. Hping3 est conçu pour analyser les hôtes, contribuer à la réalisation de tests d’intrusion, tester les systèmes de détection d’intrusion et envoyer des fichiers entre hôtes.

MTR et traceroute capturent la latence par saut. Toutefois, hping3 récolte des résultats indiquant la latence min/moy/max bout en bout sur TCP en plus de la perte de paquets. Pour installer hping3, exécutez les commandes suivantes:

Amazon Linux :

sudo yum --enablerepo=epel install hping3

Ubuntu :

sudo apt-get install hping3

La commande suivante envoie 50 paquets TCP SYN sur le port 0. Par défaut, hping3 envoie des en-têtes TCP au port 0 de l'hôte cible avec un paramètre winsize de 64 sans balise TCP :

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

La commande suivante envoie 50 paquets TCP SYN sur le port 22 :

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

Remarque : veillez à ce que le port 22 ou le port que vous testez soit bien ouvert.

Tester des exemples de captures de paquets à l'aide de tcpdump

Il est recommandé d'effectuer des captures simultanées de paquets sur votre instance EC2 et sur votre hôte sur site lors du diagnostic des problèmes de perte de paquets ou de latence. Cela peut aider à identifier les paquets de demandes et de réponses afin que nous puissions isoler le problème au niveau des couches réseaux et applications. Pour installer tcpdump, exécutez les commandes suivantes:

Amazon Linux :

sudo yum install tcpdump

Ubuntu :

sudo apt-get install tcpdump

Une fois tcpdump installé, vous pouvez exécuter la commande suivante pour capturer le trafic du port TCP 22 et l'enregistrer dans un fichier pcap.

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

Dépannage des problèmes de performances pour les instances Windows

Vérifier la fonctionnalité ECN

1.    Exécutez la commande suivante pour déterminer si la fonctionnalité de notification explicite de congestion (ECN) est activée.

netsh interface tcp show global

2.    Si la fonctionnalité ECN est activée, exécutez la commande suivante pour la désactiver :

- netsh interface tcp set global ecncapability=disabled

3.    Si vous ne constatez pas une amélioration des performances, vous pouvez réactiver la fonctionnalité ECN à l'aide de la commande suivante :

netsh interface tcp set global ecncapability=enabled

Vérifier les sauts et dépanner les problèmes de connectivité du port TCP

Commencez par utiliser MTR ou tracert pour examiner les sauts :

Méthode MTR :

1.    Téléchargez et installez WinMTR.

2.    Saisissez l'IP de destination dans la section « Host » (Hôte), puis choisissez « Start » (Démarrer).

3.    Laissez le test s'exécuter pendant une minute, puis choisissez « Stop » (Arrêter).

4.    Choisissez « Copy text to clipboard »(Copier le texte dans le presse-papiers) et collez la sortie dans un fichier texte.

5.    Recherchez d'éventuelles pertes dans la colonne % qui sont propagées vers la destination.

Remarque : ignorez tous les sauts avec le message No response from host (Aucune réponse de l'hôte). Ce message indique que ces sauts ne répondent pas aux sondes ICMP.

6.    Examinez les sauts sur les rapports MTR à l'aide d'une approche de bas en haut. Par exemple, observez la perte sur le dernier saut ou la dernière destination, puis examinez les sauts précédents.

Méthode tracert :

Vous pouvez utiliser l'utilitaire de commande tracert si vous ne souhaitez pas installer MTR.

1.    Effectuez un tracert vers l'URL ou l'adresse IP de destination.

2.    Recherchez n'importe quel saut présentant un pic soudain dans le temps de l'aller-retour (RTT). Un pic soudain dans RTT peut indiquer l'existence d'un nœud surchargé responsable d'une latence ou de pertes de paquets dans votre trafic.

Ensuite, vérifiez la connectivité du port TCP :

Remarque : comme WinMTR et tracert sont tous deux basés sur ICMP, vous pouvez utiliser tracetcp pour dépanner la connectivité du port TCP.

1.    Téléchargez WinPcap et tracetcp.

2.    Extrayez le fichier ZIP tracetcp.

3.    Copiez tracetcp.exe sur votre lecteur C.

4.    Installez WinPcap.

5.    Ouvrez l'invite de commande et WinPcap racine sur votre lecteur C à l'aide de la commande C:\Users\username>cd \.

6.    Exécutez tracetcp à l'aide des commandes suivantes : tracetcp.exehostname:port ou tracetcp.exe ip:port.

Passer en revue le gestionnaire de tâches Windows

Si vous avez accès à l'instance source ou à l'instance de destination, vérifiez le Gestionnaire des tâches Windows. Recherchez les problèmes d'utilisation du processeur et de la mémoire, ou la charge moyenne.

Effectuer une capture de paquets

Remarque : une bonne pratique consiste à commencer par démarrer la capture des paquets, puis à initier le trafic. Cette approche vous aide à capturer tous les paquets pour le flux.

1.    Installez Wireshark et effectuez une capture de paquet.

2.    Utilisez le filtre suivant pour isoler le trafic entre des sources particulières dans la capture des paquets : (ip.addr eq source_IP) &&(tcp.flags.syn == 1). La sortie affiche tous les flux tcp initiés par cette adresse IP source.

3.    Sélectionnez la ligne avec l'adresse IP source et l'adresse IP de destination appropriées.

4.    Choisissez le menu contextuel (clic droit), puis choisissez « Follow » (Suivre), « TCP Stream » (Flux TCP). Cette action déclenche un flux TCP entre l'adresse IP source et l'adresse IP de destination que vous souhaitez examiner.

5.    Recherchez les retransmissions, les paquets en double ou les notifications de taille de fenêtre TCP comme la fenêtre TCP pleine ou la taille de fenêtre zéro. Ces notifications peuvent indiquer que les tampons TCP manquent d'espace.

Si vous constatez une perte de paquets dans votre réseau ou des changements du nombre de sauts (par rapport aux résultats de référence) qui introduisent une latence supplémentaire, reportez-vous à la documentation de votre fournisseur pour obtenir des instructions sur la façon de vérifier les appareils réseau à des fins d'analyse et de dépannage. Si vous êtes multiconnecté, exécutez ces tests à l'aide d'un autre fournisseur d'accès Internet (FAI) et comparez les résultats.


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?