Отличие WRED от RED состоит только лишь в том, что для пакетов каждого приоритета определен отдельный набор параметров. Например, рассмотрим простейший случай, когда в очередь маршрутизатора поступают пакеты с двумя приоритетами - далее под пакетом с низким приоритетом будем понимать маркированный пакет, а под пакетом с высоким приоритетом - обычный немаркированный пакет. Функция зависимости вероятности сброса пакета от значения среднего размера очереди ведет себя следующим образом: при одинаковой нагрузке должен соблюдаться принцип, что вероятность сброса маркированного пакета должна превышать вероятность сброса обычного пакета.

Параметризация алгоритма \VRED достаточно сложна, т.к. количество значений, которые необходимо установить, прямо пропорционально количеству приоритетов, с которыми пакеты могут поступать в рассматриваемый маршрутизатор. Например, если учесть, что при реализации АИ РНВ количество приоритетов может возрасти до 12, то для полной параметризации \VRED необходимо установить значения 12* {тз_пХ_1;п, гг.ахХ_^, тахХ_р, аудХ} параметров, где X - номер приоритета. Частный случай функции вероятности сброса пакета для двух приоритетов алгоритма \VRED представлена на рис. 2.57.

маркировка пакетов может изменить вероятность сброса пакета 2.6.2.3.2. Алгоритм RIO

Рис. 2.57. \NRED: маркировка пакетов может изменить вероятность сброса пакета 2.6.2.3.2. Алгоритм RIO

