
Una herramienta de replicación de solicitudes en línea y reproducción de flujos TCP, ideal para pruebas reales, pruebas de rendimiento, pruebas de estabilidad, pruebas de estrés, pruebas de carga, pruebas de humo y más.
TCPCopy es una herramienta de reproducción de flujo TCP para pruebas realistas de aplicaciones de servidores de Internet.
Una visión general de TCPCopy para principiantes
Una visión general de la arquitectura de TCPCopy
Casos de uso de pruebas con TCPCopy
Ejemplos de precalentamiento con TCPCopy
Aunque el tráfico real en vivo es crucial para probar aplicaciones de servidores de Internet, simularlo con precisión es un desafío debido a la complejidad de los entornos en línea. Para permitir pruebas más realistas, se desarrolló TCPCopy como una herramienta de reproducción de flujo en vivo que genera cargas de trabajo de prueba que se asemejan mucho a las cargas de trabajo de producción. TCPCopy es ampliamente utilizado por empresas en China.
TCPCopy impacta mínimamente el sistema de producción, consumiendo solo CPU, memoria y ancho de banda adicionales. La carga de trabajo reproducida refleja el entorno de producción en términos de diversidad de solicitudes, latencia de red y uso de recursos.

Figura 1. Visión general de la arquitectura de TCPCopy.
Como se muestra en la Figura 1, TCPCopy se compone de dos componentes: tcpcopy e intercept. El componente tcpcopy se ejecuta en el servidor en línea, capturando solicitudes en vivo, mientras que intercept opera en el servidor auxiliar, realizando tareas como pasar información de respuesta a tcpcopy. La aplicación de prueba se ejecuta en el servidor de destino.
Por defecto, tcpcopy utiliza sockets raw para capturar paquetes en la capa de red (representados por las flechas naranjas en la figura). Maneja procesos como la simulación de interacción TCP, el control de latencia de red y la simulación de interacción de capa superior. Luego envía los paquetes al servidor de destino usando sockets raw para la salida (mostrados por las flechas rojo claro en la figura).
La única tarea requerida en el servidor de destino es configurar reglas de enrutamiento para dirigir los paquetes de respuesta (mostrados por las flechas verde claro en la figura) al servidor auxiliar.
El rol del componente intercept es reenviar el encabezado de respuesta (por defecto) a tcpcopy. Captura los paquetes de respuesta, extrae la información del encabezado de respuesta y envía esta información a tcpcopy a través de un canal dedicado (representado por flechas azul claro en la figura). Al recibir el encabezado de respuesta, tcpcopy utiliza la información para modificar los atributos de los paquetes en línea y procede a enviar los paquetes siguientes.
Es importante tener en cuenta que las respuestas del servidor de destino se enrutan al servidor auxiliar, que funciona como un agujero negro.
Para intercept, tienes dos opciones:
git clone git://github.com/session-replay-tools/intercept.git.Para tcpcopy, también tienes dos opciones:
git clone git://github.com/session-replay-tools/tcpcopy.git.intercept:cd intercept./configure makeintercept:make installintercept--single
Ejecuta intercept en modo no distribuido.
--with-pfring=PATH
Especifica la ruta a las fuentes de la biblioteca PF_RING.
--with-debug
Compila intercept con soporte de depuración, guardando los registros en un archivo.
tcpcopy en el servidor en líneatcpcopy:cd tcpcopy./configure maketcpcopy:make installtcpcopy--offline
Reproduce flujos TCP desde un archivo pcap.
--pcap-capture
Captura paquetes en la capa de enlace de datos.
--pcap-send
Envía paquetes en la capa de enlace de datos en lugar de la capa IP.
--with-pfring=PATH
Especifica la ruta a las fuentes de la biblioteca PF_RING.
--set-protocol-module=PATH
Configura tcpcopy para trabajar con un módulo de protocolo externo.
--single
Si tanto intercept como tcpcopy se configuran con la opción --single, solo una instancia de tcpcopy funcionará con intercept, lo que mejora el rendimiento.
--with-tcmalloc
Usa tcmalloc en lugar de malloc.
--with-debug
Compila tcpcopy con soporte de depuración, guardando los registros en un archivo.
Supón que tanto tcpcopy como intercept se configuran usando ./configure.
En el servidor de destino que ejecuta las aplicaciones del servidor:
Configura las reglas de enrutamiento para dirigir los paquetes de respuesta al servidor auxiliar. Por ejemplo, si 61.135.233.161 es la dirección IP del servidor auxiliar, usa el siguiente comando de enrutamiento para dirigir todas las respuestas de los clientes en el rango 62.135.200.x al servidor auxiliar:
route add -net 62.135.200.0 netmask 255.255.255.0 gw 61.135.233.161
En el servidor auxiliar que ejecuta intercept (se requiere privilegio de root o la capacidad CAP_NET_RAW):
./intercept -F <filtro> -i <dispositivo>
Ten en cuenta que el formato del filtro es el mismo que el del filtro pcap. Por ejemplo:
./intercept -i eth0 -F 'tcp and src port 8080' -d
En este ejemplo, intercept capturará paquetes de respuesta de una aplicación basada en TCP que escucha en el puerto 8080, utilizando el dispositivo de red eth0.
Ten en cuenta que ip_forward no está habilitado en el servidor auxiliar.