Tamanho mínimo da comunicação TCP

2

Estou enviando pequenas quantidades de dados (até 100 bytes) a cada 10 minutos dos dispositivos para o servidor TCP. No meu caso, a sobrecarga parece ser enorme (pagamos por cada byte). Descobri que eu tenho pelo menos 7-10 pacotes (aperto de mão de três vias (3), solicitação com ack (2), resposta com ack (2, opcional) e derrubar (3)). A sobrecarga total é de pelo menos 400 bytes (cabeçalho TCP / IP de 40 bytes para cada pacote).

As perguntas são:

  • Qual é a maneira eficiente de enviar dados tão pequenos de forma confiável? (UDP com ack?)
  • Por que meus cabeçalhos são maiores que 40 bytes (60 ou 52)? Por exemplo, este:

    0x0000:  4500 0034 73d7 4000 3506 d2ee 5c17 1b9b  [email protected]...\...
    0x0010:  2599 61b3 be7e 23a3 31a9 710a 6a2f 6371  %.a..~#.1.q.j/cq
    0x0020:  8010 0073 2672 0000 0101 080a 02dc 02ef  ...s&r..........
    0x0030:  1dc2 dad6                                ....
    
  • Como posso imprimir uma lista de valores-chave de cabeçalhos em vez de valores hexadecimais? (isso é menor)

por ruruskyi 03.06.2013 / 17:27

2 respostas

6

What is efficient way for sending such small amounts of data reliably? (UDP with ack?)

Sim, isso é essencialmente para o que a UDP foi inventada. Isso ou use conexões TCP de longa duração.

Why my headers are bigger than 40 bytes (60 or 52)?

A maioria dos sistemas operacionais inclui muito mais do que o mínimo necessário.

How can I print key-value list of headers instead of hex values?

Capture o pacote no Wireshark e descarte sua análise.
Pode demorar um pouco mais do que isso para obter o formato de "valor-chave", dependendo do que você está procurando.

How long TCP connection can live?

Tecnicamente, para sempre. Realisticamente, isso depende ... O TCP em si não tem limite, as conexões podem permanecer vivas por anos concebivelmente. Realisticamente, a maioria dos aplicativos tem um tempo limite no qual eles desconectam os clientes inativos. Além disso, os firewalls geralmente soltam regras com estado para conexões inativas após um longo período de tempo.

Is TCP sending additional packets if you keep connection open?

Se você tem keep-alives ativados, sim. Caso contrário, provavelmente não. Depende da implementação.

Is it efficient to keep all their connections open?

Demora memória para manter cada conexão aberta (alguns KB geralmente). Uma ou duas mil conexões levarão apenas alguns MB. Milhões de pessoas começam a cortar o "monte" de memória. Sistemas operacionais modernos podem facilmente rastrear milhares de conexões; mas seu aplicativo deve ser razoavelmente projetado para acomodar tantos.

    
por 03.06.2013 / 17:38
0

What is efficient way for sending such small amounts of data reliably?

Definitivamente, UDP, eu usaria UDP com alguns bytes do pacote reservado para checksum ou outro mecanismo de detecção de erros para meus dados, apenas por precaução.

    
por 03.06.2013 / 18:18

Tags