Каталог провайдеров Волгограда

Работа Ethernet сети организованной по топологии кольцо. Spanning Tree Protocol

  1. Алгоритм покрывающего дерева (STA)
  2. Протокол покрывающего дерева (STP)
  3. Ограничения STP
  4. Аварийное отключение или ограничение пропускной способности порта при превышении заданного порога трафика
  5. Технология поиска петель

Из трёх топологий построения вычислительных сетей рассматриваемых в курсе информатики средней школы присутствуют: общая шина (ethernet), кольцо (token ring) и звезда (конкретная технология не уточняется). Возьмём за основу технологию и протокол работы в сети Ethernet и немного разберёмся.

Сначала со звездой. Общая шина с подключенными двумя устройствами – это очень простая звезда: режим полудуплекс, один узел передаёт другой слушает, потом узлы меняются местами. Если взять и соединить два узла двумя общими шинами чтобы по одной передавал только один узел и принимал другой, а по второй с точностью до наоборот то это полный дуплекс. Если на одном из узлов при этом есть возможность подключать много линий для приёма/передачи то он становится центром звезды и называется коммутатор. Коммутатор является полноправным узлом сети и выполняет все действия заложенные в протоколе Ethernet (оперирует данными — кадрами), в отличие от концентратора (повторителя, хаба) который выполняет только электрическое копирование сигналов и фактически является той самой общей шиной к которой и подключаются узлы сети. Задача коммутатора, как центрального узла звезды — доставлять данные между своими лучами, в простейшем случае это повторить то что пришло с одного луча, на все остальные лучи.

Теперь с кольцом. Соединим три узла со следующими условиями: на каждом узле есть возможность подключать только две линии. Каждый узел, в этом случае, представляет собой звезду с двумя лучами и выполняет роль центра своей звезды, являясь коммутатором. Как распространяются данные в такой сети? Каждый из узлов получая данные от соседнего, транслирует их дальше. Данные продолжаются передаваться по кругу до тех пор пока не найдут получателя. Получатель их примет и обработает. Что будет с этими данными дальше? В Ethernet не предусмотрено уничтожение корректной информации (это выросло из общей шины где все устройства могли принять всё что передавал один из узлов и ничего не надо было уничтожать, узел сам прекратит передачу и сигнал затухнет на терминаторах не вернувшись повторно). Напомним, что каждый луч звезды не перестал быть общей шиной. Коммутатор приняв информацию передаёт её дальше снова, выступая уже в роли передатчика (это его основная задача) и сигнал не затухнет, ему просто негде затухать. В нашем случае передача и приём будет продолжаться бесконечно долго и данные передаваться от одного узла к другому также бесконечно долго. Если данных будет много, то скоро большинство передающихся данных по такой сети будут паразитными.

В нашем случае как самом простейшем можно предусмотреть механизмы уничтожения дублирующихся данных, но тогда это будет уже не Ethernet. В коммутаторах присутствует механизм трансляции данных только в конкретном направлении в котором расположен принимающий узел, и это во многом избавляет от проблемы если данные не являются широковещательными (передавать всем узлам во всех направлениях), тогда ситуация, когда данные передаются по кругу не останавливаясь, называется широковещательным штормом. Способ этого избежать не меняя технологии Ethernet — не создавать колец. Однако полезность колец как способа резервирования сети нельзя отрицать. Значит надо автоматически отключать некоторые из связей, чтобы не создавалось колец, а в случае обрыва основных линий отключенные подключать обратно. Эта обязанность возложена на STP (протокол покрывающего дерева) и его теоретическую часть STA (алгоритм покрывающего дерева).

Алгоритм покрывающего дерева (STA)

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

Всё общение между узлами происходит посредством BPDU пакетов (канальный уровень) в которых содержится достаточно информации для принятии решения.

