Valide o pacote de envio contra pacotes recived?

1

Executando o Ubuntu.

Eu tenho a máquina A - > máquina B ( conexão unidirecional de A para B ). Máquina Uma meta é encaminhar pacotes tcp para a máquina B ( não possui conexão tcp com a máquina B. ela apenas encaminha pacotes tcp obtidos de outras máquinas) Na máquina A, há código c ++ que coleta alguns pacotes tcp com base nas regras de negócios e grava-os pelo soquete bruto na máquina B.

Eu quero fazer um teste de desempenho para o meu código na máquina A, então, para fazer isso Eu preciso enviar pacotes TCP maciços para máquina A meu código c + + irá encaminhá-los para B. No final eu vou validar que todos os pacotes foram revividos na máquina B. Você tem alguma recomendação para ferramentas? ferramentas que simularão envio maciço e ferramentas que ajudarão nas asserções (podem ser afirmadas por quantia, soma de verificação, qualquer outra idéia)

Eu acho que no upload de um arquivo grande para A despejar o tráfego de upload e reproduzi-lo com o tcpreplay (vou criar 100 threads que reproduzem o mesmo dump de upload para ter um fluxo tcp massivo). Para validar, vou analisar o tcpdump no receptor para verificar se ele tem a mesma quantidade de pacotes que foi enviada.

Isto não é sobre o tcp como o protocolo só gera pacotes tcp reais (como estrutura) enviando massivos deles e validando por comparação de carga útil ou quantidade ou de qualquer outra forma. Algum conselho?

    
por Avihai Marchiano 08.08.2012 / 18:21

1 resposta

1

I have machine A -> machine B (one-way connection from A to B) . I need to send massive TCP packets from A to B and validate that all packets revived. Do you have any recommendation for tools?

Eu recomendo TCP , que garante reliable, ordered delivery dos dados.
(Você está nos pedindo uma ferramenta para fazer o que o protocolo subjacente já faz.)

Observe também que o TCP é inerentemente bidirecional : ACK s precisa ser enviado de volta da Máquina B para a máquina A. Uma "conexão unidirecional" é impossível - Não ACK s significa que a transmissão irá parar para sempre.

I think on upload big file from A to B (do this when they has two-way connection) dump the traffic from A to B and than replay it with tcpreplay (i will create 100 threads that will replay it in order to have massive tcp stream). In order to validate i will analyze the tcpdump on the receiver to check if its has the same excepted amount of packets as sent.

O TCP não funciona dessa maneira. A contagem de pacotes através do fio pode ser diferente devido aos diferentes tamanhos de janela / MTU, pacotes drop-and-retransmitted, ACKs atrasados (resultando em transmissão dupla de alguns pacotes), etc.

Você não pode simplesmente empurrar os mesmos dados pelo fio e esperar que ele funcione exatamente da mesma maneira - Na prática, isso geralmente funciona (e é a base de replay attacks ), mas o TCP é governado por uma máquina de estado, e você realmente precisa executar isso para cada conexão.

Se você precisar gerar uma grande quantidade de tráfego TCP e não se importar com os dados, basta iniciar vários fluxos enviando os dados para os ouvintes no sistema remoto (o que presumivelmente pode descartá-los).

Se você se preocupa com os dados que você deve fazer como lasrks sugeridos e checksum os dados recebidos (na sua totalidade) depois que eles saem da pilha TCP / IP ...

    
por 08.08.2012 / 18:36