В настоящее время в энергетике предъявляются все более серьезные требования к надежности всей АСУ ТП в целом и ЛВС в частности. Стабильность и надежность ЛВС, в случае возникновения различных неисправностей, определяется протоколом резервирования, и возможностей привычных протоколов резервирования (RSTP, MRP и т.д.) для энергетики уже недостаточно. Ввиду этого появляются новые технологии, позволяющие реализовать, так называемое, «бесшовное» резервирование PRP и HSR. В рамках данной статьи будет подробно рассмотрен протокол PRP, который сейчас наиболее распространен и который можно встретить практически в любом проекте АСУ ТП.
Введение
Большинство современных технологий резервирования, таких как RSTP, MRP, DLR и прочие, основаны на изменении топологии в случае возникновения какой-либо неисправности при передаче данных. Резервирование на основании PRP осуществляется, в отличие от вышеобозначенных протоколов, не за счет перестроения топологии, а за счет использования двух независимых сетей. Каждый фрейм дублируется отправителем и передается через обе сети. Принимающий узел обрабатывает фрейм, пришедший первым, и отбрасывает второй. Именно протокол PRP позволяет реализовать дублирование фреймов и алгоритмы их обработки и, по сути, он позволяет «скрыть» две сети от верхнего уровня и представить их как одну. Такой принцип работы не требует выполнения перестроения и, соответственно, данный протокол действует практически «бесшовно».
Структура сети
Резервирование PRP реализуется на конечных узлах, а не на сетевых компонентах. Это одно из самых главных отличий от других протоколов резервирования, таких как RSTP или MRP. Конечный узел имеет два Ethernet-интерфейса, которые подключаются к двум изолированным друг от друга сетям, действующим параллельно и имеющим независимую топологию (т. е. топологии этих двух сетей могут быть как одинаковыми, так и различаться). Сети должны быть изолированными для того, чтобы любая неисправность и остановка передачи данных в одной сети не влияли на вторую, т. е. даже питание сетей осуществляется от разных источников. Никаких прямых соединений между этими сетями быть не должно.
Эти две сети обычно называются LAN A и LAN B. Как уже обозначалось ранее, они могут иметь различные топологии, а также производительность.
Задержки в передачи данных также могут быть разными. В соответствии с протоколом PRP в сети могут присутствовать следующие элементы:
- DAN (Dual Attached Node) — узел, который подключается к обеим сетям и посылает/принимает дублированные фреймы.
- SAN (Single Attached Node) — узел, который подключается только к одной сети (LAN A или LAN B) и посылает/принимает обычные фреймы.
- В случае, когда к RPR-сети необходимо резервировано подключить устройство, имеющее один Ethernet-интерфейс и без поддержки протокола PRP, используется так называемый Redundancy Box (чаще RedBox). На RedBox’е пакет от устройства дублируется и передается в сеть PRP так, словно данные передаются от DAN. Более того, устройство, которое находится за RedBox’ом, видится для остальных устройств как DAN. Такой узел называется виртуальный DAN или VDAN (Virtual DAN).
Структура DAN
Каждый DAN имеет два интерфейса, действующих параллельно и подключенных к верхнему уровню одного коммуникационного стека через так называемый уровень LRE (Link Redundancy Entity). На данном уровне выполняются все функции резервирования.
Когда с верхнего уровня посылается фрейм, LRE дублирует его и посылает оба пакета через порты практически одновременно. Оба фрейма передаются параллельно через две сети с разными задержками. В идеальной ситуации они доставляются на узел назначения с минимальной разницей во времени. При получении данных, уровень LRE приемника передает на верхний уровень первый принятый фрейм, а второй отбрасывает.
LRE создает дублированные фреймы при отправке и обрабатывает их при получении. Данный уровень, по отношению к верхнему уровню, представляет собой обычный интерфейс нерезервированного сетевого адаптера. LRE выполняет две задачи: обработка дублированных фреймов и управление резервированием. Для реализации управления LRE добавляет к каждому фрейму 32-битный трейлер контроля резервирования (англ. Redundancy Control Trailer, RCT) и удаляет его при получении фрейма.
Оба интерфейса DAN имеют одинаковые MAC-адреса и один IP-адрес. Это позволяет сделать резервирование прозрачным для верхнего уровня. Особенно важен тот факт, что это позволяет использовать протокол ARP для DAN так же, как и для любого нерезервированного узла.
Взаимодействие между SAN и DAN
SAN может быть подключен к любой сети (LAN A или LAN B), и такой узел не поддерживает функций резервирования. Поэтому SAN, подключенный к одной сети, не сможет обмениваться данными с другим подобным узлом, подключенным ко второй сети. DAN необходимо генерировать специальные фреймы для взаимодействия с SAN. Эта необходимость вызвана тем, что SAN в стандартном фрейме от резервированного устройства должен игнорировать RCT, что сделать не представляется возможным, так как SAN не может отличить RCT от обычного блока данных IEEE 802.3. В противоположность ему DAN понимает, что отправляет фрейм на SAN, и не добавляет RCT в фрейм. Он просто пересылает один фрейм с верхнего уровня на тот интерфейс, к которому подключен SAN. Если DAN не может определить, что обменивается данными с другим DAN, то он не добавляет RCT в фрейм.
Режимы работы DAN
При работе с дублированными фреймами, принимаемыми на обоих интерфейсах (в случае их исправности), DAN необходимо принять один из фреймов, а второй отбросить.
Есть два метода обработки:
- Duplicate accept — метод, при котором оба пришедших фрейма принимаются и перенаправляются на верхний уровень.
- Duplicate discard — метод, при котором узел-приемник считывает информацию из RCT пришедшего фрейма для того, чтобы определить какой фрейм отбрасывать.
Duplicate accept
DAN, работающий в данном режиме, не отбрасывает ни один из фреймов при обработке на канальном уровне. Фреймы отправляются в LAN A и LAN B без RCT. Уровень LRE приемника просто перенаправляет оба фрейма на верхний уровень, предполагая, что при дальнейшей передаче дубликаты будут уничтожены (в IEEE 802.1D четко прописано, что протоколы верхнего уровня должны уметь обрабатывать дублированные фреймы). Например, протоколы TCP и UDP спроектированы максимально устойчивыми к дублированным фреймам.
Данный метод очень прост в реализации, но имеет серьезный недостаток — он не предоставляет никаких возможностей контроля сети, т.к. никаким образом не отслеживается корректность приема обоих фреймов.
Duplicate discard на канальном уровне
При использовании второго метода в фрейм добавляется поле, состоящее из четырех октет — RCT (Redundancy Control Trailer). Трейлер добавляется на уровне LRE, когда фрейм принимается от верхнего уровня. RCT состоит из следующих параметров:
- 16-битный номер последовательности;
- 4-битный идентификатор сети, 1010 (0xA) для LAN A и 1011 (0xB) для LAN B;
- 12-битный размер фрейма.
Ввиду добавления к фрейму RCT-трейлера его размер получается больше максимального размера фрейма, определенного в стандарте IEEE 802.32005. Для передачи данных внутри сети с PRP оборудование должно быть сконфигурировано для передачи данных размером 1496 октет. Из-за этого не каждый коммутатор подходит для использования в LAN A или LAN B.
Каждый раз, когда канальный уровень посылает фрейм на какой-то определенный адрес, отправитель увеличивает номер последовательности для соответствующего узла и отправляет идентичные фреймы через оба интерфейса. Узел-приемник должен определить дубликаты, основываясь на информации из RCT.
Алгоритм метода Duplicate discard
Приемник предполагает, что фреймы, присылаемые от любого источника, работающего по протоколу PRP, посылаются последовательно с постоянно возрастающим номером. Номер последовательности, который ожидается у следующего фрейма, хранится в переменных ExpectedSeqA и, соответственно, ExpectedSeqB.
При приеме корректность последовательности может быть проверена при помощи сравнения значения ExpectedSeqA (ExpectedSeqB) c номером последовательности полученного фрейма, хранящемся в переменной currentSeq в RCT. При положительном результате переменная ExpectedSeq устанавливается на один больше, чем currentSeq для того, чтобы далее можно было выполнять корректную проверку на данной линии.
Для обоих интерфейсов существует динамический интервал отбрасывания фрейма (англ. Sliding Drop Window) для парных номеров последовательности. Верхней границей данного интервала является ExpectedSeq (следующий ожидаемый номер последовательности на данном интерфейсе), исключая само данное значение, а нижней границей данного интервала является startSeq (наименьший номер последовательности, при котором происходит отбрасывание дублированного фрейма с таким номером последовательности).
После проверки правильности номера последовательности приемник решает, отбрасывать данный фрейм или нет. Предположим, что LAN A имеет ненулевой размер интервала отбрасывания фрейма (Drop window) (рис. 5). Фрейм из LAN B, чей номер лежит в данном интервале, будет отброшен. Все остальные фреймы из LAN B будут приняты и отправлены на верхний уровень.
Отбрасывая фрейм из LAN B, уменьшается размер интервала LAN A, т.к. после получения данного фрейма не ожидается никаких фреймов с меньшим номером на данном интерфейсе. Соответственно, startSeqA устанавливается на один больше, чем currentSeqB. При этом размер интервала отбрасывания фрейма LAN B сбрасывается до 0 (startSeqB = expectedSeqB), т. к. очевидно, что фреймы LAN B «отстают» от LAN A, и никакие фреймы из LAN A не должны быть отброшены.
В ситуации, показанной на на рис. 7, когда несколько фреймов из LAN A приходят подряд, но из LAN B не приходит ничего, то они принимаются, т.к. их currentSeq находится вне интервала отбрасывания фрейма LAN B, и интервал LAN A увеличивается на одну позицию. Если фреймы из LAN A продолжают приходить, а из LAN B по-прежнему ничего не приходит, при достижении максимального размера интервала, startSeqA начинает также увеличиваться на единицу, «сдвигая» интервал на единицу.
Если принимаемый фрейм находится вне данного интервала фрейма другого LAN, то этот фрейм сохраняется, а размер интервала этого интерфейса устанавливается равным 1. Это означает, что только фрейм из другого LAN с таким же номером последовательности будет отброшен, в то время как drop window другого интерфейса устанавливается равным 0, а, следовательно, ни одного фрейма не будет отброшено (рис. 7).
Наиболее общая ситуация — когда оба интерфейса синхронизированы и размер их интервалов равен 0 (рис. 8). Это означает, что будет принят тот фрейм, который придет первым, и drop window интерфейса, с которого он пришел, будет увеличен до 1, что позволит отбросить дублированный фрейм.
Из-за наличия идентификатора LAN в RCT дублированные фреймы различаются на один бит (и имеют разные контрольные суммы). Приемник проверяет принадлежность фрейма к интерфейсу (т. е. проверяет, что фрейм с идентификатором LAN A пришел на интерфейс A). Приемник не отбросит данный фрейм, т. к. он может содержать полезную информацию в блоке данных, но в этом случае будет увеличен на единицу счетчик cntWrongLanA или cntWrongLanB. Так как подобные ошибки не разовые (перепутаны местами LAN A и LAN B), то счетчик будет возрастать постоянно.
Контроль сети
Состояние каждого LAN и присоединенных устройств (конечных узлов и коммутаторов) необходимо постоянно контролировать, иначе такое резервирование не будет иметь большого смысла.
Приемник проверяет, что все фреймы приходят последовательно и корректно принимаются на обоих каналах. Он поддерживает счетчики ошибок, которые можно прочитать, например, через SNMP.
Все устройства поддерживают таблицы узлов, с которыми они обмениваются данными. В этих таблицах содержится информация о времени, когда последний фрейм был отправлен или получен от конкретного узла и другую информацию, касающуюся протокола PRP.
В то же время, данные таблицы позволяют обнаружить соединения, в которых необходимо синхронизировать номера последовательности, а также обнаружить нарушенные последовательности и пропавшие узлы.
Диагностика основана на том, что каждый DAN периодически посылает диагностический фрейм (англ. Supervision Frame), который позволяет проверить целостность сети и наличие узлов. В то же время данные фреймы позволяют проверить, какие устройства выступают в качестве DAN, определить их MAC-адреса и в каком режиме они работают — Duplicate accept или Duplicate discard.
Правила конфигурирования и параметризации
При проектировании сети PRP должны соблюдаться следующие правила:
- Сеть должна состоять из двух независимых сетей (LAN), которые имеют схожие характеристики, т. е. каждый LAN должен уметь передавать весь возникающий трафик в отсутствии резервирования.
- Оба интерфейса A и B любого DAN должны иметь одинаковые MAC-адреса.
- LAN A вместе с LAN B должны образовывать одну подсеть, т. е. IP-адреса всех узлов и коммутаторов должны принадлежать к одной подсети, но быть уникальными. Схема резервирования должна быть прозрачной для уровня IP, т. е. оба интерфейса каждого DAN должны иметь одинаковый IP-адрес.
Все DAN’ы должны быть сконфигурированы с одинаковым LifeCheckInterval. Таблица 1 описывает PRP-параметры и их значения по умолчанию.
Таблица 1. PRP-параметры и их значения по умолчанию
Параметр | Описание | Значение по умолчанию |
LifeCheckInterval | Как часто проверяется присутствие узла | 2000 мс |
NodeForgetTime | Время, по истечении которого узел стирается из таблицы | 60000 мс |
LinkTimeOut | Время, по истечении которого линк считается потерянным | 6000 мс |
DropWindowMax | Максимальный размер Drop Window | 32768 |