Алгоритм управления очередью RIO [Clark98 (RED In & Out) полностью аналогичен алгоритму RED за исключением того, что он параметризируется двумя наборами значений параметров - каждый набор для отдельного класса пакетов. Предполагается, что существует два класса пакетов - немаркированные (in-profile), т.е. когда пакет принадлежит потоку, значения параметров которого не превышают заранее определенных величин, и маркированные (out-profile), т.е. когда пакет принадлежит потоку, значения параметров которого превышают заранее определенные величины. RIO различает оба класса пакетов посредством анализа заголовка и поэтому имеет возможность осуществлять сброс маркированных пакетов с большей вероятностью, нежели немаркированных, таким образом обеспечивая защиту от сброса немаркированным пакетам.

В связи с тем, что алгоритм RIO является модификацией алгоритма RED, очевидно, что принципы функционирования этих алгоритмов одинаковы. Фактически RIO является усложненной версией RED, т.к. существует необходимость контролировать два набора параметров: один

- для немаркированных пакетов, другой - для маркированных.

Рассмотрим принцип функционирования алгоритма RIO, метакод которого приведен на рис. 2.58. Очевидно, что при поступлении пакета в очередь, необходимо определить к какому классу относится данный пакет. Если пакет немаркированный (далее для простоты будем называть такой пакет In-пакет), то осуществляется вычисление среднего размера очереди avg in, которая состоит только из In-пакетов. Если пакет маркированный (далее для простоты будем называть такой пакет Out-пакет), то осуществляется вычисление среднего размера всей очереди avg total. Здесь стоит отметить важную деталь, что вероятность сброса In-пакета зависит от среднего размера очереди, состоящей только из In-пакетов, в то время как вероятность сброса Out-пакета зависит от среднего размера очереди, состоящей из пакетов обоих классов, In-пакетов и Out-пакетов.

Заметим, что все пакеты независимо от их класса поступают в одну физическую очередь типа FIFO. Очередь, состоящая только из In-пакетов, физически не существует, ее размер подсчитывается специальной процедурой. На рис. 2.59 представлены функции вероятности сброса пакета в зависимости от среднего размера очереди для In-пакетов и Out-пакетов. Как видно и как можно предположить, исходя из принципов функционирования алгоритма RED, для каждого класса пакетов необходимо определить следующие параметры функционирования:

min_in : нижняя фаница для In-пакетов;

max_in : верхняя граница для In-пакетов;

min_out : нижняя граница для Out-пакетов;

max_out : верхняя граница для Out-пакетов;

max_in_p : максимальное значение вероятности сброса для 1п-накетов;

max__out_p : максимальное значение вероятности сброса для Out-пакетов.

Таким образом, суммируя вышесказанное, определяем наборы параметров, на базе которых вычисляется вероятность сброса поступающего пакета: для In-пакетов {min_in, max_in, rr.ax_in_p, avg__in} и для Out-пакетов {min out, max__out, max_out_p, avg__total}.

Посредством определения этих параметров определяется три области функционирования системы относительно In-пакетов: «нормальное функционирование» avg_in е [0; rr,in_in], «предотвращения перегрузки» avg in € [min_in; max_in] и «управления перегрузкой» avg_in € [rr.ax_in; оо i, а также три области функционирования системы относительно Out-пакетов: «нормальное функционирование» avg coral е [0; ,T.in_out], «предотвращение перегрузки» avg_total е [mir._out; max out] и «управления перегрузкой» avg__total е [max_out; 00]-

Метакод алгоритма RIO

Рис. 2.58. Метакод алгоритма RIO

функции вероятности сброса пакета в зависимости от среднего размера соответствующей очереди

Рис. 2.59. RIO: функции вероятности сброса пакета в зависимости от среднего размера соответствующей очереди Для эффективного использования алгоритма RIO, реализованного в маршрутизаторах домена DiffServ, необходимо осуществлять корректную настройку параметров алгоритмов. Как и в случае с RED, неправильная настройка параметров алгоритма может привести к значительному ухудшёнию параметров функционирования машрути-затора. В первую очередь необходимо определить каким образом можно реализовать защиту немаркированных пакетов (In-пакетов) от сброса. Существует три базовых принципа, совместная реализация которых позволяет обеспечить эффективное функционирование RIO:

• изначально значение нижней границы для In-пакетов должно быть установлено больше значения нижней границы для Out-пакетов, т.е. min_out < min_in. Это соотношение позволяет быть уверенным, что маршрутизатор с реализованным алгоритмом RIO, при достижении определенной нагрузки (эту точку интуитивно можно определить, как момент зарождающейся перегрузки) начнет сбрасывать только Out-пакеты;

• во время фазы «предотвращения перегрузки» количество сброшенных Out-пакетов будет превышать количество сброшенных In-пакетов, если выполняется условие max_in_p < max_out_p;

• если установить значение верхней границы для In-пакетов существенно больше, чем значение верхней границы для Out-пакетов, т.е. ir.ax_in >> max_out, то фаза «управления перегрузкой» для Out-пакетов наступит существенно раньше, и поэтому в этот момент все Out-пакеты будут сбрасываться.

Таким образом, кратко динамику поведения RIO можно описать следующим образом. При достаточно низких нагрузках RIO не вмешивается в процесс поступления и обслуживания пакетов. Как только нагрузка достигает определенного уровня, неявно заданного параметром min_out, то RIO начинает осуществлять вероятностный сброс Out-пакетов. С ростом нагрузки процент сброшенных Out-ла-кетов растет. При определенном состоянии, достаточно близком к перегрузке, In-пакеты и Out-пакеты могут сбрасываться поочередно, но RIO обеспечивает значение вероятности сброса In-пакета существенно ниже, нежели значение вероятности сброса Out-пакета. Однако, при правильно сконфигурированном RIO такого случая произойти не должно, только в случае, когда в очереди находятся только In-пакеты, входящий In-пакет может быть сброшен.

В ряде работ, среди которых следует отметить [MelliaOl], были приведены значения параметров алгоритма RIO для разных типов трафика и различных реализаций архитектуры DiffServ. Однако, в связи с тем, что DiffServ пока не является коммерчески поддержаной архитектурой, однозначных рекомендаций, подтвержденных реальной эксплуатацией оборудования с реализованным RIO, не существует.

Алгоритмы класса mred | Управление трафиком и качество обслужевания в сети | Алгоритм fred