Перед началом работы все данные по сети блокируются на каждом коммутаторе и передаются только информационные сообщения.

  1. Выбор корневого узла. Все узлы считают себя корневыми и начинают рассылать всем остальным узлам сообщение об этом, в то же время принимая сообщения от других узлов. Если в принятом сообщении окажется, что идентификатор отправившего его узла меньше идентификатора текущего узла, то текущий узел прекращает считать себя корнем и рассылать свои сообщения, а только передаёт сообщения того узла чей идентификатор меньше. При этом, прежде чем передать сообщение дальше, он добавляет к расстоянию указанному в нём, величину метрики порта на который данное сообщение получено.
  2. Выбор корневого порта на каждом узле. Корневой порт узла — порт который ближе всех расположен к корню (корневому узлу). Выбор делается на основе данных полученных из рассылаемых корневым узлом сообщений, на какой порт получено сообщение с меньшим расстоянием тот и корневой. Расстояния сравнивается уже после добавления метрики портов. Если несколько портов являются равнозначными, порт с меньшим идентификатором является корневым.
  3. Выбор назначенных портов на каждом узле. Назначенный порт узла — тот порт через который ближе всего добраться до следующих узлов если двигаться от корневого узла. Выбор также делается на основе данных из рассылаемых корневым узлом сообщений. На какие порты (исключая корневой порт) получены сообщения с расстоянием большим чем у корневого порта те порты являются назначенными. Только при этом расстояние сравниваются ещё до добавление метрики портов. Назначенный порт для данного сегмента сети может быть только один, поэтому если два узла претендуют иметь назначенные порты в данном сегменте, выбирается узел с меньшим идентификатором.

После определения всех параметров остальные порты блокируются, узлы начинает передавать данные по сети. Для корневого узла все его порты являются назначенными. Корневой узел продолжает рассылать сообщения об информации о себе для поддержки своего статуса, а остальные узлы продолжают их ретранслировать. Если сообщение от корневого узла не получено в течении заданного времени(что говорит о проблемах на каком либо уже установленном пути), начинается новая процедура выборов с шага 1 и блокировкой всего трафика. Следует учитывать что при множественных проблемах, или недостаточном количестве резервных связей сеть может распасться на несколько независимых сегментов. Также при некорректной работе одного из узлов, либо высокой загрузке сети, либо множественных ошибках в линиях передачи, процедура по выбору корневого узла и путей в сети может происходить слишком часто, в самом худшем случае это заблокирует нормальную работу (будут происходить только процедуры выборов).

Протокол покрывающего дерева (STP)

Существует несколько реализаций STA: STP, RSTP, MST. Каждая следующая реализация, а также реализация конкретными производителями в основном нацелены на то, чтобы уменьшить время схождения алгоритма, а значит и время простоя сети. Это достигается за счёт уменьшения некоторых временных интервалов, возможности выделение сегментов сети где отсутствуют кольца, возможности работы в отдельных виртуальных сетях (VLAN). Рассмотрим основные настройки на коммутаторах Cisco Catalyst 3750 и D-Link DES 3526.

Включаем поддержку STP:

Для D-Link:

enable stp

После этого STP (точнее RSTP) уже работает и если сеть не большая (5-6 узлов с STP) можно больше вообще ничего не трогать — будет работать. Переключить RSTP в MSTP:

config stp version mstp

Для Cisco уже всё включено, но необходимо выбрать совместимый протокол STP (если в одной сети устройства от разных производителей) по умолчанию используется внутренний для Cisco PVSTP:

spanning-tree mode mst
spanning-tree extend system-id

STP(MSTP) включен и также как и для D-Link можно ничего больше не трогать, если сеть небольшая.

Изменяем приоритет коммутатора (чем меньше число, тем выше приоритет) значение должно быть в пределах от 0 до 65536 и кратно 4096. По умолчанию обычно 32768.

Для D-Link:

config stp priority 16384

Для Cisco:

spanning-tree mst 0 priority 16384

Настройка для конкретных портов для коммутаторов D-Link производится с помощью команды config stp ports <номера портов> <режим>, например:

