Я занимался исследованием алгоритма Нэгла из любопытства. Я понимаю основную концепцию, лежащую в основе этого (пакеты TCP содержат значительную часть служебной информации, особенно при работе с небольшими полезными нагрузками), но я не уверен, что уловил реализацию.
Я читал эту статью в Википедии, но мне все еще неясно, как она работает. Давайте рассмотрим пример подключения по Telnet. Соединение установлено, и я начинаю печатать. Допустим, я набираю три символа (например, cat
) и нажимаю клавишу возврата. Сейчас мы говорим cat\r\n
, что составляет всего 5 байтов. Я думаю, что это не будет отправлено, пока мы не поставим в очередь достаточно байтов для отправки - и все же, действительно отправляется немедленно (с точки зрения пользователя), так как cat
сразу же выполняется при нажатии возврата.
Я думаю, что у меня есть фундаментальное недопонимание того, как работает алгоритм, особенно относительно бита, где «если в канале все еще есть неподтвержденные данные, ставьте в очередь, иначе отправляйте немедленно».