# tc class add dev eth1 parent 10:1 classid 10:100 cbq

 bandwidth 100Mbit rate 50Mbit allot 1514 weight 5Mbit

 prio 5 maxburst 20 avpkt 1000 bounded

# tc class add dev eth1 parent 10:1 classid 10:200 cbq

 bandwidth 100Mbit rate 50Mbit allot 1514 weight 5Mbit

 prio 5 maxburst 20 avpkt 1000 bounded

Эти команды различаются только значением classid. Обе ссылаются на корневой класс, и каждая выделяет соответствующей подсети 50 Мбод пропускной способности линии. (Вы можете задать разные значения для каждой подсети, например 60 Мбод и 40 Мбод.) Параметр bounded указывает на то, что система не должна выделять классу часть пропускной способности линии, превышающую указанное значение. Часто такое ограничение бывает нежелательным, поскольку если из одной сети данные не передаются, другая сеть не сможет использовать остальную часть пропускной способности линии. Отказавшись от параметра bounded, вы обеспечите большую гибкость при работе через линии связи, в частности, предоставите офисам возможность 'занимать' друг у друга пропускную способность линии. Если же обоим офисам потребуется передавать данные, этот ресурс будет распределен поровну.

Теперь необходимо связать дисциплину очереди с каждым из двух классов.

# tc qdisc add dev eth1 parent 10:100 sfq quantum 1514b

 perturb 15

# tc qdisc add dev eth1 parent 10:200 sfq quantum 1514b

 perturb 15

Данные команды аналогичны рассмотренной ранее команде, определяющей порядок обслуживания очереди. Они сообщают Linux о том, что для планирования трафика внутри подсети каждого офиса должна использоваться дисциплина SFQ (Stochastic Fairness Queueing — стохастическая организация очереди, обеспечивающая равный доступ). Эта дисциплина популярна, так как для ее реализации не требуется много ресурсов процессора. Если понадобится, можете задать другую дисциплину.

Команды, которые мы уже рассмотрели, не предоставляли ядру информацию, позволяющую разделить трафик, соответствующий различным подсетям (192.168.1.0/24 и 192.168.2.0/24). Поэтому необходимо выполнить следующие команды:

# tc filter add dev eth1 parent 10:0 protocol ip prio 100 u32

 match ip dst 192.168.1.0/24 flowid 10:100

# tc filter add dev eth1 parent 10:0 protocol ip prio 100 u32

 match ip dst 192.168.2.0/24 flowid 10:200

В отличие от предыдущих, в этих командах указан объект filter. Данные команды задают правила, которые связывают трафик подсети с соответствующим классом. Обоим правилам назначены одинаковые приоритеты и задан алгоритм u32, работающий с блоками IP- адресов.

Созданные правила управляют потоком данных из Internet в локальные сети. При желании вы можете создать аналогичный набор правил, действующих в противоположном направлении. Эти правила почти совпадают с предыдущими, но вместо внутреннего интерфейса eth1 они должны ссылаться на внешний интерфейс eth0, и в двух последних командах filter вместо параметра dst должен быть указан параметр src.

Использование протоколов маршрутизации

Главная задача маршрутизатора — определить способ передачи пакетов. Предположим, например, что от маршрутизатора к целевому узлу ведут два маршрута. С помощью специальных инструментов, например программы ip, входящей в состав пакета iproute2, вы можете сообщить маршрутизатору, какой из путей следует выбрать. Маршрутизатор, настроенный подобным образом, будет применять для маршрутизации пакетов одни и те же правила до тех пор, пока вы не измените их с помощью ip. Подобное поведение маршрутизатора допустимо лишь в простых статических средах. В реальных условиях сетевое окружение постоянно изменяется: вводятся в строй новые линии связи, а существующие линии внезапно прекращают работу. Подобные изменения могут происходить далеко от вашей сети, и сведения о них не всегда будут поступать к вам. Иногда может возникнуть необходимость сообщить другим маршрутизаторам об изменениях в вашей сети, например, о появлении новой подсети с определенным IP-адресом. Для решения подобных задач предназначены протоколы маршрутизации, рассмотрению которых посвящен данный раздел.

Принцип действия протоколов маршрутизации

Ранее в этой главе был описан процесс настройки маршрутизатора, реализованного в системе Linux, для обработки пакетов в зависимости от адреса назначения, содержимого и других характеристик пакета. Протоколы маршрутизации предоставляют возможность учитывать состояние сетевой среды. Они позволяют получить информацию о том, достижима ли требуемая сеть и какова стоимость передачи пакета в эту сеть. Здесь понятие стоимости не связано с деньгами. Под стоимостью обычно понимают число узлов, которые должен посетить пакет, прежде чем он попадет на целевой узел. В роли стоимости также могут выступать другие характеристики сети, определяющие ее производительность. Стоимость передачи пакета по сети называется метрикой. Если маршрутизатор соединен с другими сетями посредством двух сетевых соединений, стоимость доставки пакета на целевой узел, или метрика пути к целевому узлу, зависит от того, посредством какого соединения будет передан этот пакет. Рассмотрим в качестве примера сетевую среду, условно показанную на рис. 24.1. На этом рисунке изображено пять сетей, принадлежащих пяти факультетам университета. В каждой сети работает свой маршрутизатор, который соединен с двумя другими маршрутизаторами.

Рис. 24.1. Протоколы маршрутизации позволяют маршрутизаторам обмениваться информацией и определять наиболее короткий маршрут для передачи пакета

На заметку

В данном примере описывается несколько сетей, соединенных между собой; такая структура называется internet (со строчной буквы). Аналогичные принципы используются и при выполнении маршрутизации во всей Internet (с прописной буквы).

При неоправданном посещении пакетом очередного узла увеличивается время его доставки в целевую сеть. Например, при передаче из сети филологического факультета в сеть физического факультета пакет посетит как минимум три маршрутизатора. Заметьте, что из сети филологического факультета в сеть физического факультета ведут два маршрута. Один из них проходит через маршрутизатор факультета психологии, а другой — через маршрутизаторы химического и исторического факультетов. Путь в направлении против часовой стрелки оказывается более длинным. Хорошо, если бы маршрутизатор филологического факультета имел информацию об обоих маршрутах. Если маршрутизатор факультета психологии выйдет из строя, пакеты можно будет передавать по альтернативному маршруту.

Для решения данной задачи используется понятие метрики. Значение метрики, определяющее стоимость передачи пакета по сети, содержится в стандартной таблице маршрутизации Linux, которая заполняется с помощью команды route. На рис. 24.2 показано содержимое простой таблицы маршрутизации

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату