I have an application that sends 100 of 186-byte (excluding headers) TCP messages back to back without gap from host A to host B.
Em seguida, você pode enviá-los mais rápido do que a rede pode transportá-los; nesse caso, quando a implementação TCP no remetente estiver pronta para enviar um pacote na rede, poderá haver várias mensagens enfileiradas, nas quais caso ele envie o máximo que puder em um único segmento TCP. O protocolo TCP oferece um serviço de fluxo de bytes, com a noção no de limites de mensagens, portanto, é permitido fazer isso.
I have already turned on Nagle's algorithm
O algoritmo de Nagle explicitamente faz o que você está dizendo que o TCP no remetente está fazendo :
Nagle's algorithm works by combining a number of small outgoing messages, and sending them all at once.
então transformá-lo em não impedirá isso. Desligá-lo pode, em alguns casos, impedir isso, mas, como seu aplicativo envia uma série de mensagens, ele provavelmente não o impedirá.
(por exemplo, a resposta para "por que o TCP no remetente mescla as mensagens?" é "porque pode").