
Un outil de réplication de requêtes en ligne et de rejeu de flux TCP, idéal pour les tests réels, les tests de performance, les tests de stabilité, les tests de résistance, les tests de charge, les tests de fumée, et plus encore.
TCPCopy est un outil de rejeu de flux TCP pour des tests réalistes d'applications serveur Internet.
Un aperçu de TCPCopy pour les débutants
Un aperçu général de l'architecture de TCPCopy
Cas d'utilisation des tests avec TCPCopy
Exemples de préchauffage avec TCPCopy
Bien que le trafic réel soit crucial pour tester les applications serveur Internet, sa simulation précise est difficile en raison de la complexité des environnements en ligne. Pour permettre des tests plus réalistes, TCPCopy a été développé comme un outil de reproduction de flux en direct qui génère des charges de test très proches des charges de production. TCPCopy est largement utilisé par des entreprises en Chine.
TCPCopy a un impact minimal sur le système de production, ne consommant que du CPU, de la mémoire et de la bande passante supplémentaires. La charge reproduite reflète l'environnement de production en termes de diversité des requêtes, de latence réseau et d'utilisation des ressources.

Figure 1. Aperçu de l'architecture de TCPCopy.
Comme le montre la figure 1, TCPCopy se compose de deux composants : tcpcopy et intercept. Le composant tcpcopy s'exécute sur le serveur en ligne, capturant les requêtes en direct, tandis que intercept fonctionne sur le serveur assistant, effectuant des tâches telles que la transmission des informations de réponse à tcpcopy. L'application de test elle-même s'exécute sur le serveur cible.
Par défaut, tcpcopy utilise des sockets bruts pour capturer les paquets au niveau réseau (représentés par les flèches orange dans la figure). Il gère des processus tels que la simulation d'interaction TCP, le contrôle de la latence réseau et la simulation d'interaction de couche supérieure. Il envoie ensuite les paquets au serveur cible à l'aide de sockets bruts pour la sortie (représentés par les flèches rouge clair dans la figure).
La seule tâche requise sur le serveur cible est de configurer les règles de routage pour diriger les paquets de réponse (représentés par les flèches vert clair dans la figure) vers le serveur assistant.
Le rôle du composant intercept est de transmettre l'en-tête de réponse (par défaut) à tcpcopy. Il capture les paquets de réponse, extrait les informations de l'en-tête de réponse et envoie ces informations à tcpcopy via un canal dédié (représenté par les flèches bleu clair dans la figure). Dès réception de l'en-tête de réponse, tcpcopy utilise les informations pour modifier les attributs des paquets en ligne et continue d'envoyer les paquets suivants.
Il est important de noter que les réponses du serveur cible sont routées vers le serveur assistant, qui fonctionne comme un trou noir.
Pour intercept, vous avez deux options :
git clone git://github.com/session-replay-tools/intercept.git.Pour tcpcopy, vous avez également deux options :
git clone git://github.com/session-replay-tools/tcpcopy.git.intercept :cd intercept./configure makeintercept :make installintercept--single
Exécute intercept en mode non distribué.
--with-pfring=PATH
Spécifiez le chemin vers les sources de la bibliothèque PF_RING.
--with-debug
Compile intercept avec le support de débogage, les journaux étant enregistrés dans un fichier.
tcpcopy sur le serveur en lignetcpcopy : cd tcpcopy./configure maketcpcopy : make installtcpcopy--offline
Rejoue les flux TCP à partir d'un fichier pcap.
--pcap-capture
Capture les paquets au niveau de la couche liaison de données.
--pcap-send
Envoie les paquets au niveau de la couche liaison de données au lieu de la couche IP.
--with-pfring=PATH
Spécifiez le chemin vers les sources de la bibliothèque PF_RING.
--set-protocol-module=PATH
Configure tcpcopy pour fonctionner avec un module de protocole externe.
--single
Si intercept et tcpcopy sont tous deux configurés avec l'option --single, une seule instance de tcpcopy fonctionnera avec intercept, ce qui améliore les performances.
--with-tcmalloc
Utilise tcmalloc au lieu de malloc.
--with-debug
Compile tcpcopy avec le support de débogage, les journaux étant enregistrés dans un fichier.
Supposons que tcpcopy et intercept soient tous deux configurés avec ./configure.
Sur le serveur cible exécutant les applications serveur :
Configurez les règles de routage pour diriger les paquets de réponse vers le serveur assistant. Par exemple, si 61.135.233.161 est l'adresse IP du serveur assistant, utilisez la commande de routage suivante pour diriger toutes les réponses des clients de la plage 62.135.200.x vers le serveur assistant :
route add -net 62.135.200.0 netmask 255.255.255.0 gw 61.135.233.161
Sur le serveur assistant exécutant intercept (privilège root ou capacité CAP_NET_RAW requise) :
./intercept -F <filtre> -i <périphérique>
Notez que le format du filtre est identique à celui du filtre pcap. Par exemple :
./intercept -i eth0 -F 'tcp and src port 8080' -d
Dans cet exemple, intercept capture les paquets de réponse d'une application basée sur TCP écoutant sur le port 8080, en utilisant le périphérique réseau eth0.
Veuillez noter que ip_forward n'est pas activé sur le serveur assistant.