Сразу хочу оговориться, что эта статья не только подразумевает пассивное чтение, но и приглашает всех желающих присоединяться к разработке. Системные программисты, разработчики железа, сетевые и DevOps инженеры — добро пожаловать.
Поскольку проект идет на стыке сетевых технологий и хардварного дизайна, давайте разделим наш разговор на три части — так будет проще адаптировать информацию под ту или иную аудиторию читателей.
Определим первую часть как вводную. Здесь мы поговорим о хардварном инкапсуляторе ethernet-трафика, созданном на FPGA, обсудим его основные функции, архитектурные особенности и преимущества по сравнению с программными решениями.
Вторая часть, назовем ее «сетевой», будет более интересна для разработчиков железа, желающих ознакомиться с сетевыми технологиями поближе. Она будет посвящена тому, какую роль «Etherblade.net» может занять в сетях операторов связи. Так же разговор пойдет о концепции SDN (software defined networking) и о том, как открытое сетевое железо может дополнять решения больших вендоров, таких как «Cisco» и «Juniper», и даже конкурировать с ними.
И третья часть — «хардварная», которая скорее заинтересует сетевых инженеров, желающих приобщиться к аппаратному дизайну и начать разрабатывать сетевые устройства самостоятельно. В ней мы подробно рассмотрим FPGA-workflow, «союз софта и железа», FPGA-платы, среды разработки и другие моменты, рассказывающие о том, как подключиться к участию в проекте «EtherBlade.net».
Итак, поехали!
Инкапсуляция Ethernet
Цель проекта Etherblade.net — спроектировать и построить устройство, умеющее на аппаратном уровне эмулировать L2-ethernet-канал поверх L3-среды. Простой пример использования — подключение разрозненных серверов и рабочих станций между собой так же, как если бы между ними был обычный физический ethernet-кабель.
В интернете можно встретить разные термины для данной технологии. Самые распространенные из них — pseudowire, evpn, L2VPN, e-line/e-tree/e-lan и тд. Ну, и огромное количество производных терминов — разные для различных типов транспортных сетей, через которые прокладывается виртуальный ethernet-канал.
Так, например, эмуляция ethernet поверх IP-сети обеспечивается следующими технологиями — EoIP, VxLAN, OTV;
эмуляция ethernet поверх MPLS сети — технологиями VPLS и EoMPLS;
эмуляция ethernet поверх ethernet — задача технологий MetroEthernet, PBB-802.1ah и т.д.
Работа маркетологов — придумывать термины, но если бы дизайнеры железа изобретали отдельное устройство под каждый термин или аббревиатуру, они сошли бы с ума. Поэтому цель разработчиков железа и наша с вами цель — разработать универсальное устройство — инкапсулятор, который умеет инкапсулировать ethernet-фреймы в любой протокол транспортной сети, будь то IP/IPv6, MPLS, Ethernet и т.д.
И такой инкапсулятор уже реализован и развивается в проекте под названием «Etherblade-Version1 – encapsulator core».
Для лучшего понимания предлагаю рассмотреть рисунок поясняющий данный принцип инкапсуляции:
Мы видим, что инкапсуляторы находятся по периметру транспортной сети оператора связи. Каждый инкапсулятор имеет два интерфейса (L2 — транковый порт, «смотрящий» в сторону клиентов, и L3-интерфейс, который «смотрит» в сторону транспортной сети).
Давайте рассмотрим подробнее самый правый инкапсулятор. К нему подключены клиенты, где трафик каждого клиента “ходит” в отдельном vlan-e. Устройство должно уметь создавать виртуальные каналы для отдельных клиентов или, говоря научным языком, уметь инкапсулировать ethernet трафик для разных vlan-ов разными L3-заголовками. На рисунке показано, как один инкапсулятор осуществляет эмуляцию четырех виртуальных каналов для четырех клиентов:
- vlan-11 (зеленый) — Ethernet over IP (IPv4+GRE);
- vlan-12 (фиолетовый) — Ethernet over IP (IPv4+UDP);
- vlan-13 (голубой) — Ethernet over MPLS;
- vlan-14 (красный) — Ethernet over IP (IPv6+UDP);
Итак, с функционалом разобрались, теперь давайте поговорим о вариантах реализации инкапсулятора.
Почему FPGA?
FPGA это, по сути, чип, заменяющий паяльник и коробку микросхем (логические элементы, микросхемы памяти и тд). То есть, имея FPGA, мы имеем возможность создать железо под свои нужды и задачи.
Но кроме «набора элементов и паяльника» необходимо еще иметь и принципиальные схемы. Так вот репозиторием таких схем, из которых можно «спаять» инкапсулятор внутри FPGA и получить работающее устройство, и является проект «Etherblade.net». Еще одним важным преимуществом FPGA можно назвать то, что его элементы можно «перепаять» под новые схемы, ну а сами схемы, благодаря репозиторию, не нужно создавать и верифицировать «с нуля» для реализации нового функционала.
И все таки, почему FPGA, а не софтовое решение?
Конечно, если бы вопрос ставился о разработке системы «с нуля», то взять готовый компьютер и написать к нему программу было бы проще и быстрее, чем разрабатывать специализированное аппаратное устройство.
За простоту и скорость разработки, тем не менее, приходится платить худшей производительностью, и это является основным недостатком софтового решения. Дело в том, что софт это компьютерная программа, имеющая варьируемое время исполнения из-за ветвлений и циклов. Добавим сюда постоянные прерывания микропроцессора операционной системой и рециркуляцию трафика в подсистеме DMA.
В хардварной реализации наш инкапсулятор это, по сути, прямоточный «store-and-forward» буфер оснащенный дополнительной памятью в которой хранятся заголовки. Благодаря простоте и линейности аппаратное решение обрабатывает трафик со скоростью равной пропускной способности ethernet канала с минимальными задержками и стабильным джиттером. В качестве бонуса добавим сюда меньшее электропотребление и меньшую стоимость FPGA решений по сравнению с микропроцессорными системами.
Прежде чем перейти к следующей теме, позвольте мне поделиться с Вами этой ссылкой на видео демонстрирующее инкапсулятор в действии. Видео сопряжено английскими субтитрами, а при необходимости в «Youtube» имеется опция включения автоперевода на русский язык.
В заключительной части статьи хотелось бы сказать о паре блоков которые также разрабатываются в рамках проекта «Etherblade.net».
Разработка приемника «Etherblade-Version2 – decapsulator core»
Возможно, вы заметили, что на предыдущей сетевой диаграмме (где изображены инкапсуляторы, подключенные к сети провайдера) есть одна маленькая ремарка, указывающая на то, что MTU в сети должно быть больше 1560. Для больших операторов связи это не является проблемой, так как они работают на «темных» оптоволоконных каналах со включенной поддержкой jumbo-frames на оборудовании. В этом случае инкапсулированные пакеты ethernet, максимальным размером 1500 байт и дополнительным L3-заголовком могут свободно «ходить» по таким сетям.
А что, если в качестве транспортной сети мы хотели бы использовать обычный интернет с инкапсуляторами подключенными, скажем, к домашним DSL или 4G модемам? В этом случае приемная часть инкапсуляторов должна уметь собирать фрагментированные ethernet-фреймы.
Ни «Cisco» ни «Juniper», на данный момент, не предлагают такой функционал в своих устройствах и это понятно, ведь их оборудование ориентировано на больших операторов связи. Проект «EtherBlade.net» изначально ориентирован на клиентов разных калибров и уже имеет в своем арсенале разработанный метод «хардварной» сборки фрагментов, позволяющий эмулировать «ethernet-anywhere» каналы c «telco-grade» качеством сервиса. За подробной документацией и исходными кодами добро пожаловать на https://etherblade.net.
10 Гигабит
На настоящий момент также ведется активная работа над десятигигабитной версией инкапсулятора и портированием его на железо, в частности на показанную в начале статьи Intel Cyclone 10GX плату от питерской команды General R&D.
Помимо описанного в данной статье функционала десятигигабитные инкапсуляторы могут применяться в сетях операторов связи для перенаправления «интересного» трафика на клиринговые центры DDoS, сервера «Яровой» и т.д. Подробнее об этом — в следующей статье, посвященной концепции SDN (software defined networking) и использованию «Etherblade.net» в больших сетях – stay tuned.