Skip to content

Uma Visão Geral do Algoritmo de Nagle para Comunicação de Rede TCP

5 de maio de 2021

O algoritmo Nagle, em homenagem ao engenheiro John Nagle, foi projetado para reduzir o congestionamento da rede causado por problemas de pequenos pacotes com aplicativos TCP. As implementações do UNIX começaram usando o algoritmo de Nagle na década de 1980 e continua sendo um recurso padrão do TCP hoje.

Como funciona o algoritmo de Nagle

O algoritmo Nagle processa dados no lado de envio de aplicativos TCP por um método chamado nagling. Ele detecta mensagens de tamanho pequeno e as acumula em pacotes TCP maiores antes de enviar dados pela rede. Esse processo evita a geração de um número desnecessariamente grande de pequenos pacotes. A especificação técnica para o algoritmo de Nagle foi publicada em 1984 como RFC 896. As decisões sobre quantos dados acumular e quanto tempo esperar entre os envios são críticas para seu desempenho geral.

Os benefícios de Nagling

Nagling pode utilizar com eficiência a largura de banda de uma conexão de rede ao custo de adicionar atrasos ou latência. Um exemplo descrito no RFC 896 ilustra os benefícios potenciais da largura de banda e o motivo de sua criação:

  • Se um aplicativo TCP que intercepta pressionamentos de tecla 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 as informações do cabeçalho TCP, conforme exigido pelo TCP / IP. Cada cabeçalho varia em tamanho entre 20 e 60 bytes.
  • Sem reclamar, este exemplo de aplicativo geraria mensagens de rede consistindo em 95 por cento ou mais de informações de cabeçalho (pelo menos 20 de 21 bytes) e 5 por cento ou menos de dados reais do teclado do remetente. Usando o algoritmo de Nagle, os mesmos dados podem ser entregues usando menos mensagens, resultando em grande economia de largura de banda.

Os aplicativos controlam o 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, os aplicativos escritos para esses ambientes precisam especificar TCP_NODELAY para desligar o algoritmo.

Lifewire / Bradley Mitchell

Limitações

Os aplicativos que exigem uma resposta rápida da rede, como chamadas de vídeo e jogos online, 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 compensações persistentes na rede de longa distância lenta, carregada e carregada da Ford faziam sentido. Existem cada vez menos situações hoje em que os aplicativos de rede podem se beneficiar de seu algoritmo. O algoritmo Nagle só pode ser usado com TCP. Outros protocolos, como UDP, não o suportam.