Um segmento TCP possui muita sobrecarga. Quando você envia uma mensagem de 10 bytes com um pacote TCP, você realmente envia:
- 16 bytes de cabeçalho IPv4 (aumentará para 40 bytes quando o IPv6 se tornar comum)
- 16 bytes do cabeçalho TCP
- 10 bytes de carga útil
- sobrecarga adicional para os protocolos de link de dados e camada física usados
resultando em 42 bytes de tráfego para transportar 10 bytes de dados. Portanto, você utiliza apenas menos de 25% de sua largura de banda disponível. E isso ainda não explica a sobrecarga que os protocolos de nível inferior, como Ethernet ou PPPoE, consomem (mas é difícil estimar porque há muitas alternativas).
Além disso, muitos pacotes pequenos sobrecarregam roteadores, firewalls, comutadores e outros equipamentos de infraestrutura de rede; portanto, quando você, seu provedor de serviços e seus usuários não investem em hardware de alta qualidade, isso pode se transformar em outro gargalo.
Por esse motivo, você deve tentar enviar todos os dados disponíveis ao mesmo tempo em um segmento TCP.
Sobre o tratamento da perda de pacotes : Quando você usa o TCP, não precisa se preocupar com isso. O protocolo em si garante que todos os pacotes perdidos sejam reenviados e os pacotes sejam processados em ordem, para que você possa assumir que todos os pacotes enviados chegarão ao outro lado e eles chegarão na ordem em que você os enviar. O preço para isso é que, quando houver perda de pacotes, seu player sofrerá um atraso considerável, porque um pacote descartado interromperá todo o fluxo de dados até que seja novamente solicitado e recebido.
Quando isso ocorre, você sempre pode usar o UDP. Mas então você precisa encontrar sua própria solução para e mensagens perdidas fora de ordem (que, pelo menos, garantias de que as mensagens que não chegam, chegam completa e sem danos).