TCP 30 pacotes pequenos por segundo conexão de inundação com servidor

1

Estou testando a conexão com o cliente flash e o servidor de nuvem ( boost::asio para software) pela conexão TCP. Minha conexão com o servidor já é muito ruim - em média, um ping de 120 ms. Eu encontrei quando eu começo a enviar pacotes com tamanho de 2 bytes (sem cabeçalho tcp) com velocidade de 30 pacotes / s - ping crescer para 170-200 média. Eu acho que é muito ruim e minha má conexão e mau provedor de nuvem é razão para este ping alto sem qualquer carga. O que você acha? (Eu testei meu software - ele pode calcular cerca de 50k pequenos pacotes / s, então o software não é um problema).

Meço meu ping através do cliente flash - envia um pacote com registro de data e hora e envia imediatamente do servidor para o cliente.

    
por Denis Ermolin 21.10.2012 / 16:14

1 resposta

1

My connection with server already is really poor - 120 ms ping in average.

Eu fiz um teste semelhante a www.google.com , testando o tempo de resposta sobre o TCP e obtendo 160 milissegundos. O Google tem conectividade ruim? O TCP não foi projetado para tempos de resposta rápidos.

I measure my ping through flash client - send packet with timestamp and immediatly send from server to client.

O TCP, por padrão, retarda até 200 milissegundos para fornecer uma utilização de rede mais eficiente. Você não está medindo nada, exceto o TCP, especificamente fazendo o que foi projetado para fazer. Se você olhar de perto para o tráfego de rede, verá que a maioria dos pacotes TCP realmente contém muito mais do que dois bytes de dados.

Você está esperando um comportamento horrivelmente ineficiente. Enviar 30 pacotes por segundo, cada um contendo apenas dois bytes de dados, é incrivelmente estúpido e o TCP não é estúpido o suficiente para fazer isso.

Duas sugestões:

Não chame isso de "ping". Isso faz com que as pessoas pensem que é uma medida de ida e volta de rede, em vez de uma medida do tempo de resposta sobre o TCP.

Não diga "30 pacotes / s", a menos que você tenha medido o tráfego da rede. Quando você escreve alguns bytes em uma conexão TCP, não há razão para esperar que corresponda a um pacote. Pacotes são coisas de rede. Grava em uma conexão TCP são coisas de aplicativo. Aplicações confusas e conceitos de nível de rede vão realmente bagunçar você quando você lida com o TCP.

Além disso, por que você está fazendo tantas pequenas gravações? Reúna os dados em gravações maiores. Sim, o TCP fará isso por você, mas ainda é muito mais eficiente se você fizer isso em seu aplicativo.

Se você está apenas fazendo essas pequenas gravações horríveis para testar o desempenho, pare de fazer isso. Não lhe dará dados úteis. Se essas pequenas gravações horríveis replicam seu cenário de uso real e o tempo de resposta é importante, então você precisa trabalhar para consertar seu protocolo para que faça algum sentido.

    
por 21.10.2012 / 18:21