O algoritmo Nagle, em homenagem ao engenheiro John Nagle, foi projetado para reduzir o congestionamento da rede causado por pequenos problemas de pacotes com aplicativos TCP. As implementações do UNIX começaram a usar o algoritmo Nagle na década de 1980 e continua sendo um recurso padrão do TCP hoje.
Como funciona o algoritmo de Nagle
O algoritmo de Nagle processa dados no lado de envio de aplicativos TCP por um método chamado nagling. Ele detecta mensagens de tamanho pequeno e acumula essas mensagens em pacotes TCP maiores antes de enviar dados pela rede. Esse processo evita a geração desnecessariamente grande de pequenos pacotes.
A especificação técnica do algoritmo de Nagle foi publicada em 1984 como RFC 896. As decisões sobre a quantidade de dados a serem acumuladas e o tempo de espera entre os envios são críticas para seu desempenho geral.
Os benefícios de insistir
Nagling pode utilizar eficientemente a largura de banda de uma conexão de rede às custas de adicionar atrasos ou latência. Um exemplo descrito na RFC 896 ilustra os benefícios potenciais da largura de banda e o motivo de sua criação:
- Se um aplicativo TCP que intercepta as teclas do teclado deseja comunicar cada caractere digitado a um receptor, ele pode gerar uma série de mensagens, cada uma contendo 1 byte de dados.
- Antes que essas mensagens possam ser enviadas pela rede, cada uma deve ser empacotada com informações de cabeçalho TCP conforme exigido pelo TCP/IP. Cada cabeçalho varia em tamanho entre 20 e 60 bytes.
- Sem reclamar, este aplicativo de exemplo geraria mensagens de rede consistindo de 95% ou mais de informações de cabeçalho (pelo menos 20 de 21 bytes) e 5% ou menos de dados reais do teclado do remetente. Usando o algoritmo Nagle, os mesmos dados podem ser entregues usando menos mensagens, resultando em uma grande economia de largura de banda.
Os aplicativos controlam seu uso do algoritmo Nagle com a opção de programação de soquete TCP_NODELA. Os sistemas Windows, Linux e Java normalmente habilitam o Nagle por padrão. Portanto, aplicativos escritos para esses ambientes precisam especificar TCP_NODELAY para desligar o algoritmo.
Limitações
Aplicativos que exigem uma resposta rápida da rede, como videochamadas e jogos on-line, podem não funcionar bem quando o Nagle está ativado. Os atrasos causados enquanto o algoritmo leva mais tempo para reunir pedaços menores de dados podem desencadear um atraso perceptível visualmente em uma tela ou em um fluxo de áudio digital. Esses aplicativos normalmente desabilitam o Nagle.
Este algoritmo foi originalmente desenvolvido em uma época em que as redes de computadores suportavam menos largura de banda do que hoje. O exemplo descrito acima foi baseado nas experiências de John Nagle na Ford Aerospace no início da década de 1980, onde as compensações irritantes na rede de longa distância lenta, fortemente carregada e de longa distância da Ford faziam sentido. Há cada vez menos situações hoje em que os aplicativos de rede podem se beneficiar de seu algoritmo.
O algoritmo de Nagle só pode ser usado com TCP. Outros protocolos, como UDP, não o suportam.