O tráfego de teclado sobre TCP envia uma carga útil minúscula por pacote: uma única tecla pressionada se torna um segmento de algumas dezenas de bytes envolto em um cabeçalho de 40 bytes. Em enlaces lentos, isso inunda a rede com pacotes que carregam quase nenhum dado, o problema que Nagle chamou de doença do pacote pequeno ou da janela tola.
As correções ingênuas são enviar imediatamente (o que desperdiça largura de banda) ou esperar até que um segmento completo seja armazenado em buffer (o que adiciona latência). A regra de Nagle fica entre as duas: manter um pequeno segmento pendente e agrupar o restante atrás de sua confirmação.
O agrupamento é natural porque o TCP já espera por essa confirmação; o algoritmo apenas a transforma em regra em vez de acidente, e os aplicativos interativos obtêm baixa latência com uma fração da contagem de pacotes.
Enviar um pequeno pacote, agrupar o restante até o ACK
Pacotes de um byte desperdiçam a maior parte de seus bytes em cabeçalhos.
Agrupar atrás de um ACK não adiciona nenhuma espera fixa nova.
Reduz a contagem de pacotes sem a latência do armazenamento em buffer de segmento completo.
Para corrigir o desperdício, permita uma pequena unidade e agrupe o restante atrás de sua confirmação, limitando o custo por uma espera que você já estava fazendo.
Especificado na RFC 1122 como um requisito importante do TCP, o algoritmo de Nagle foi distribuído em praticamente todas as pilhas TCP e se tornou um exemplo clássico de trocar um pouco de latência por uma grande redução de carga.
CONFIRA AS EVIDÊNCIAS
As fontes
- RFC 896: Congestion Control in IP/TCP Internetworks IETF · rfc-editor.org
- RFC 1122: Requirements for Internet Hosts - Communication Layers IETF · rfc-editor.org