tamanho mínimo TCP / IP

0

Estou usando uma linguagem de alto nível em um PC para enviar uma mensagem via TCP / IP para um dispositivo remoto que é um dispositivo incorporado.
Estou enviando mensagens relativamente pequenas (< 255 bytes).
Devo assumir que haverá vários firewall, proxies e gateway entre meu PC e o dispositivo de destino. Devo também assumir que a mensagem poderia ser transmitida por rádio (GPRS, UMTS) antes de chegar ao dispositivo de destino.

Supondo que os buffers de hardware e software do dispositivo de destino sejam grandes o suficiente (1000 bytes), Quão pequena deve ser a mensagem para que eu tenha certeza de que sempre será recebida em uma peça no nível de aplicativo do dispositivo de destino?

Em outras palavras, devo incluir o tamanho da mensagem no protocolo do aplicativo ou é inútil, já que a mensagem é pequena?

    
por FKDev 25.02.2014 / 11:46

2 respostas

1

Como afirmado na resposta de akira, o tamanho mínimo de mensagem que um host deve aceitar para IPv4 é de 576 bytes, portanto, os pacotes de 255 bytes não devem ser fragmentados.

No entanto, a maioria dos hosts hoje implementam o algoritmo de Nagle , que aguarda 200ms antes de enviar pacotes para tentar agrupar mensagens. Isso significa que, se você enviar mensagens em um estouro rápido, elas poderão ser agrupadas e, em seguida, fragmentadas. O TCP não é destinado a datagramas, mas a fluxos. Caixas na rede também podem estar fazendo coisas estranhas (nunca se sabe).

Sugiro que você inclua o tamanho da mensagem no protocolo do aplicativo. Isso garante que você não terá problemas com o TCP fragmentando suas mensagens de uma maneira que você não esperava, e, como indicado na resposta da akira, permite que você um dia transfira por outra mídia.

    
por 25.02.2014 / 23:03
1

Você está tentando ajustar o tamanho do pacote TCP / IP à chamada MTU (unidade máxima de transmissão). Você pode fazer isso. Ou você pode ignorá-lo e, como você está usando TCP / IP, basta enviar o pacote: ele passará pela rede, será cortado em pedaços e colado automaticamente mais tarde e, em seguida, o pacote chegará.

Se a sua mensagem for muito pequena e estiver abaixo do "tamanho mínimo do datagrama", essa citação fará você feliz:

The MTU must not be confused with the minimum datagram size that all hosts must be prepared to accept, which has a value of 576 bytes for IPv4[2] and of 1280 bytes for IPv6

Portanto, se sua mensagem for menor que 556 bytes (576 bytes - 20 bytes ipv4 header), ela deve chegar como um espaço.

Mas mesmo com fragmentação: o receptor recebe um pacote completo somente se todos os fragmentos (possíveis) chegassem. O que torna um pouco inútil "cuidar" tanto do tamanho da mensagem para evitar a fragmentação.

Além do tamanho da transferência, pode ser uma boa ideia incluir o tamanho da mensagem ao longo da mensagem (talvez você queira transferir a mensagem em diferentes mídias em um dia)

    
por 25.02.2014 / 12:09