Cada quadro passa por vários buffers à medida que você os envia: O buffer do aplicativo, o buffer do protocolo, o buffer da interface do software e o buffer da interface de hardware. À medida que você começa a enfatizar a pilha enviando dados de alta velocidade, você preenche esses buffers e bloqueia ou perde dados. Você também tem estratégias de pontualidade e pesquisa que podem afetar seu desempenho. Por exemplo, usando um buffer maior e pesquisando com menos frequência, você pode obter um desempenho muito melhor enquanto sacrifica a latência.
O TCP é otimizado para transferências em massa de alta velocidade, enquanto o UDP é otimizado para baixa latência no kernel do Linux. Isso tem um impacto nos tamanhos de buffer e em como os dados são pesquisados e entregues. Além disso, você freqüentemente tem descarregamento para hardware para TCP. Eu esperaria um desempenho consideravelmente melhor para o TCP comparado ao UDP.
Observe que o envio de dados em alta velocidade pelo UDP geralmente é uma má ideia, a menos que você implemente seu próprio controle de congestionamento. O TCP protege sua rede contra colapsos de congestionamento. Use o UDP quando você tiver pequenas quantidades de dados ou requisitos de alta pontualidade.