config stp ports 1 state disable
config stp ports 2 edge true
config stp ports 3 ExternalCost 20000
config stp ports 4 priority 100

Отключили поддержку STP на первом порту, установили что за вторым портом сегмент сети без колец , метрику в 20000 для третьего порта и приоритет 100 для четвёртого.

Для Cisco надо зайти в режим настройки интерфейса и задавать команды там:

spanning-tree bpdufilter enable
spanning-tree portfast
spanning-tree cost 20000
spanning-tree port-priority 100

Действия аналогичны вышеприведённым командам для коммутатора D-Link.

Ограничения STP

Ethernet не работает в кольцевой топологии — STP лишь маскирует данный недостаток, но никак его не отменяет. Основное ограничение это размеры сети: количество участвующих в выборе узлов и количество возможных колец. Чем больше того и другого тем больше вероятность, что сеть будет работать нестабильно из-за частных перестроений, либо вообще не работать. Для больших сетей можно и нужно использовать сегментацию на отдельные участки где будут выбираться независимые корни, а между этими участками отключать возможность работы протокола. Для сегментов где точно нет колец также необходимо исключит использование STP (отключить передачу в них BPDU пакетов или установить режим edge на соответствующем порту). Все возможные пути в большой сети необходимо сформировать максимально предсказуемо путём установки приоритетов портов и узлов. Если всё же необходимо собрать большое кольцо (больше 10) то часть узлов можно сделать прозрачным — чтобы они пропускали BPDU пакеты, но сами в работе протокола не участвовали, например для D-Link:

на портах

config stp ports 1-26 fbpdu enable
config stp ports 1-26 state disable
и для всего коммутатора сразу:
config stp fbpdu enable
disable stp

Если проект сети не предусматривает колец, а необходимо лишь обезопасится от нештатного их образования (замкнул кабель, ошибочный монтаж) то можно использовать другие возможности коммутаторов: ограничение или блокировка пропуска части трафика из-за которого возникают проблемы. Однако и в этом случае STP хорошее решение и описанные методы можно применять совместно с STP и не зависимо от наличия либо отсутствия кольцевой топологии в проекте.

Аварийное отключение или ограничение пропускной способности порта при превышении заданного порога трафика

Для D-Link:

config traffic control 1-3 broadcast enable multicast enable dlf enable action drop threshold 100
config traffic control 4-5 broadcast enable multicast enable dlf enable action drop threshold 1000

Порты разделены на группы с 1 по 5. Для каждой группы устанавливаем тип проверяемого трафика, пороги срабатывания и действия предпринимаемые при этом. Эффективным также может оказаться проверка загрузки процессора и сброс состояния при превышении нагрузки:

config safeguard_engine state enable
config safeguard_engine cpu_utilization rising_threshold 30 falling_threshold 20

Сначала включили, потом установили в процентах загрузки процессора, когда прекратить полезную работу и когда её вновь начать.

Для Cisco:

errdisable recovery cause storm-control

interface GigabitEthernet1/0/1
 storm-control broadcast level 2.00 1.00
 storm-control multicast level 2.00 1.00
 storm-control unicast level pps 15k 10k
 storm-control action shutdown

Для каждого требуемого интерфейса и типа трафика устанавливается пределы срабатывания защиты в процентах от полосы пропускания (level) или в количестве пакетов в секунду (level pps), а также действие (action). В нашем случае порт будет заблокирован если широковещательный или многоадресный трафик превысят 2% от ширины полосы либо количество пакетов в секунду будет больше 15000.

Технология поиска петель

Для D-Link (порт блокируется):

enable loopdetect
config loopdetect recover_timer 60
config loopdetect interval 10
config loopdetect mode port-based
config loopdetect ports 1-26 state enabled

Сначала включили, потом установили время восстановления в нормальное состояние и время проверки в секундах, дальше указали что надо проверять порты и какие порты.