
Uma ferramenta online de replicação de requisições e reprodução de fluxos TCP, ideal para testes reais, testes de desempenho, testes de estabilidade, testes de estresse, testes de carga, testes de fumaça e muito mais.
TCPCopy é uma ferramenta de reprodução de fluxo TCP para testes realistas de aplicações de servidor de Internet.
Uma Visão Geral do TCPCopy para Iniciantes
Uma Visão Geral da Arquitetura do TCPCopy
Casos de Uso de Teste do TCPCopy
Exemplos de Pré-Aquecimento do TCPCopy
Embora o tráfego real ao vivo seja crucial para testar aplicações de servidor de Internet, simulá-lo com precisão é desafiador devido à complexidade dos ambientes online. Para permitir testes mais realistas, o TCPCopy foi desenvolvido como uma ferramenta de reprodução de fluxo ao vivo que gera cargas de trabalho de teste que se assemelham de perto às cargas de trabalho de produção. O TCPCopy é amplamente utilizado por empresas na China.
O TCPCopy impacta minimamente o sistema de produção, consumindo apenas CPU, memória e largura de banda adicionais. A carga de trabalho reproduzida reflete o ambiente de produção em termos de diversidade de requisições, latência de rede e uso de recursos.

Figura 1. Visão geral da arquitetura do TCPCopy.
Como mostrado na Figura 1, o TCPCopy é composto por dois componentes: tcpcopy e intercept. O componente tcpcopy é executado no servidor online, capturando requisições ao vivo, enquanto o intercept opera no servidor assistente, realizando tarefas como passar informações de resposta para o tcpcopy. A aplicação de teste em si é executada no servidor de destino.
Por padrão, o tcpcopy usa sockets raw para capturar pacotes na camada de rede (representado pelas setas laranjas na figura). Ele lida com processos como simulação de interação TCP, controle de latência de rede e simulação de interação de camada superior. Em seguida, envia pacotes para o servidor de destino usando sockets raw para saída (mostrado pelas setas vermelhas claras na figura).
A única tarefa necessária no servidor de destino é configurar regras de rota para direcionar os pacotes de resposta (mostrados por setas verdes claras na figura) para o servidor assistente.
O papel do componente intercept é encaminhar o cabeçalho da resposta (por padrão) para o tcpcopy. Ele captura os pacotes de resposta, extrai as informações do cabeçalho da resposta e envia essas informações para o tcpcopy através de um canal dedicado (representado por setas azuis claras na figura). Ao receber o cabeçalho da resposta, o tcpcopy usa as informações para modificar os atributos dos pacotes online e prossegue para enviar pacotes subsequentes.
É importante notar que as respostas do servidor de destino são roteadas para o servidor assistente, que funciona como um buraco negro.
Para intercept, você tem duas opções:
git clone git://github.com/session-replay-tools/intercept.git.Para tcpcopy, você também tem duas opções
git clone git://github.com/session-replay-tools/tcpcopy.git.intercept:cd intercept./configure makeintercept:make installintercept--single
Execute o intercept em modo não distribuído.
--with-pfring=PATH
Especifique o caminho para as fontes da biblioteca PF_RING.
--with-debug
Compile o intercept com suporte a depuração, com logs salvos em um arquivo.
tcpcopy no Servidor Onlinetcpcopy: cd tcpcopy./configure maketcpcopy: make installtcpcopy--offline
Reproduzir fluxos TCP a partir de um arquivo pcap.
--pcap-capture
Capturar pacotes na camada de enlace de dados.
--pcap-send
Enviar pacotes na camada de enlace de dados em vez da camada IP.
--with-pfring=PATH
Especificar o caminho para as fontes da biblioteca PF_RING.
--set-protocol-module=PATH
Configurar o tcpcopy para trabalhar com um módulo de protocolo externo.
--single
Se tanto o intercept quanto o tcpcopy forem configurados com a opção --single, apenas uma instância do tcpcopy funcionará com o intercept, resultando em melhor desempenho.
--with-tcmalloc
Usar tcmalloc em vez de malloc.
--with-debug
Compilar o tcpcopy com suporte a depuração, com logs salvos em um arquivo.
Suponha que tanto o tcpcopy quanto o intercept estejam configurados usando ./configure.
No Servidor de Destino Executando Aplicações de Servidor:
Configure as regras de rota para direcionar os pacotes de resposta para o servidor assistente. Por exemplo, se 61.135.233.161 for o endereço IP do servidor assistente, use o seguinte comando de rota para direcionar todas as respostas de clientes no intervalo 62.135.200.x para o servidor assistente:
route add -net 62.135.200.0 netmask 255.255.255.0 gw 61.135.233.161
No Servidor Assistente Executando intercept (Privilégio de Root ou Capacidade CAP_NET_RAW Necessária):
./intercept -F <filter> -i <device>
Observe que o formato do filtro é o mesmo que o filtro pcap. Por exemplo:
./intercept -i eth0 -F 'tcp and src port 8080' -d
Neste exemplo, o intercept capturará pacotes de resposta de uma aplicação baseada em TCP ouvindo na porta 8080, usando o dispositivo de rede eth0.
Observe que ip_forward não está ativado no servidor assistente.
No Servidor de Origem Online (Privilégio de Root ou Capacidade CAP_NET_RAW Necessária):
./tcpcopy -x localServerPort-targetServerIP:targetServerPort -s <intercept server> [-c <ip range>]
Por exemplo (assumindo que 61.135.233.160 é o endereço IP do servidor de destino):
./tcpcopy -x 80-61.135.233.160:8080 -s 61.135.233.161 -c 62.135.200.x
Neste exemplo, o tcpcopy captura pacotes na porta 80 do servidor atual, altera o endereço IP do cliente para um do intervalo 62.135.200.x e envia esses pacotes para a porta 8080 no servidor de destino (61.135.233.160). Ele também se conecta a 61.135.233.161 para solicitar que o intercept encaminhe os pacotes de resposta. Embora o parâmetro -c seja opcional, ele é usado aqui para simplificar as regras de rota.