Comment mesurer la latence à chaque couche réseau

EVOproxy Team
Comment mesurer la latence à chaque couche réseau

Vous avez un processus en cours, et un groupe de requêtes continue de dépasser le délai d'attente tandis que le reste semble correct. La vérification des annonces passe dans une session de navigateur, échoue dans une autre, et le travail de scraping ne manque la page cible que lorsque le pool de proxies tourne au mauvais moment. C'est le genre de désordre que crée la latence, car le problème n'est généralement pas un mauvais échantillon. C'est une distribution cachée derrière une moyenne qui semble propre.

Si vous mesurez la latence de la mauvaise manière, vous passerez des heures à régler la mauvaise couche. La requête peut être lente à cause de DNS, de la configuration TCP, de la négociation TLS, du traitement serveur, de la perte de paquets, ou du chemin du proxy lui-même. Dans les flux mobiles et 4G, l'IP publique, l'ASN et le NAT de niveau opérateur peuvent changer la forme de ce que vous voyez, donc le chemin que vous testez dans un datacenter ne vous dira pas grand-chose sur le chemin que prend votre trafic réel. Un bon benchmark commence par traiter la latence comme une courbe, puis décompose cette courbe jusqu'à ce que le morceau lent soit évident.

Le véritable coût d'une requête lente

Un processus de scraping qui semble sain sur le papier peut encore être fragile en production. Le planificateur de tâches signale un débit normal, mais quelques pages se bloquent suffisamment longtemps pour déclencher des nouvelles tentatives, et tout le lot se termine en retard. Dans la vérification des annonces, le même schéma apparaît comme un test qui semble correct dans un navigateur à faible charge, puis retourne des résultats incohérents lorsque le chemin réseau change ou que le proxy tourne en milieu de session. Dans les deux cas, le symptôme visible est un délai manqué, mais la cause est généralement répartie sur de nombreuses requêtes, pas une panne dramatique.

C'est pourquoi les moyennes sont dangereuses. Un service peut avoir une moyenne respectable et sembler lent pour les utilisateurs parce que la queue est moche. Si vous ne regardez qu'un seul chiffre récapitulatif, vous manquez les requêtes les plus lentes, et ce sont celles qui perturbent les flux de connexion, les vérifications sensibles au temps et les tests dépendants de la géolocalisation.

Règle pratique : traitez la latence comme un ensemble d'échantillons, pas comme une seule lecture. La première question n'est pas « Quelle est la moyenne ? » mais « À quoi ressemble la queue, et qu'est-ce qui a changé là ? »

Lorsque je débogue un chemin de scraping ou de vérification, je commence par la forme de la latence, pas par la moyenne. Une médiane propre avec un p95 ou p99 moche signifie que le système est principalement correct, mais qu'une petite tranche de trafic est frappée par la congestion, les nouvelles tentatives, ou un mauvais saut. Cette tranche est souvent suffisante pour ruiner le comportement en production.

Pour les équipes qui passent par des chemins mobiles, cela compte encore plus. Un itinéraire 4G peut sembler stable pendant un certain temps, puis changer à cause du réseau, de l'opérateur ou de l'état de la session proxy. C'est pourquoi le bon point de référence est une distribution complète, pas une moyenne confortablement petite. Si vous avez besoin d'une base pour les concepts de stabilité réseau, gardez également un œil sur le contexte opérationnel plus large, car la latence n'est qu'un côté de la qualité du chemin : référence de stabilité réseau.

Les fondamentaux de la latence dont vous avez besoin avant de tester

Un diagramme illustrant quatre outils en ligne de commande pour mesurer la latence réseau : ping, traceroute, mtr et netcat.

Commencez par les termes qui comptent

Temps de trajet aller-retour, RTT, est le temps qu'il faut à un paquet pour sortir et revenir. C'est l'unité de base que la plupart des outils réseau exposent, et elle est généralement mesurée en millisecondes. Délai unidirectionnel n'est valide que lorsque les deux extrémités ont des horloges étroitement synchronisées, c'est pourquoi la plupart des équipes de production s'en tiennent à RTT à moins qu'elles ne contrôlent le timing des deux côtés. Jitter est la variation entre les mesures, perte de paquets est le trafic manquant, et débit est la quantité de données que le chemin peut transporter dans le temps.

