Неясно, по алгоритму Нейгла - PullRequest
1 голос
/ 24 июня 2009

Я занимался исследованием алгоритма Нэгла из любопытства. Я понимаю основную концепцию, лежащую в основе этого (пакеты TCP содержат значительную часть служебной информации, особенно при работе с небольшими полезными нагрузками), но я не уверен, что уловил реализацию.

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

Я думаю, что у меня есть фундаментальное недопонимание того, как работает алгоритм, особенно относительно бита, где «если в канале все еще есть неподтвержденные данные, ставьте в очередь, иначе отправляйте немедленно».

Ответы [ 2 ]

5 голосов
/ 24 июня 2009

Данные отправляются немедленно, только если сервер уже ответил на любые предыдущие сообщения от вас (или это ваш первый контакт с ним в этом сеансе). Таким образом, по мере того, как сервер становится более загруженным и медленным, чтобы ответить, чтобы избежать переполнения его слишком большим количеством пакетов, данные отправляются в очередь до максимального размера пакета перед отправкой.

То есть, отправляются ли данные немедленно или не только, можно определить в контексте предыдущих сообщений, если таковые имеются.

0 голосов
/ 11 августа 2011

Читать этот пост , он достаточно углублен и многое прояснил для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...