Международная конференция разработчиков
и пользователей свободного программного обеспечения

LINC: Full-functional enterprise Open-Source switch developed on Erlang

Dmitry Orekhov, Minsk, Belarus

LVEE 2013

Software-Defined Network (SDN) - is a new cutting-edge architecture concept, which meets new demands to networks. The main idea is that the network control is decoupled from forwarding and is directly programmable. It allows to build very flexible network topologies, which may be changed in runtime, from a single point of control. OpenFlow - is the key standard fully-implementing the concept of SDN. Though OpenFlow is an open standard, the most of existing OF Switches, that might be considered as a real enterprise ones, are proprietary. LINC is the first full-functional switch, which conforms to the last OpenFlow version, 1.3.1, and made for using in enterprise topologies.

SDN

За последние несколько лет очень сильно изменились условия использования сетей. Взрывной рост Интернета, повсеместное внедрение облачных сервисов, доступ в Интернет с мобильных устройств буквально из каждой точки Земного шара, BigData – все это привело к изменению требований, которые в наше время предъявляются к сетям. Статические топологии уже не удовлетворяют им в полной мере. Теперь топологии должны уметь быстро адаптироваться под постоянно меняющиеся условия: многократное и разнообразное изменение трафика между узлами, непрерывное добавление новых узлов, быстрое реагирование на угрозы безопасности путем добавления новых правил фильтрации трафика т.д.

Концепция Программно-управляемых сетей (Software-Defined Networks, SDN) 1 дает ключ к решению этих задач простым и мощным способом, разделяя собственно пересылку пакетов внутри топологии и управление топологией и делая управление полностью программируемым.

За несколько лет своего существования OpenFlow проделал большой путь от относительно примитивной версии 1.0 с одной таблицей и мало подходящим для встроенных реализаций (опубликован в 2009-м году) до версии 1.3.1 2 с поддержкой конвейера таблиц и внушительного списка возможных критериев сравнения.

Архитектура

Архитектура OpenFlow разработана таким образом, чтобы наилучшим образом удовлетворять требованиям, предъявляемым к программно-управляемым сетям, фактически определяя “язык низкоуровневого программирования” и “язык мета-программирования” для управления топологиями.
Определены три основные сущности: OpenFlow-enable switch (Свитч), OpenFlow-controller (Контроллер) и OF-Config (Конфигуратор).

Свитч представляет собой совокупность внутренних логических портов и конвейера для обработки пакетов.
Ключевое понятие для описания свитча – Flow. Это – правило, согласно которому свитч обрабатывает входящие пакеты. Эти правила объединены в таблицы, т.н. OpenFlow tables, которые, в свою очередь, объединены в конвейер. Основные составные части любого правила – критерий для сравнения (Match) и инструкция (Instruction). Любой входящий пакет попадает в нулевую таблицу. Затем его заголовок проверяется на соответствие критериям всех правил (Flows), записанных в нулевой таблице. Если какой-то из пакетов отвечает критерию, содержащемуся в отдельном правиле, то к нему применяется инструкция из данного критерия: пакет может быть отправлен в другую таблицу, в любой выходной порт или просто отфильтрован (dropped). Пакеты, не отвечающие критериям ни из одного правила, пересылаются по конвейеру в следующую таблицу.
Важно понимать, что свитч отвечает лишь за обработку и пересылку входящих пакетов, но никоим образом не влияет на содержимое своих таблиц.

Контроллер – это устройство, реализующее т.н. OpenFlow protocol, т.е. протокол управления свитчом. Это протокол позволяет устанавливать соединение со свитчом, запрашивать и получать его состояние (содержимое таблиц, состояние портов и т.д.), а также добавлять новые правила.

Конфигуратор, используя протокол, базирующийся на XML, может управлять свойствами свитча (к примеру, назначать соответствие между логическими внутренними портами свитча и реальными портами топологии). Для этого он определяет две основные концепции: OF Capable Switch, представляющий собой совокупность логических свитчей и т.н. Capable ports, т. е. доступные свитчу реальные порты топологии; а также уже упомянутые Logial Switches (логические свитчи), представляющие собой в основном совокупность интерфейсов к доступным портам или Логических портов. Пользователь из точки контроля Конфигуратора может связывать логические порты и доступные порты, перераспределять Логические порты между Логическими свитчами, назначать контроллеры для свитчей и т.д.

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

Контроллер Floodlight 3

Самый известный на сегодняшний день контроллер OpenFlow – это Floodlight. В настоящий момент он также поддерживает только OpenFlow 1.0. Сообщество ведет работу по реализации поддержки версий 1.x протоколов. Однако в процессе исследования его исходного кода наша команда пришла к выводу, что некоторые изначальные недостатки архитектуры и подхода к описанию протокола OpenFlow, а также уже отмеченные большие различия между версиями 1.0 и 1.2-1.3 делают нецелесообразным реализацию версий выше 1.0 в данном контроллере. Поэтому мы стартовали новый проект контроллера, основанный на библиотеке Apache Avro 4, используемой для описания протоколов и сериализации/десериализации сообщений.

Свитч LINC 5

В настоящий момент существует множество подходов к реализации OF свитчей: hardware реализации на базе embedded решений, а так же software реализации на различных платформах и различных языках программирования. Следует заметить, однако, что несмотря на то, что OpenFlow – это открытая спецификация, большая часть реализаций OpenFlow свитчей, претендующих на звание промышленных, являются проприетарными. Пожалуй, единственным исключением из этого правила является LINC – полнофункциональный OpenFlow свитч, поддерживающий последнюю версию спецификации, 1.3.1, и выпущенный под лицензией Apache. Автор этого доклада участвовал в совместном тестировании свитчей и контроллеров от различных производителей, и должен сказать, что на общем фоне LINC выглядел весьма достойно, часто даже превосходя своих проприетарных собратьев. Более того, LINC – единственный на сегодняшний день полнофункциональный OF Capable свитч.

Что позволило небольшой команде разработчиков LINC за весьма короткие сроки (около одного года) создать 6 полнофункциональный, претендующий на звание промышленного, свитч? Ответ прост и сложен одновременно: Erlang.

Erlang – это функциональный язык, специально сконструированный для создания многозадачных приложений. Некоторые его особенности, такие как легкость. Дешевизна создания процессов, раз и навсегда присваиваемые переменные и т.д. делают его превосходным выбором для создания такого приложения, как OF свитч. К тому же код, написанный на Erlang, весьма компактен и, после небольшой тренировки, легко читаем, что делает его легко поддерживаемым.

1 https://www.opennetworking.org/images/stories/downloads/white-papers/wp-sdn-newnorm.pdf

2 http://www.opennetworking.org/about/onf-documents

3 http://floodlight.openflowhub.org/

4 http://avro.apache.org/

5 http://www.flowforwarding.org/

6 https://github.com/FlowForwarding/LINC-Switch

Abstract licensed under Creative Commons Attribution-ShareAlike 3.0 license

Назад