Sunday, Feb 05th

Last update12:13:00 PM GMT

Вы находитесь на: FreeBSD Сетевые протоколы Избежание небольших пакетов

Избежание небольших пакетов

Сетевой трафик демонстрирует бимодальное распределение размеров. Переносы больших объемов данных имеют тенденцию использовать для максимальной пропускной способности пакеты максимально возможного размера.

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

 

В быстрой локальной сети, такой, как Ethernet, использование пакетов с одним символом часто не представляет проблемы, поскольку полоса пропускания сети обычно не насыщается. В протяженных сетях, соединенных медленными или перегруженными сетями, или в беспроводных LAN, которые являются и медленными, и теряющими данные, желательно собирать данные в течение определенного периода времени, а затем отправлять их в одном сетевом пакете. Для сбора ввода в течение фиксированного времени - обычно от 50 до 100 миллисекунд - и затем отправки их в одном пакете были предложены различные схемы.

Однако эти схемы заметно снижают скорость эхо-отображения символов в быстрых сетях и часто сохраняют несколько пакетов в медленных сетях. В отличие от этого простая и элегантная схема для снижения трафика небольших пакетов была предложена Nagle [1984]. Эта схема разрешает отправить первый октет вывода в пакете без задержки. Однако до подтверждения этого пакета новые небольшие пакеты не могут быть отправлены. Если поступает достаточно новых данных для заполнения пакета максимального размера, отправляется другой пакет. Как только ожидающие данные подтверждаются, может быть отправлен ввод, помещенный в очередь в ожидании первого пакета.

Лишь один небольшой пакет может находиться в ожидании для соединения в одно и то же время. Конечным результатом является то, что данные из небольших операций вывода помещаются в очередь в течение времени обращения. Если время обращения меньше, чем время поступления новых символов, что имеет место в сеансе удаленного терминала в локальной сети, передачи никогда не задерживаются и время ответа остается небольшим. Когда вклиниваются медленные сети, ввод после первого символа помещается в очередь, и следующий пакет содержит ввод, полученный в ходе предыдущего времени обращения. Такой алгоритм привлекателен как из-за своей простоты, так и из-за своей самонастраивающейся природы.

В конечном счете люди обнаружили, что этот алгоритм не работал хорошо для определенных классов сетевых клиентов, которые отправляли потоки небольших запросов, которые не могли быть собраны в пакеты. Одним из таких клиентов была сетевая система X Window [Scheifler & Gettys, 1986], которая требовала немедленной доставки небольших сообщений для получения обратной связи реального времени для интерфейсов пользователя, таких, как установка размеров нового окна перетаскиванием.

Поэтому разработчики добавили опцию TCPNODELAY, чтобы аннулировать этот алгоритм в соединении. Эта опция может быть установлена с помощью системного вызова setsockopt, который достигает TCP через процедуру tcp_ctloutput(). К сожалению, библиотека системы X Window всегда устанавливает флаг TCPNODELAY, вместо того чтобы устанавливать его лишь тогда, когда клиент использует позиционирование с использованием мыши.


Похожие:
Еще по теме:
Советуем прочитать:

Сейчас 20 гостей онлайн