tanenbaum_seti_all.pages (525408), страница 121
Текст из файла (страница 121)
Но почему бы не сказать ему об этом прямо7 Такая идея привела к созданию подхода, при котором маршрутизатор сам отправляет источнику сдерживающий пакет. Информация об источнике берется из задержанного пакета. Исходный пакет помечается (специальный бнт в его заголовке устанавливается в единицу), чтобы он больше не порождал сдерживающих пакетов на пути следования, и отправляется дальше по своему обычному маршруту. Когда хост-отправитель получает сдерживающий пакет, он должен уменьшить трафик к указанному получателю на некоторый процент Х. Поскольку другие пакеты, направляющиеся к тому же адресату, скорее всего, в этот момент уже находятся в пути, они также породят сдерживающие пакеты.
Поэтому в течение фиксированного интервала времени хост должен игнорировать сдерживающие пакеты, относящиеся к тому же получателю. По истечении этого периода времени хост начинает прослушивать другой интервал на предмет сдерживающих пакетов. Если приходит хотя бы один, это означает, что линия все еще перегружена, поэтому хост еше сильнее снижает выходной поток и снова начинает игнорировать последующие сдерживающие пакеты. Если в течение второго интервала вРемени (периода ожидания сдерживающих пакетов) сдерживающие пакеты не приходят, хост может снова увеличить поток. Обратная связь, присутствующая в данном протоколе, может помочь предотвратить перегрузку, не ограничивая поток до тех пор, пока не возникнет необходимость, Хосты могут уменьшать трафик, изменяя свои стратегические параметры, например размер окна Обычно первый сдерживающий пакет уменьшает скорость передачи данных в два раза, следующий — в четыре и т.
д. Увеличения скорости производятся меньшими приращениями, чтобы избежать слишком быстрого повторения перегрузки. Алгоритмы борьбы с перегрузкой 453 Существуют различные варианты этого алгоритма борьбы с перегрузкой. Водном из них маршрутизаторами применяется несколько пороговых уровней загруженности линии. В зависимости от того, какой из порогов пересечен, сдерживающие пакеты могут содержать мягкое или строгое предупреждение либо ультиматум. В качестве варианта может измеряться длина очереди нли объем свободной памяти маршрутизатора. При этом можно использовать ту же экспоненциальную весовую функцию, что и для и, Сдерживающие пакеты для ретрансляционныхучастков При больших скоростях передачи данных и при сильной удаленности хостов с отправкой сдерживающих пакетов возникают проблемы, поскольку реакция на них оказывается крайне запоздалой.
Рассмотрим, к примеру, хост в Сан-Франциско (маршрутизатор А на рис. 5.25), посылающий поток данных на хост, расположенный в Нью-Йорке (маршутизатор Е! на рис. 5.25), со скоростью 155 Мбит/с. Если у нью-йоркского хоста станет кончаться буферная память, сдерживающему пакету потребуется около 30 мс на то, чтобы добраться обратно в Сан-Франциско и сообщить о том, что необходимо снизить объем графика. Распространение сдерживающего пакета схематично показано на второй, третьей и четвертой диаграммах рис. 5.25, а. За те 30 мс, пока этот пакет движется по сети, в сторону ньюйоркского маршрутизатора передается еще 4,6 Мбит данных, с которыми тоже надо как-то совладать.
Только к седьмой диаграмме (рис. 5.25, а) маршрутизатор заметит начавшееся снижение потока. Однако есть альтернативный метод, позволяющий бороться с этой проблемой. Он заключается в том, что сдерживающий пакет влияет на трафик каждого маршрутизатора, через который он проходит. Это показано на последовательности диаграмм на рис. 5.25, б. Как только сдерживающий пакет достигает точки Г, поток данных от Е в сторону 1) должен быть уменьшен. Таким образом, Г резервирует для потока большее количество буферной памяти; источник все еще продолжает ааваливать это направление своими данными.
Нагрузка иа 1) мгновенно спадает, как головная боль у страдальца, рекламирующего по телевизору чудодейственные пилюли. На следующем шаге сдерживающий пакет, продолжая свой путь, достигает Е и приказывает уменьшить по~ок в сторону Е В результате в течение какого-то времени точке Е приходится выдерживать повышенную нагрузку, но зато мгновенно освобождается от своего бремени точка Е Наконец. победный марш сдерживающего пакета приводит его к источнику всех бед— точке А, и теперь поток снижается на самом деле. Результатом применения метода сдерживания трафика на ретрансляционных участках является максимально быстрое устранение перегрузки в самой горячей точке за счет использования большего объема буферной памяти промежуточных маршрутизаторов.
Таким образом, перегрузка пресекается без потери пакетов. Эта идея обсуждается более подробно у (М!энга и Капах!а, 1992). $54 Глава 5, Сетевой уровень в С е — в» е Ж> 1 — сильный поток 2 — сдерживаемый пакет 3 — уменьшенный поток 4 — поток все вщв на максимальном уровне 5 — поток уменьшен Рис. 5.25. Сдерживающий пакет влияет только на источник (а); сдерживающий пакет влияет на все промежуточные участки (б) Сброс нагрузки Когда ни один из описанных ранее методов не помогает в борьбе с перегрузкой, маршрутизаторы могут ввести в бой тяжелую артиллерию — сброс нагрузки. Сбросом нагрузки называется простое игнорирование маршрутизаторами пакетов, которые они не могут обработать. Своим происхождением этот термин обя- Алгоритмы борьбы с перегрузкой 456 зан системам электроснабжения, где он означает отключение в случае перегрузок отдельных участков во избежание выхода из строя всей системы. Обычно такое происходит в морозные зимние дни, когда потребности в электроэнергии для обогревателей резко возрастают.
Маршрутизатор, заваленный пакетами, может. выбирать пакеты просто случайным образом, но обычно имеются более оптимальные варианты. Выбор пакета, который будет отвергнут, может зависеть от приложения, пересылающего этот пакет. Для передачи файла более старый пакет ценится выше нового, так как отвержение пакета номер 6 и сохранение пакетов с номерами с 7-го по 10-й может привести к тому, что получатель запросит еще раз пакеты с 6-го по 10-й (если получатель просто отвергает все пакеты, приходящие не в том порядке). В файле, состоящем из 12 пакетов, выбрасывание 6-го пакета может потребовать повторной передачи пакетов с 7-го по 12-й, тогда как выбрасывание пакета номер 10 может потребовать повторной передачи только пакетов с 10-го по 12-й.
Для мультимедийных приложений, напротив, новый пакет важнее старого. Первую стратегию (старое лучше нового) часто называют винной стратегией, а вторую (новое лучше старого) — молочной стратегией. Чтобы сделать этот алгоритм еще разумнее, необходимо участие в нем отправителей. Во многих приложениях одни пакеты могут быть значительно важнее других.
Например, некоторые алгоритмы сжатия видеосигнала периодически посылают полный кадр, а последующие кадры представляют собой карты изменений относительно последнего полного кадра. В таком случае потеря пакета, содержащего разностный сигнал, не так страшна, как потеря полного кадра. Точно так же при передаче страницы, содержащей текст и рисунок, потеря линии пикселов рисунка может остаться почти незамеченной, тогда как потеря строки текста крайне нежелательна. Для реализации интеллектуальной стратегии выбрасывания части информации приложения должны помечать свои пакеты классами приоритетов, соответствующими их важности. В этом случае маршрутизаторы смогут сначала выбросить пакеты нижнего класса, затем следующего за ним и т.
д. Конечно, при отсутствии стимула все будут помечать свои пакеты не иначе как ОЧЕНЬ ВАЖНΠ— НИ В КОЕМ СЛУЧАЕ НЕ ВЫБРАСЫВАТЬ. Стимулом может служить стоимость обслуживания, то есть пересылка пакетов низкоприоритетным классом может бь|ть дешевле, чем высокоприоритетным. В качестве альтернативы источникам может быть ультимативно предложено отправлять высокоприоритетные пакеты только в условиях низкого графика, а с повышением загрузки сети прекращать их отправку.
Еше один вариант состоит в разрешении хостам превышать пределы, указанные в соглашении, заключенном при создании виртуального канала (например, использовать большую пропускную способность, чем договаривались), но при условии, что весь дополнительный график будет помечаться как низкоприоритетный. Такая стратегия весьма удачна, поскольку более эффективно использует свободные ресурсы, разрешая хостам пользоваться ими, пока это никому не мешает, но не закрепляя за ними этого права.
45Е Глава б. Сетевой уровень Случайное раннее обнаружение )(орошо известно, что при борьбе с перегрузкой гораздо проще вовремя обнаружить затор, чем дать ему развиться до критических размеров, а потом думать, что делать в сложившейся ситуации. Это соображение приводит к идее отвержения некоторых пакетов еще до того, как все буферное пространство будет заполнено скопившимися необработанными данными. Популярный алгоритм, реализующий данную идею, называется случайным ранним обнаружением (КЕР— Капдош Еаг1у Регесс1оп, Р1оуб и 1асоЬзоп, 1993).
Некоторые транспортные протоколы (включая ТСР) на потерю своих пакетов отвечают снижением трафика от источника, чего мы, в сущности, и добиваемся. Обоснование такой логики состоит в том, что ТСР предназначен для проводных сетей, которые по сути своей являются очень надежными, и потеря пакетов в них чаще всего сигнализирует о переполнении буфера, а не об ошибках передачи. Этот факт и используется для уменьшения перегрузок, Если заставить маршрутизаторы сознательно терять пакеты еще до того как ситуация станет безнадежной (именно такой момент зашифрован в слове «раннее» из названия подхода), то останется время на то, чтобы предпринять какието действия, Для определения условий, прн которых следует начинать терять пакеты, маршрутизаторы постоянно высчитывают скользящее среднее длин своих очередей. Когда средняя длина очереди на какой-либо линии превышает пороговое значение, эта линия объявляется перегруженной и выполняются действия по предотвращению затора, Маршрутизатор не всегда может определить, кто из отправителей больше всех виноват в заваливании линии данными, поэтому пакет из очереди выбирается случайным образом, н это — самое справедливое, что можно сделать в данной ситуации, Но как маршрутизатор сообщит источнику о возникшей проблеме? Можно послать ему сдерживающий пакет, как описывалось ранее.
Но это приведет к созланию дополнительной нагрузки на и так уже почти перегруженную сеть. Другой подход заключается в том, чтобы просто потерять выбранный пакет и никому не сообщать об этом. Источник в конечном счете среагнрует на отсутствие подтверждения. Поскольку он знает, что потеря пакетов обычно связана с перегрузкой сети, он уменьшит скорость выдачи пакетов и не станет пытаться во что бы то ни стало пробиться к загруженному маршрутизатору.