Сетевой стек для встраиваемых систем: обзор wolfIP

Сетевой стек для встраиваемых систем: обзор wolfIP

wolfIP – открытый TCP/IP-стек компании wolfSSL для встраиваемых систем с жёсткими ограничениями по ресурсам. Главная идея проекта проста: стек вообще не использует динамическое выделение памяти во время работы. Вместо malloc он опирается на заранее выделенные буферы, фиксированное число сокетов и статическую память. Разработчик подаёт такой подход как способ сделать сетевое поведение предсказуемым и пригодным для систем, где заранее важно понимать границы по памяти, времени отклика и числу ресурсов.

Кратко о проекте

Параметр Описание
Назначение TCP/IP-стек для встраиваемых и ресурсоограниченных систем
Ключевая особенность Не использует динамическое выделение памяти
Модель работы Фиксированное число сокетов и заранее выделенные буферы обработки пакетов
Сетевые режимы Обычная конечная точка, работа с несколькими интерфейсами и, при необходимости, пересылка IPv4-трафика
Дополнительные возможности HTTP/HTTPS-сервер, IPsec ESP, DHCP-клиент, DNS-клиент, порт для FreeRTOS, wolfGuard
Лицензия GPLv3

Проект ориентирован на случаи, где важнее не максимальная гибкость, а заранее заданные пределы. Поэтому в основе лежат три принципа: никакой динамической памяти, никаких «скрытых» ресурсов, которые трудно оценить до запуска, и как можно более детерминированное поведение под нагрузкой. wolfSSL отдельно пишет, что такой подход упрощает верификацию, сертификацию и анализ наихудшего сценария в системах реального времени и проектах, чувствительных к сбоям.

Cхема работы wolfIP

С практической точки зрения wolfIP выглядит как сетевое ядро для прошивок, контроллеров и других встраиваемых систем, где лишний поток, неучтённая аллокация или расплывчатые пределы по памяти могут стать проблемой не меньше, чем собственно сетевой код. В этом смысле проект ближе к специализированной инфраструктурной библиотеке, чем к «лёгкому аналогу Linux TCP/IP» для любых задач.

По описанию репозитория стек даёт совместимый с BSD неблокирующий интерфейс сокетов с настраиваемыми функциями обратного вызова, поддерживает заранее заданное число одновременных сокетов и обрабатывает пакеты в буферах, которые резервируются в статической памяти. По умолчанию проект работает как обычная конечная точка, но умеет обслуживать несколько интерфейсов и, если включить нужную конфигурацию, пересылать IPv4-трафик между ними. Именно здесь и проходит граница между «конечным устройством» и более сложным сетевым узлом.

Набор протоколов у проекта уже довольно широкий. На канальном уровне есть Ethernet II и ARP. На сетевом уровне – IPv4, ICMP, опциональная IPv4-пересылка и IPsec ESP в транспортном режиме. На транспортном уровне – UDP и TCP с поддержкой MSS, временны́х меток, масштабирования окна, подсчёта RTO, SACK, медленного старта, предотвращения перегрузок и быстрой повторной передачи. На прикладном уровне разработчик заявляет DHCP-клиент, DNS-клиент с A- и PTR-запросами, а также HTTP/HTTPS-сервер с поддержкой TLS через wolfSSL. Такой список делает стек уже не «игрушечным минимумом», а вполне серьёзной сетевой основой для встроенного продукта.

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

Сценарий использования

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

Репозиторий показывает и более «наземные» способы испытать стек. Через обёртку POSIX можно собрать libwolfip.so и подменить вызовы socket(2) у обычных программ на хосте через LD_PRELOAD. В таком режиме, например, nc или ping начинают работать не через сетевой стек ядра хоста, а через wolfIP и TAP-интерфейс wtcp0. Для разработчика это удобный способ прогнать функциональные тесты без переноса на целевое железо на самом первом этапе.

wolfGuard и собственная ветка виртуальной частной сети

В составе стека есть собственный драйвер wolfGuard, который wolfSSL описывает как реализацию протокола WireGuard, совместимую с требованиями FIPS, внутри wolfIP. Но здесь есть принципиальная оговорка: wolfGuard не совместим с обычными узлами WireGuard. Вместо стандартных криптографических примитивов проект использует набор на базе сертифицированных механизмов wolfCrypt FIPS, а потому работает только с другими экземплярами wolfGuard, в том числе с отдельным модулем wolfGuard для ядра Linux. Для регламентируемых сред это может быть плюсом, но для обычной инфраструктуры такое решение означает закрытую экосистему совместимости.

Репозиторий подробно описывает и межсовместимость с модулем ядра. Скрипт интеграционного теста с правами суперпользователя собирает wolfSSL и wolfGuard из исходников, загружает модуль, генерирует ключи P-256 и затем проверяет двустороннюю работу туннеля в двух режимах: когда соединение инициирует сам стек и когда соединение инициирует модуль ядра. 

Сильные стороны и ограничения

Плюсы Минусы
Не использует динамическую память и заранее ограничивает ресурсы Фиксированная модель сокетов и буферов требует точнее просчитывать конфигурацию заранее
Подходит для систем, где важны предсказуемость и анализ наихудшего сценария GPLv3 может не подойти части коммерческих встроенных проектов без отдельной стратегии лицензирования
Поддерживает не только базовые IPv4, UDP и TCP, но и HTTP/HTTPS, IPsec и VPN-ветку wolfGuard wolfGuard не совместим с обычным WireGuard и работает только внутри собственной экосистемы
Даёт обёртку POSIX и порт для FreeRTOS Проект молодой, поэтому внешних независимых разборов и большого числа внедрений пока немного
Хорошо сочетается с экосистемой wolfSSL и wolfCrypt Преимущества сильнее всего раскрываются в узком классе встраиваемых и критически важных сценариев, а не в универсальных сетевых задачах

Лучше всего стек смотрится там, где заранее известны пределы по памяти и соединениям, а требования к предсказуемости выше, чем требования к универсальности. wolfSSL прямо называет целевыми средами встраиваемые, системы реального времени и критически важные системы. В этих условиях отсутствие динамических аллокаций и фиксированная модель ресурсов действительно дают аргумент в пользу выбора такого стека. Там же, где системе важнее широкая совместимость, привычная экосистема и максимальная гибкость настройки на лету, преимущества такого дизайна уже не так очевидны.

Вывод

wolfIP – не универсальный сетевой стек «на все случаи», а специализированный инструмент для тех проектов, где сеть должна вести себя максимально предсказуемо и не тянуть за собой неочевидные расходы памяти. Сильная сторона проекта – жёсткий контроль ресурсов, уже неплохой набор протоколов и тесная связка с продуктами wolfSSL. Главный спорный момент – молодость экосистемы и выбор собственной FIPS-ветки wolfGuard, которая жертвует совместимостью с обычным WireGuard. Если задача состоит в том, чтобы получить компактный и детерминированный TCP/IP-стек для встраиваемой или критически важной среды, wolfIP выглядит как проект, за которым точно стоит следить.

Alt text
Обращаем внимание, что все материалы в этом блоге представляют личное мнение их авторов. Редакция SecurityLab.ru не несет ответственности за точность, полноту и достоверность опубликованных данных. Вся информация предоставлена «как есть» и может не соответствовать официальной позиции компании.
₽₽₽₽₽
маскулин-
ность
Антипов жжет
Мы приматы с кредитками. Эволюция смеётся.
Феминистки требуют равенства — и чтобы за них платили. Традиционалисты продают рэкет как ценности. Все врут себе.

Комнатный Блогер

Объясняю новую цифровую реальность

FREE
100%
Кибербезопасность · Обучение
УЧИСЬ!
ИЛИ
ВЗЛОМАЮТ
Лучшие ИБ-мероприятия
и вебинары — в одном месте
ПОДПИШИСЬ
T.ME/SECWEBINARS