Les percentiles vous donnent une vue pratique. p50 est le milieu de la distribution, p95 montre le niveau sous lequel 95 % des requêtes se situent, et p99 pousse plus profondément dans la queue où se trouvent les rares requêtes lentes. Si la médiane est correcte mais que p95 et p99 s'étirent, vos utilisateurs vont toujours le ressentir.

Pensez en couches, pas en un seul saut

La latence commence au niveau de la couche de liaison, mais les utilisateurs l'expérimentent au niveau de la couche d'application. Un paquet doit être envoyé, routé, transporté, réassemblé, et enfin traité par le service. Cela signifie qu'un seul ping ne peut vous raconter qu'une partie de l'histoire, car il mesure principalement le chemin, pas le travail effectué par l'application une fois que le paquet arrive.

Un modèle mental utile est simple. La qualité du chemin physique affecte le RTT, le comportement de transport affecte les retransmissions et la configuration de connexion, et le travail d'application affecte combien de temps la requête attend avant que le premier octet ne revienne. C'est pourquoi vous finirez par mesurer à plusieurs couches si vous voulez une réponse fiable.

Si un test ne montre qu'un seul chiffre, supposez qu'il est incomplet jusqu'à preuve du contraire.

Les connexions mobiles 4G ajoutent une autre couche de variabilité. L'IP publique peut se trouver derrière un NAT de niveau opérateur, plusieurs utilisateurs peuvent partager la même adresse publique, et le trafic peut être regroupé par contexte ASN plutôt que par une simple empreinte résidentielle. Cela change à la fois ce à quoi ressemble le chemin et comment les systèmes en aval le classifient, c'est pourquoi les tests basés sur des proxies nécessitent leur propre discipline de mesure.

Mesurer la latence depuis la ligne de commande

Un diagramme infographique illustrant la décomposition étape par étape des processus de latence des requêtes réseau d'application et de navigateur.

Ping vous indique le RTT de première passe

Utilisez ping lorsque vous souhaitez un aperçu rapide de la qualité du chemin. Une commande simple comme ping -c 20 target vous donne un petit ensemble d'échantillons, et la sortie se termine généralement par min/avg/max plus une valeur d'écart. Le champ de latence à lire est la ligne RTT, pas la séquence de paquets.

Exemple de modèle de sortie :

20 paquets transmis, 20 reçus, 0 % de perte de paquets rtt min/avg/max/mdev = 12.4/18.7/41.3/6.2 ms

Ici, avg est utile uniquement comme une orientation approximative, tandis que max donne un indice sur la queue. Si le max est beaucoup plus moche que la moyenne, vous avez déjà appris que le chemin n'est pas assez stable pour des flux sensibles.

Traceroute montre où le chemin ralentit

Utilisez traceroute target lorsque vous avez besoin de chronométrage saut par saut. Le nombre à surveiller est le RTT affiché par saut, car c'est là que le délai s'accumule. Un saut lent ne signifie pas toujours une faute, mais cela vous indique où le chemin commence à s'élargir.

Exemple de modèle de sortie :

1 1.1 ms 1.0 ms 1.2 ms 2 4.8 ms 5.1 ms 4.9 ms 3 19.6 ms 20.1 ms 21.0 ms

Si le saut apparaît au saut 3 et reste élevé après cela, le goulot d'étranglement est probablement en amont de la cible, pas à l'intérieur. Si le premier saut lent apparaît et que les sauts suivants se rétablissent, ne l'interprétez pas trop. Certains routeurs dépriorisent les réponses aux sondes, ce qui les fait paraître lents sans nuire au trafic réel.

MTR combine les deux vues

mtr target est utile lorsque vous souhaitez un rapport en direct à la fois sur le chemin et la perte. Les colonnes à lire sont Loss% et Avg. Un saut avec une perte croissante et un RTT moyen croissant est plus préoccupant qu'un avec un seul pic étrange.

Exemple de modèle de sortie :

Hôte Loss% Avg Meilleur Pire 1 0.0% 1.1 1.0 1.5 2 0.0% 5.0 4.8 5.4 3 2.0% 20.4 19.7 41.2

La commande est la plus utile lorsque vous la laissez fonctionner suffisamment longtemps pour voir des motifs au lieu de simples pics. Pour le travail de proxy, cela compte car un itinéraire tourné peut sembler correct pendant une minute puis dériver une fois que la session change. Si vous construisez un benchmark répétable autour de la vitesse du proxy, gardez la session stable et comparez le processus à une base fixe, puis utilisez un flux de vérification de vitesse de proxy dédié tel que ce guide de test de vitesse de proxy.

