Алгоритм Nagle — уменьшаем время доставки пакетов

Алгоритм Nagle

Алгоритм Nagle является средством повышения эффективности сетей TCP/IP за счет сокращения количества пакетов, которые необходимо отправить по сети. Он был придуман Джоном Нэйглом во время работы в Ford Aerospace и опубликован в 1984 году в ответ на запрос комментариев (Request for Comments) с заголовком «Управление перегрузкой» в сетях IP/TCP (см. RFC 896). В RFC он описывает «проблему малого пакета», где приложение неоднократно передает данные в малыми партиями, часто размером всего 1 байт. Поскольку TCP-пакеты имеют 40-байтовый заголовок (20 байтов для TCP, 20 байтов для IPv4), это приводит к формированию пакету в 41 байт с 1 байтом полезной информации, что является огромными накладными расходами.

Данная ситуация часто возникает в сеансах Telnet, где большинство нажатий клавиш генерируют один байт данных, которые передаются немедленно. Хуже того, по медленным каналам многие подобные пакеты передаются практически одновременно, что часто приводит к коллапсу. Алгоритм Нейгла работает, объединяя несколько небольших исходящих сообщений в единый пакет, а затем отправляя их получателю. В частности, до того момента пока адресант не получил пакет подтверждающий получение данных адресатом он продолжает накапливать в буфере пакеты до тех пор, пока не достигнет максимального размера полезного блока данных MSS, таким образом отправляем все пакеты за один раз.

По умолчанию Windows использует алгоритм Nagle при обработке сообщений. Это означает, что для того, чтобы сообщение было отправлено, его размер должно быть не более максимального возможного полезного блока данных для TCP-пакета (сегмента) MSS (Maximum segment size), что в некоторых ситуациях может мешать работе приложений, понижая их эффективность при работе с малыми пакетами или при взаимодействии с системами реального времени (real-time systems), когда скорость доставки критична. В данных ситуациях нам поможет отключение алгоритма Nagle, как следствие значительно снизится время доставки пакета.

Отключаем алгоритм Нейгла

Чтобы отключить алгоритм Nagle, выполните следующие шаги:

  1. Нажмите комбинацию клавиш Win+R и напечатайте в строке regedit.
  2. Перейдите к следующей ветке реестра  HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters\Interfaces.
  3. Увидите несколько интерфейсов в следующем формате {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}.
  4. Перейдите к ним и найдите подсказки (обычно это значение DhcpIPAddress), которые укажут, какой из них интерфейс по умолчанию. Альтернативный вариант — выполнить следующие шаги для всех непустых интерфейсов, если вы хотите отключить алгоритм Нейгла на всех устройствах.
  5. Щелкните правой кнопкой мыши на пустом месте в правом окне и выберите New -> DWORD (32-bit) Value и установите его имя в TcpAckFrequency. Затем дважды щелкните на полученное значение, чтобы изменить его значение на 1.
  6. Повторите шаг 4, но на этот раз установите имя ключа DWORD (32-разрядное значение) в значение TCPNoDelay. Затем снова убедитесь, что вы изменили значение ключа на 1
  7. Перезагрузите Windows, задача выполнена.

Принципиальная схема обмена пакетами после того, как отключили алгоритм Nagle:

Предыдущая запись Вышла версия RouterOS 6.40rc36 с новой реализацией моста Следующая запись Новости Mikrotik, Генератор трафика, №77 август 2017

Оцените статью
Информационный ресурс для любителей компьютеров и IT технологий