Como configurar o sistema operacional para montar novamente os segmentos TCP

1

Eu tenho um aplicativo que está lendo dados TCP de um soquete. O dispositivo de envio está enviando um total de 1400 bytes de dados para o soquete do servidor na outra extremidade. Em algum lugar ao longo do caminho, o pacote está sendo segmentado / fragmentado em um segmento de 1024 bytes e em um segmento de 376 bytes. Para receber os dados corretamente no lado do meu aplicativo, tenho que ler o soquete duas vezes e montar o pacote no nível do aplicativo, o que pode ter problemas com muito tráfego.

De tudo que eu li, a remontagem de segmentos TCP é tratada na Camada IP. Estou executando o Windows Server 2012 e meu aplicativo está utilizando o Winsock. Existe uma maneira de configurar o sistema operacional para reunir esses pacotes à medida que são recebidos na porta dessa camada?

    
por sam 18.05.2018 / 22:49

1 resposta

3

O TCP é um protocolo de streaming e não um protocolo de mensagens. A pilha TCP no sistema operacional garante que os dados sejam encaminhados para o aplicativo na ordem correta e que nenhuma perda de dados e nenhuma duplicação de dados seja feita. Ele não se preocupa em manter limites de pacotes, já que eu disse que o TCP é um protocolo de fluxo. Além disso, o remetente é livre para dividir uma única gravação em vários pacotes ou combinar várias gravações em um único pacote. Ele fará a divisão para adaptar o tamanho do pacote ao MTU / PMTU, a fim de evitar a fragmentação do pacote durante a entrega e a combinação para reduzir a sobrecarga de entrega.

Assim, o aplicativo nunca deve depender dos limites implícitos de mensagens devido à maneira como o aplicativo de envio gravou os dados, mas, em vez disso, limites de mensagens explícitas (no nível do aplicativo) devem ser usados.

Is there a way to configure the OS to re-assemble these packets as they are received on the port on this layer?

Não, você precisa lidar com isso corretamente em seu aplicativo.

    
por 18.05.2018 / 23:03