Iperf3 vous indique comment le lien se comporte sous charge

Utilisez iperf3 lorsque vous vous souciez de la capacité et de la sensibilité à la charge. Une commande de base comme iperf3 -c target vérifie comment le chemin se comporte lorsque des données circulent, pas seulement lorsque une sonde rebondit. Le champ à surveiller est le débit de transfert, car la latence s'aggrave souvent une fois que le lien devient occupé.

Exemple de modèle de sortie :

[ ID] Interval Transfert Débit [ 5] 0.00-10.00 sec 120 MBytes 101 Mbits/sec

Ce n'est pas un chiffre de latence à lui seul, mais cela vous indique si la congestion est susceptible d'affecter vos temps de demande. Si le débit s'effondre sous charge, le chemin de la demande va ressentir cette pression quelque part.

Tcpdump et tshark exposent le timing au niveau des paquets

tcpdump est pour la capture, et tshark ou Wireshark est pour l'analyse. Capturez le flux, puis inspectez les statistiques ICMP ou de transport pour voir le minimum, le maximum, la moyenne, la médiane et l'écart type. Ces champs vous aident à comprendre si la distribution est serrée ou bruyante.

Exemple de modèle de capture :

tcpdump -i any host target Statistiques ICMP : min 12 ms, max 71 ms, moyenne 19 ms, médiane 16 ms, écart type 8 ms

C'est la vue la plus honnête que vous obtiendrez lorsque la moyenne de ping cache la forme de la queue. Cela aide également lorsque vous soupçonnez que le saut du proxy ajoute un délai d'une manière que les outils hop par hop ne peuvent pas expliquer clairement.

Latence des applications et des navigateurs que vous pouvez réellement voir

Une demande peut sembler rapide au niveau du réseau et sembler lente dans le navigateur. C'est pourquoi je décompose toujours avec curl avant de faire confiance à quoi que ce soit d'autre. Les champs utiles sont le temps DNS, le temps de connexion TCP, le temps TLS, TTFB pour le temps jusqu'au premier octet, et le temps total.

Une commande pratique ressemble à ceci :

curl -o /dev/null -s -w "dns:%{time_namelookup} tcp:%{time_connect} tls:%{time_appconnect} ttfb:%{time_starttransfer} total:%{time_total}\n" https://example.com

Sortie d'exemple :

dns:0.012 tcp:0.045 tls:0.089 ttfb:0.150 total:0.320

Cette ligne vous indique où l'attente se produit. Si le DNS est peu coûteux mais que le TTFB est lent, le serveur ou le chemin du proxy est le problème. Si TCP et TLS sont le frein, vous regardez la configuration de la connexion, pas la livraison de contenu.

Utilisez la cascade du navigateur pour le timing orienté utilisateur

Les outils de développement du navigateur vous donnent un angle différent. Le panneau Réseau montre où chaque demande a passé du temps, et l'onglet Timing le divise en bloqué, recherche DNS, connexion initiale, SSL, demande envoyée, attente (TTFB), et téléchargement de contenu. Cette répartition est importante car une page peut sembler cassée même lorsque le backend est sain.

Si la cascade montre la plupart de l'attente avant que la demande ne soit envoyée, le navigateur ou le chemin du proxy est le point de congestion. Si l'attente domine, le backend est lent à répondre. Si le téléchargement de contenu est le long pôle, la charge utile est trop lourde ou la connexion est trop contrainte.

Habitude utile : comparez la cascade du navigateur avec la ligne de timing curl du même cible. S'ils ne sont pas d'accord, le chemin du navigateur a des frais généraux supplémentaires que votre test CLI ne voit pas.

La surveillance synthétique et la surveillance des utilisateurs réels servent des objectifs différents. Les vérifications synthétiques sont contrôlées et répétables, ce qui est ce que vous voulez pour les tests de régression. Le timing des utilisateurs réels capture ce que les visiteurs réels expérimentent, ce qui est mieux pour repérer les problèmes à long terme qui ne se manifestent que dans la nature.

