Топология сети с резервированием
Простой способ резервирования канала Ethernet при помощи коммутаторов от Microchip
В статье описаны варианты реализации резервирования канала при использовании кольцевой топологии, основные ее недостатки и методы борьбы с ними, рассмотрены функции фильтрации пакетов по MAC-адресу источника и по адресу получателя. Также на примере коммутаторов KSZ8863 и KSZ8873 продемонстрирован улучшенный метод резервирования каналов при помощи фильтрации пакетов по MAC-адресу источника.
Введение
Как известно, в отличие от домашних или офисных сетей, построенных по топологии звезды, промышленные сети преимущественно используют топологию кольца. Эта топология сокращает количество необходимой проводки, а также позволяет достаточно просто осуществить резервирование канала. На рис. 1 представлена классическая блок-схема сети с резервированием, построенной по кольцевой топологии на 3‑портовых коммутаторах.
Краткое описание коммутаторов KSZ8863 и KSZ8873
Коммутаторы KSZ8863 и KSZ8873 достались компании Microchip в результате приобретения фирмы MIcrel и на данный момент выпускаются без каких-либо изменений. Они поддерживают режимы 10Base-T/100Base-TX и 100Base-FX, имеют два встроенных PHY-трансивера и три MAC-блока.
Особенности коммутаторов:
• низкое энергопотребление;
• режимы управление питанием;
• улучшенная система обработки QoS (включая IPv6);
• фильтрация пакетов по MAC адресу отправителя пакета;
• малогабаритные корпуса: 48‑или 64‑LQFP.
В микросхемы KSZ8873/KSZ8863 дополнительно встроены LDO-регуляторы для питания ядра и внутренний генератор, формирующий частоту для интерфейса RMII. Разработчик может выбрать необходимый для его проекта коммутатор: интерфейс (MII/RMII), подключение (витая пара и/или оптоволокно), корпус и температурный диапазон.
Особенности реализации топологии кольца в Ethernet
В отличие от кольцевой сети с маркерным доступом token-ring, бывшей основой в большей части развития спецификации IEEE 802.3, сеть Ethernet запрещено конфигурировать как истинное кольцо. [1]
Любые кольца внутри сети Ethernet приводят к бесконечному дублированию пакетов внутри них, что быстро снижает производительность сети. Тем не менее в кольцевой топологии можно обеспечить резервирование канала, установив устройство управления в разрыв одной из линий между узлами сети.
На данный момент не существует какого-либо единого стандарта, который решал бы вопрос управления пакетами в кольцевой топологии, однако есть различные способы и протоколы для реализации данной задачи, одним из которых является протокол STP — Spanning Tree Protocol. Протоколы STP и Rapid STP (стандарты IEEE 802.1d и 802.1w соответственно) создают некую структуру из коммутаторов сети Ethernet, блокируя дублирующие каналы с целью создания единственного канала между двумя любыми двумя узлами сети [3].
Используя протокол STP, достаточно сложно и дорого осуществить резервирование каналов, так как появится необходимость разрабатывать специализированное ПО и использовать мощности процессора, что нежелательно или невозможно в ряде систем. В таких ситуациях предпочтительно резервирование при помощи кольцевой топологии, требующее минимального управления [3].
Фильтрация пакетов по MAC-адресу источника
Сегодня практически в каждом Ethernet-коммутаторе имеется аппаратная функция привязки и перенаправления, отвечающая за сохранение MAC-адреса отправителя и сопоставление его с определенным портом. В совокупности эти данные образуют таблицу переадресации, которая используется коммутатором для определения порта, куда нужно передать пакет данных: коммутатор проверяет, есть ли в таблице переадресации MAC-адрес получателя и, если совпадение найдено, передает пакет на нужный порт. В случае если такого совпадения не найдено,пакет отправляется на все порты, кроме того, с которого он, собственно, пришел.
В данном механизме MAC-адрес источника записывается в таблицу переадресации коммутатора, при этом он не используется для принятия решения о пересылке пакета. Тем не менее, если коммутатор способен фильтровать пакеты, основываясь на MAC-адресе отправителя (вместо MAC-адреса получателя), становится возможным реализовать кольцевую топологию. В этом случае коммутатор принимает и отфильтровывает (уничтожает) любые пакеты, MAC-адрес источника которых совпадает с MAC адресом локального процессорного порта. Как следствие, пакеты всегда уничтожаются по завершении одного полного круга. На рис. 2 проиллюстрирован пример реализации такой сети.
К сожалению, большинство Ethernet-коммутаторов не поддерживает фильтрацию по MAC-адресу источника, исключение составляют, например, два семейства 3‑портовых Ethernet-коммутаторов — KSZ8863 и KSZ8873 от Microchip. Эти коммутаторы предоставляют два независимых программируемых MAC-адреса и поддерживают такую фильтрацию. [3], [4], [5]
Резервирование канала при помощи фильтрации пакетов по MAC-адресу источника
Наиболее простой способ обеспечить резервирование канала при помощи механизма фильтрации пакетов по MAC-адресу источника — посылать пакеты, полученные от процессора, в обоих направлениях кольца. В этом случае, даже если по одной из линий пакет не будет доставлен, то будет доставлен по другой. При этом неполадки в одной из линий определяются на стороне получателя пакета, так как вместо двух одинаковых пакетов получен один. На рис. 3 изображен пример реализации резервирования канала.
К сожалению, большинство Ethernet-коммутаторов не поддерживает фильтрацию по MAC-адресу источника. Исключение составляют, например, два семейства 3‑портовых Ethernet-коммутаторов — KSZ8863 и KSZ8873 от Microchip. Эти коммутаторы предоставляют два независимых программируемых MAC-адреса и поддерживают такую фильтрацию. [3], [4], [5]
Резервирование канала при помощи фильтрации пакетов по MAC-адресу источника
Наиболее простой способ обеспечить резервирование канала при помощи механизма фильтрации пакетов по MAC-адресу источника — посылать пакеты, полученные от процессора, в обоих направлениях кольца. В этом случае, даже если по одной из линий пакет не будет доставлен, то будет доставлен по другой. При этом неполадки в одной из линий определяются на стороне получателя пакета, так как вместо двух одинаковых пакетов получен один. На рис. 3 изображен пример реализации резервирования канала.
На рис. 4а события происходят в такой последовательности:
1. Пакет данных «1» для коммутатора 1 получен коммутатором n на процессорный порт.
2. Коммутатор n пересылает пакет данных через порты 1 и 2.
3. Первый пакет данных приходит на коммутатор 1, порт 1 (по кратчайшему пути).
4. Таблица переадресации записывает соответствие MAC n порту 1.
5. Затем второй пакет данных приходит на коммутатор 1, порт 2.
6. Таблица переадресации записывает соответствие MAC n порту 2.
На рис. 4б можно наблюдать следующее:
1. Пакет данных «2» для коммутатора n получен коммутатором 2 на процессорный порт.
2. Коммутатор 2 пересылает пакет данных через порты 1 и 2.
3. Первый пакет данных приходит на коммутатор 1, порт 2 и уничтожается, поскольку определяется как локальный пакет.
4. Второй пакет доходит до коммутатора n и пересылается на процессорный порт 3.
Для гарантированной доставки обоих пакетов (в случае исправного канала данных) необходимо отказаться от таблицы переадресации, что исключит возможность уничтожения пакета как локального. Однако это повлечет дополнительную нагрузку на процессор, поскольку ему придется обрабатывать все входящие пакеты данных, вне зависимости от того, предназначались они ему или нет. В коммутаторах KSZ8863/73 эта проблема решается путем конфигурации таблицы переадресации процессором.
Улучшенный метод резервирования каналов при помощи фильтрации пакетов по MAC-адресу источника
Главный недостаток предыдущего метода заключается в том, что все пакеты, предназначенные процессорному порту, дублируются, увеличивая нагрузку на него. Этот метод можно улучшить следующим образом:
1. Отключить прием пакетов на 1 или 2 порт коммутатора. В этом случае пакеты будут проходить только в одном направлении, не дублируясь. Следовательно, процессор получит только один пакет данных, нагрузка снизится. Отключенный порт будет использован только в случае ошибки передачи по основному каналу
2. Использовать вывод Link Interrupt коммутатора KSZ8863/73 для детектирования ошибки на линии передачи.
Такой подход требует минимального вмешательства со стороны процессора и обеспечивает очень быстрое время детектирования неисправности и ее устранения, даже в сети с большим количеством узлов. На рис. 5 проиллюстрирован данный механизм, разделенный на два этапа: инициализацию коммутатора и переключение канала.
Инициализация коммутатора (рис. 5а):
1. Отключение привязки на портах 1 и 2 каждого коммутатора (Port Control Reg2.0 = 1).
2. Конфигурирование статичной таблицы MAC-адресов для пересылки пакетов, имеющих MAC-адрес получателя, равный MAC процессора на 3‑й порт.
3. Включение функции пересылки пакетов с неизвестным MAC-адресом (Reg14.7 = 1 и Reg14.2-0 = 011).
4. Отключение приема пакетов 2‑м портом (Port 1 Control Reg2.1 = 0).
5. Включение функции Link Interrupt (Reg187.1:0 = 1,1).
Переключение канала (рис. 5б):
I. Детектирование неисправности:
1. Весь трафик приходит на 1‑й порт, то есть проходит по часовой стрелке.
2. Связь между 1‑м и 2‑м коммутаторами рвется.
3. Коммутаторы 1 и 2 генерируют прерывание, запуск переключения.
II. Процедура переключения:
1. Чтение регистра прерывания (регистр 188).
2. Если обрыв связи на 1‑м порте, то необходимо послать широковещательное сообщение с целью уведомить все коммутаторы включить прием на 2‑м порте. Включить прием на 2‑м порте (Port 1 Control Reg2.1 =1). Записать 0xff в регистр 188 (очистить прерывания).
3. Если обрыв на 2‑м порте, нужно проигнорировать широковещательное сообщение о включении на нем приема и запустить диагностику неполадки.
Коммутаторы KSZ8863/73 имеют встроенную функцию диагностики LinkMD, которая может быть использована для определения и локализации проблемы — в данном примере коммутатором 1 [4, 5].
После того как проблема исправлена на линии, возникнет сигнал прерывания, который будет означать изменение статуса, то есть связь восстановлена. Необходимо считать регистр прерывания (Reg 188) и, если связь на 1 порте налажена, отправить широковещательное сообщение с командой выключения приема пакетов 2 портом.
Можно рассчитать задержку переключения:
ТΣ = Tпрерывания + Тчтение прерывания +Тшироковещ сообщения + Tвкл прием 2 порта,
где
Tпрерывания = 100 мкс (приблизительно, для этого примера);
Тчтение прерывания = 4,8 мкс при 5 МГц SPI (запись одного регистра = 3 байта при 5 МГц);
Тшироковещ сообщения = (n–1)7,7 мкс. Задержка от передачи коммутатором 2 до приема коммутатором n–1. Подразумевается 64‑байтный пакет.
Следовательно, нетрудно подсчитать суммарную задержку:
ТΣ = 100 мкс + 4,8 мкс + +(n–1)7,7 мкс + 4,8 мкс.
Для кольца из 16 узлов задержка составит примерно 225 мкс.