Одним из достоинств алгоритма RED считается обеспечение принципа «справедливого распределения ресурсов». Однако более глубокие исследования этого вопроса показали, что при определенных условиях нельзя говорить, что RED позволяет всем соединениям честно конкурировать в борьбе за сетевые ресурсы [Lin97], RED ориентирован на работу с соединениями TCP, в то время как нагрузка, создаваемая протоколом UDP, также поступает в ту же самую очередь и, по причине отсутствия механизма управления нагрузкой, этот тип нагрузки бесконтрольно (со стороны источника) заполняет буферные пространства и создает перегрузку.

Для исследования влияния нагрузки UDP на соблюдение принципа «справедливого распределения ресурсов» в [Lin97] были введены определения для базовых типов нагрузки в сети Интернет:

• «неадаптивная» нагрузка (non-adaptive): нагрузка этого типа забирает столько сетевых ресурсов, сколько для него требуется (или если количество ресурсов меньше, чем ей требуется - то все оставшиеся), при наступлении перегрузки источник не снижает скорость передачи и, соответственно, игнорирует сброс пакетов. В качестве примера можно привести некоторые аудио и видеоприложения;

• «устойчивая» нагрузка (robust): соединения TCP с малым значением RTT. Эти соединения достаточно быстро фукционируют и скорость реакции на возникающие перегрузки высока. Количество пакетов, находящихся в буфере, достаточно велико. Примером может служить трафик HTTP;

• «хрупкая» или «неустойчивая» нагрузка (fragile): соединения TCP с большим значением RTT и/или малой скоростью. Время реакции этих соединений на перегрузку велико и количество пакетов, находящихся в буфере, сравнительно мало. Трафик, генерируемый интерактивными приложениями, например, Telnet, можно отнести к этому типу нагрузки.

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

Суммарная нагрузка упадет, а неадаптивный трафик, пока нагрузка от соединений TCP мала, начнет занимать ресурсы и вероятность сброса для этого типа нагрузки временно существенно понизится. Однако, увеличение размеров окон cwnd соединений TCP, относящихся к устойчивой и хрупкой нагрузке, приведет к новой перегрузке. Причем сложится ситуация, когда неадаптивная нагрузка будет занимать достаточно большое количество ресурсов, устойчивая нагрузка - меньше, чем неадаптивная, а хрупкая - совсем мало по причине достаточно медленного обновления размеров окон cwnd из-за высокого значения RTT.

Вероятность сброса для поступающего пакета высока, т.к. значение среднего размера очереди также высоко, т.е. пакеты соединений TCP будут сбрасываться даже если нагрузка, создаваемая ими, низка. Отметим, что в этом случае хрупкая нагрузка подвержена большим потерям, нежели устойчивая, в связи с тем, что время реакции на перегрузку высоко. В данном примере принцип «справедливого распределения ресурсов» не выполняется.

Для решения проблемы несоблюдения справедливого распределения ресурсов при функционировании RED была разработана его модификация FRED (Flow red). Алгоритм FRED позволяет эффективно изолировать неадаптивную нагрузку от TCP-соединений, а также обеспечить защиту пакетов низкоскоростных соединений TCP от несправедливого сброса. Выполнять столь сложные функции алгоритму FRED позволяет возможность управления состоянием для каждого потока, пакеты которого находятся в очереди маршрутизатора. Здесь и далее под «состоянием» будем понимать набор параметров, характеризующих конкретный отдельный поток.

Рассмотрим алгоритм функционирования FRED. Общие принципы функционирования эквивалентны принципам RED. В FRED дополнительно введены следующие параметры:

• min q: минимальное количество пакетов, которое поток имеет возможность поместить в буфер без потерь; задается для каждого потока;

• ma,x_q: максимальное количество пакетов, которое поток имеет возможность поместить в буфер; задается для каждого потока;

• avgcq: среднее значение размера очереди, состоящей только из пакетов определенного потока; задается для каждого потока;

• q_len: количество пакетов в буфере, относящихся к некоторому потоку; задается для каждого активного потока;

• strike: аддитивная переменная, определяющая, как часто поток не реагировал снижением скорости на возникшую перегрузку, задается для каждого потока. Потоки с высоким значением этой переменной пенализируются.

Алгоритм wred | Управление трафиком и качество обслужевания в сети | Защита хрупких соединений