Pour le travail de pipeline, la réponse la plus propre est souvent de timestamp l'événement à l'ingestion, le traitement, et le service, puis de soustraire les points adjacents. Le cadre basé sur les étapes d'Amplitude pour le timing des événements et la définition de la latence des données de Snowplow pointent tous deux vers la même idée, le chiffre utile est souvent le temps d'une étape à l'autre, pas seulement le total de bout en bout. C'est le profil de latence dont la vérification des annonces et les flux de recherche de marché ont généralement besoin.

Lire les chiffres sans se tromper

Une moyenne peut sembler saine alors que l'expérience utilisateur est misérable. Supposons que la plupart des demandes se terminent dans une petite bande, mais quelques lentes s'étendent loin. La médiane peut rester calme, la moyenne peut bouger seulement un peu, et pourtant les personnes touchées par la queue sentent que le système est cassé.

Lisez les percentiles comme une forme

p50 vous dit à quoi ressemble la normalité. p95 vous dit jusqu'où la queue commune s'étend. p99 vous dit si une douleur rare s'infiltre dans la production. Lorsque p50 reste plat mais que p99 grimpe, le système devient moins prévisible même si le centre de la distribution semble correct.

C'est le premier endroit où je regarde dans un benchmark de production. Si p99 est moche, j'arrête de traiter la moyenne comme un critère de décision et commence à la traiter comme une source de bruit.

Séparer les problèmes de saut des problèmes de service

Un premier saut lent dans traceroute ou MTR pointe généralement vers la congestion du chemin, la distance, ou le chemin du proxy lui-même. Un saut avec perte peut être un artefact de routage, surtout si les sauts suivants ne se dégradent pas de la même manière. Une recherche DNS lente signifie que vous devriez tester la résolution de nom séparément, tandis qu'une poignée de main TLS lente signifie généralement que la configuration de la connexion ou la négociation de certificat est le frein. Si le côté serveur est lent après tout cela, le temps jusqu'au premier octet le montrera.

Le flux de travail le plus sûr est répétitif, pas astucieux. Établissez une ligne de base, testez sous charge, divisez par heure de la journée et par jour de semaine par rapport au week-end, puis recherchez la perte de paquets et les sauts lents. Un instantané peut mentir, mais le schéma au fil du temps ne ment généralement pas.

Pour la vérification des annonces et le scraping, le travail commence ici. Un chemin qui est acceptable en heures creuses peut devenir instable une fois que le transporteur ou le chemin en amont change. Si le chemin change en cours de test, vos percentiles cessent de décrire un système et commencent à en décrire plusieurs différents.

Mesurer la latence à travers des proxies mobiles et 4G

Un tableau comparatif infographique expliquant les différences de latence, de stabilité et d'utilisation entre les proxies mobiles et les connexions 4G.

Une demande peut sembler rapide depuis un centre de données et sembler lente une fois qu'elle quitte un réseau mobile. Le ASN change la donne avant que le paquet n'atteigne votre cible, car il montre quel réseau possède l'adresse et quel chemin en amont vous testez réellement. Le NAT de niveau opérateur le change à nouveau, car une IP publique partagée peut cacher une contention supplémentaire et faire en sorte que la même demande se comporte différemment d'une exécution à l'autre.

C'est pourquoi le benchmark doit rester fixé à un seul chemin. Si vous faites tourner l'IP du proxy pendant que vous collectez des échantillons, vous arrêtez de mesurer une seule connexion et commencez à mélanger plusieurs routes en un seul ensemble de percentiles. Gardez la même session collante tout au long de l'exécution, puis répétez le test après rotation si vous voulez voir à quel point le chemin lui-même change. Pour une note de configuration plus approfondie sur le routage mobile, ce guide de proxy 4G LTE est l'endroit le plus clair pour vérifier le comportement de session que vous devez maintenir stable.

Ce qu'il faut garder constant pendant le test

  • Gardez la session stable : Ne faites pas tourner l'IP pendant que vous collectez des échantillons de latence. Un changement de route peut déplacer suffisamment la distribution pour rendre le benchmark difficile à lire.
  • Vérifiez d'abord l'ASN : Confirmez si le chemin se trouve dans un réseau mobile, un chemin résidentiel, ou un chemin de centre de données avant de comparer les résultats.
  • Utilisez le même point de terminaison et la même fenêtre de timing : Sinon, vous mélangez les changements de réseau avec les changements de charge de travail, et le résultat cesse d'être utile.
  • Comparez le similaire avec le similaire : Exécutez la même demande depuis l'origine, puis à travers un proxy résidentiel, puis à travers un proxy mobile 4G.

