
Uno strumento di replica delle richieste online e di riproduzione del flusso TCP, ideale per test reali, test delle prestazioni, test di stabilità, test di stress, test di carico, test di fumo e altro ancora.
TCPCopy è uno strumento di replay di flussi TCP per test realistici di applicazioni server Internet.
Una panoramica di TCPCopy per principianti
Una panoramica generale dell'architettura di TCPCopy
Casi d'uso di test con TCPCopy
Esempi di pre-riscaldamento con TCPCopy
Sebbene il traffico reale dal vivo sia cruciale per testare le applicazioni server Internet, simularlo accuratamente è difficile a causa della complessità degli ambienti online. Per consentire test più realistici, TCPCopy è stato sviluppato come strumento di riproduzione del flusso dal vivo che genera carichi di lavoro di test simili a quelli di produzione. TCPCopy è ampiamente utilizzato da aziende in Cina.
TCPCopy ha un impatto minimo sul sistema di produzione, consumando solo CPU, memoria e larghezza di banda aggiuntive. Il carico di lavoro riprodotto rispecchia l'ambiente di produzione in termini di diversità delle richieste, latenza di rete e utilizzo delle risorse.

Figura 1. Panoramica dell'architettura di TCPCopy.
Come mostrato in Figura 1, TCPCopy è composto da due componenti: tcpcopy e intercept. Il componente tcpcopy viene eseguito sul server online, catturando le richieste dal vivo, mentre intercept opera sul server assistente, eseguendo compiti come il passaggio delle informazioni di risposta a tcpcopy. L'applicazione di test stessa viene eseguita sul server di destinazione.
Per impostazione predefinita, tcpcopy utilizza socket raw per catturare i pacchetti a livello di rete (rappresentati dalle frecce arancioni nella figura). Gestisce processi come la simulazione dell'interazione TCP, il controllo della latenza di rete e la simulazione dell'interazione a livello superiore. Invia quindi i pacchetti al server di destinazione utilizzando socket raw per l'output (mostrato dalle frecce rosso chiaro nella figura).
L'unico compito richiesto sul server di destinazione è configurare le regole di routing per indirizzare i pacchetti di risposta (mostrati dalle frecce verde chiaro nella figura) al server assistente.
Il ruolo del componente intercept è inoltrare l'intestazione della risposta (per impostazione predefinita) a tcpcopy. Cattura i pacchetti di risposta, estrae le informazioni dell'intestazione e invia queste informazioni a tcpcopy tramite un canale dedicato (rappresentato dalle frecce azzurre nella figura). Al ricevimento dell'intestazione della risposta, tcpcopy utilizza le informazioni per modificare gli attributi dei pacchetti online e procede all'invio dei pacchetti successivi.
È importante notare che le risposte dal server di destinazione vengono instradate al server assistente, che funge da buco nero.
Per intercept, hai due opzioni:
git clone git://github.com/session-replay-tools/intercept.git.Per tcpcopy, hai anche due opzioni:
git clone git://github.com/session-replay-tools/tcpcopy.git.intercept:cd intercept./configuremakeintercept:make installintercept--single
Esegue intercept in modalità non distribuita.
--with-pfring=PATH
Specifica il percorso delle librerie PF_RING.
--with-debug
Compila intercept con supporto al debug, con log salvati su file.
tcpcopy sul server onlinetcpcopy:cd tcpcopy./configuremaketcpcopy:make installtcpcopy--offline
Riproduce flussi TCP da un file pcap.
--pcap-capture
Cattura pacchetti a livello di collegamento dati.
--pcap-send
Invia pacchetti a livello di collegamento dati invece che a livello IP.
--with-pfring=PATH
Specifica il percorso delle librerie PF_RING.
--set-protocol-module=PATH
Imposta tcpcopy per funzionare con un modulo di protocollo esterno.
--single
Se sia intercept che tcpcopy sono configurati con l'opzione --single, solo un'istanza di tcpcopy funzionerà con intercept, portando a prestazioni migliori.
--with-tcmalloc
Usa tcmalloc invece di malloc.
--with-debug
Compila tcpcopy con supporto al debug, con log salvati su file.
Supponiamo che sia tcpcopy che intercept siano configurati usando ./configure.
Sul server di destinazione che esegue le applicazioni server:
Configura le regole di routing per indirizzare i pacchetti di risposta al server assistente. Ad esempio, se 61.135.233.161 è l'indirizzo IP del server assistente, usa il seguente comando di route per indirizzare tutte le risposte dai client nell'intervallo 62.135.200.x al server assistente:
route add -net 62.135.200.0 netmask 255.255.255.0 gw 61.135.233.161
Sul server assistente che esegue intercept (privilegio di root o capacità CAP_NET_RAW richiesta):
./intercept -F <filtro> -i <dispositivo>
Nota che il formato del filtro è lo stesso del filtro pcap. Ad esempio:
./intercept -i eth0 -F 'tcp and src port 8080' -d
In questo esempio, intercept catturerà i pacchetti di risposta da un'applicazione basata su TCP in ascolto sulla porta 8080, utilizzando il dispositivo di rete eth0.
Tieni presente che ip_forward non è abilitato sul server assistente.
Sul server sorgente online (privilegio di root o capacità CAP_NET_RAW richiesta):
./tcpcopy -x portaServerLocale-IPServerDestinazione:portaServerDestinazione -s <server intercept> [-c <intervallo IP>]
Ad esempio (assumendo che 61.135.233.160 sia l'indirizzo IP del server di destinazione):
./tcpcopy -x 80-61.135.233.160:8080 -s 61.135.233.161 -c 62.135.200.x
In questo esempio, tcpcopy cattura i pacchetti sulla porta 80 dal server corrente, modifica l'indirizzo IP del client in uno dell'intervallo 62.135.200.x e invia questi pacchetti alla porta 8080 sul server di destinazione (61.135.233.160). Si connette anche a 61.135.233.161 per richiedere a intercept di inoltrare i pacchetti di risposta. Sebbene il parametro -c sia opzionale, viene utilizzato qui per semplificare le regole di routing.