Cette dernière comparaison est celle qui correspond le plus au comportement de production. Un chemin mobile avec une session stable vous donne une vue plus claire de ce que la vérification des annonces ou le trafic de scraping verra, tandis qu'une session tournante vous en dit plus sur le renouvellement que sur la latence.

Pourquoi traceroute peut sembler étrange sur 4G

Un chemin 4G ressemble rarement à un chemin d'entreprise propre. Certains sauts ne répondent jamais, certaines réponses sont limitées en taux, et l'IP publique peut se trouver derrière un bord de transporteur au lieu d'une seule machine. Traceroute aide toujours, mais considérez-le comme un moyen de lire la forme du chemin, pas comme une carte parfaite de chaque saut.

L'habitude opérationnelle qui tient est simple. Benchmark trois chemins côte à côte, votre réseau d'origine, la même demande à travers un proxy résidentiel, puis la même demande à travers un proxy mobile 4G. Gardez la session fixe dans chaque cas, puis comparez p50, p95, p99, et max. Cela vous donne une lecture pratique de la latence avant que le trafic de production ne le fasse.

Pièges courants et une liste de contrôle que vous pouvez réutiliser

  • Tester uniquement sur des réseaux inactifs. Les chiffres peuvent sembler propres sur un chemin calme et s'effondrer une fois que le trafic réel partage le lien. Le problème n'est pas le test lui-même, c'est l'état du réseau pendant le test. Correction : répétez l'exécution pendant les périodes de forte affluence et comparez le changement dans la distribution.
  • Prendre une seule fenêtre d'échantillonnage. Une courte exécution peut sembler concluante tout en étant difficile à reproduire. Le problème est le bruit de synchronisation et un chemin qui a changé sous vous. Correction : collectez plusieurs fenêtres et comparez la répartition, pas seulement le chiffre principal.
  • Ignorer la latence de queue. Une moyenne saine peut cacher les requêtes lentes que les utilisateurs ressentent. Le problème apparaît à l'extrémité de la distribution, pas au milieu. Correction : lisez p95, p99 et max ensemble, puis décidez si la queue est acceptable.
  • Faire tourner le proxy en cours de test. Si la session change à mi-parcours, le chemin change avec elle et les percentiles cessent d'avoir beaucoup de sens. Cela est courant sur les chemins mobiles avec NAT de niveau opérateur et comportement de session collante, où une exécution peut rester sur une sortie et la suivante peut ne pas le faire. Correction : gardez une session collante pour l'exécution complète.
  • Mesurer uniquement le serveur. Une recherche DNS lente ou une poignée de main TLS retardée peut être imputée au backend même lorsque l'application n'est pas le goulet d'étranglement. Le chronomètre doit séparer la configuration de la connexion, le temps de poignée de main et le temps de réponse. Correction : divisez la requête en ces étapes et enregistrez chacune d'elles.
  • Utiliser des moyennes pour les rapports. Une moyenne peut aplatir une mauvaise expérience utilisateur en un chiffre qui semble inoffensif. Cela cache les requêtes qui échouent à un scraping, une vérification de publicité ou un flux de QA mobile. Correction : rapportez les percentiles qui correspondent aux requêtes réelles et gardez le maximum brut à l'esprit.
  • Arrêter avant que les requêtes en cours ne se terminent. Une exécution qui se termine trop tôt peut manquer les requêtes les plus lentes et faire paraître le benchmark meilleur qu'il ne l'est. La fenêtre de collecte est incomplète, donc le maximum est sous-estimé. Correction : laissez le benchmark se vider avant de l'arrêter.

Pour les flux de travail de proxy mobile et 4G, la liste de contrôle est simple. Confirmez l'ASN et le comportement de session avant de comparer les résultats, maintenez le point de terminaison et la fenêtre de temps stables, collectez suffisamment d'échantillons pour voir la queue, et vérifiez que les étrangetés de traceroute sont attendues pour le chemin de l'opérateur que vous utilisez. Si vous avez besoin d'une référence pour le comportement des proxies 4G et LTE, utilisez la page wiki que vous conservez déjà pour cette configuration, puis testez par rapport à votre propre référence plutôt que de supposer qu'un chemin se comportera comme un autre.