The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

wolfIP и passt - легковесные стеки TCP/IP, работающие без динамического выделения памяти

14.03.2026 11:08 (MSK)

Разработчики криптографической библиотеки wolfSSL развивают TCP/IP стек wolfIP, оптимизированный для использования на встраиваемых устройствах, имеющих ограниченные ресурсы, а также для систем, работающих в режиме реального времени, и решений, требующих повышенной надёжности (Safety-Critical). Для предсказуемого потребления ресурсов в wolfIP не используется динамическое выделение памяти - все буферы и таблицы сокетов имеют фиксированный размер и настраиваются на этапе компиляции. Код проекта написан на языке Си и распространяется под лицензией GPLv3.

Проект может использоваться в качестве работающего в пользовательском пространстве TCP/IP-стека, подменяющего сетевой стек Linux, FreeBSD и macOS, а также пригодного для применения во встраиваемых системах на базе FreeRTOS, SafeRTOS, Zephyr, Azure RTOS ThreadX, NuttX, RTEMS, VxWorks и QNX. Помимо этого на базе wolfIP могут создаваться самодостаточные сетевые приложения, запускаемые поверх оборудования (bare-metal). В сочетании с библиотекой wolfSSL предоставляется поддержка TLS 1.3, что позволяет создавать компактные встраиваемые системы, поддерживающие HTTPS.

Основные особенности wolfIP:

  • Использование при обработке сетевых пакетов предварительно выделенных в статической памяти буферов. Вызовы malloc и free не используются.
  • Возможность использования вместо штатных системных сетевых стеков на POSIX-системах.
  • Поддержка BSD-сокетов в неблокирующем и блокирующем режиме.
  • Компактный размер (4200 строк кода, в 4 раза меньше TCP/IP стека lwIP).
  • Поддержка сетевых интерфейсов STM32 Ethernet.
  • Возможность использования сетевого интерфейса TAP для тестирования работы без оборудования.
  • Разработка с оглядкой на системы с повышенными требованиями к безопасности: детерминированная и воспроизводимая конфигурация; модель развёртывания, обеспечивающая безопасность (Secure-by-default); изоляция между компонентами. Поддержка безопасного обновления версий; длительное сопровождение.
  • Учёт требований к высоконадёжным системам: отсутствие динамического выделения ресурсов; фиксированные пулы памяти; контролируемое использование ресурсов; предсказуемое поведение; упрощённая архитектура; поддержка генерации артефактов для верификации.
  • Реализация IPv4, UDP, TCP, IPSEC, ARP, ICMP, DHCP-клиента, DNS-клиента и HTTP/HTTPS-сервера. Поддержка в реализации TCP RFC 7323 (TCP Timestamps, RTT measurement, PAWS, Window Scaling), MSS (Maximum Segment Size), RTO (Retransmission timeout) и SACK (Selective Acknowledgment). Несколько алгоритмов контроля перегрузки (congestion control).

Из ограничений wolfIP отмечается возможность использования wolfIP только в роли конечного узла, способного принимать и устанавливать соединения, но не поддерживающего маршрутизацию трафика между сетевыми интерфейсами.


В дополнение можно отметить активное развитие сотрудником Red Hat похожего TCP/IP стека passt, работающего в пользовательском пространстве и не использующего динамическое выделение памяти. Проект passt развивается для организации канала связи между хост-окружением и гостевыми системами в QEMU в качестве более безопасной замены libslirp. Код passt написан на языке Си, насчитывает около 5000 строк и распространяется под лицензией GPLv2+.

Из особенностей passt можно отметить: поддержка IPv6 помимо IPv4, оптимизации на базе инструкций AVX2, защита от synflood, встроенная поддержка QEMU, libvirt и Podman, пакеты для всех популярных дистрибутивов, сервис ARP proxy, минималистичные серверы DHCPD, DHCPv6 и NDP, seccomp-профиль для блокирования всех неиспользуемых системных вызовов, поддержка NAT, возможность использования в качестве прозрачной замены slirp4netns.

  1. Главная ссылка к новости (https://news.ycombinator.com/i...)
  2. OpenNews: Выпуск криптографической библиотеки wolfSSL 5.0.0
  3. OpenNews: Intel представил сокращённый вариант сетевого стека для Linux
  4. OpenNews: Проект LibOS развивает вариант ядра Linux с сетевым стеком в форме библиотеки
  5. OpenNews: Выпуск сетевого стека F-Stack 1.24, выполняемого в пространстве пользователя
  6. OpenNews: Доступен открытый Wi-Fi стек OpenWifi 1.4
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/64989-wolfip
Ключевые слова: wolfip, tpcip, wolfssl
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (61) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 12:54, 14/03/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +7 +/
    Странно, почему весь критический код не пишется подобным образом. :)
     
     
  • 2.8, шолб (?), 13:40, 14/03/2026 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Тогда не получится делать важное табло с надутыми щоками, которое очень нужно для залезания на табурет и декламирования "посмотрите какую сложную уробору я сделяль, как мощны мои лапищи." Современное программирование с технической стороны не про практичность, а про самоутверждение. А если и условия потребуют практичности, то она будет уровня "от сохи". Зато с апломбом.
     
     
  • 3.29, Аноним (29), 17:43, 14/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > нужно для залезания на табурет и декламирования "посмотрите какую сложную уробору я сделяль, как мощны мои лапищи." Современное программирование с технической стороны не про практичность, а про самоутверждение

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

     
     
  • 4.64, шолб (?), 23:49, 14/03/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Ты этот современный софт глазами видел, да? Да, именно что уровень хеллоуворлдов. И таки да, либо сумрачным (чайще всего ещё и упоротым) гением, либо толпой мартышек с сдвг. Нету у меня для вас других программистов, т-щ комментатор. И заказчиков тоже нету.
     
  • 3.66, Аноним (66), 00:44, 15/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    " - Дядя, ты что - Арлекин-Петрушка?". В такой манере, как в сабже, на мой взгляд, значительно сложнее делать что-то нетривиальное - всё управление структурами внутри статически выделенной памяти, расчёт/запоминание их диапазонов и смещений и прочее ты ложишь на свои плечи, вместо, например, тупого динамического выделения нового куска памяти под очередной новый массив/структуру. Разве что реализация какого-нибудь кольцевого буфера там будет (почти) одинаковая. И в обоих случаях у тебя одинаковый шанс посчитать смещение неправильно и вылезти за пределы буфера.
     
  • 2.16, Аноним (16), 14:48, 14/03/2026 [^] [^^] [^^^] [ответить]  
  • +6 +/
    Вопрос из серии "почему в Солярис не ставят кресла с катапультой". Потому что это дорого. Раньше, когда информатизация была на начальном уровне, мир готов был мириться с инцидентами ИБ, потому что "писать более надёжно" было дороже, чем принять риски ИБ. Сейчас не так, всеобщая информатизация ведёт к потере гигатонн бабла из-за взломов и атак. Поэтому мир и начал двигаться в сторону секурити, начал закачивать туда бабло. Потому что это стало дешевле, чем терять деньги на атаках.
     
  • 2.18, Jh (?), 14:56, 14/03/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    не факт что так лучше для критического софта. Переполнение стека никто не отменял)
     
     
  • 3.65, sena (ok), 00:15, 15/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Так смайлик в конце об этом и намекает :)

    Задавать размеры буферов на этапе компиляции это очень странная идея, граничащая с глупостью. Чем это безопаснее, чем задать размеры буферов, например, в конфиге?

     
  • 2.25, timur.davletshin (ok), 16:24, 14/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    В подобных стеках традиционно масса дыр.
     
  • 2.72, Аноним (1), 07:24, 15/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Забавно, что ни один эксперт который зашёл в этот тред не не написал, что работа с указателями тупо быстрее. А так как миром правят корпорации которым подавай все самое быстрое для высоконагруженных систем... Ну вы поняли. ;)
     

  • 1.2, Аноним (2), 12:56, 14/03/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    > Использование при обработке сетевых пакетов предварительно выделенных в статической памяти буферов. Вызовы malloc и free не используются.

    Жаль, что это не спасет от других тысячи способов получить UB на этом прекрасном языке.

     
     
  • 2.6, Аноним (6), 13:31, 14/03/2026 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > Жаль, что это не спасет от других тысячи способов получить UB на этом прекрасном языке.

    На этом прекрасном языке написали легковесный TCP/IP стек, в отличие от...

     
     
  • 3.10, Аноним (2), 13:41, 14/03/2026 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Плохая попытка.
    https://github.com/smoltcp-rs/smoltcp
     
     
  • 4.13, Аноним (13), 14:20, 14/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    ls -lh smoltcp/target/release/libsmoltcp.rlib
    17M авг  1  2022
     
     
  • 5.15, Аноним (2), 14:48, 14/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    [profile.release]
    debug = 2

    и отсутствие LTO, так как ты собрал это как библиотеку.

     
     
  • 6.37, Аноним (37), 19:09, 14/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    На C++ это не проблема.
     
  • 5.17, Аноним (29), 14:49, 14/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    И что ты хотел сказать размером промежуточного файла растового компилятора? Нужно финальный бинарь мерять.
     
     
  • 6.39, Аноним (37), 19:19, 14/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Размер финального стрипнутого бинаря - 11M. Да, он всасывает всю функциональность smoltcp, и превращает её в cишную либу, кроме smoltcp и тонюсенькой обёртки вокруг неё в том бинаре ничего нет.
     
     
  • 7.49, Аноним (29), 21:05, 14/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > Размер финального стрипнутого бинаря - 11M
    > в том бинаре

    Бинаря какой именно программы/библиотеки? Давай ссылку на код и опции сборки.

     
  • 4.54, Аноним (54), 21:58, 14/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    И многие знают про эту вашу "хорошую" попытку?  А тот же lwIP на Сишке знают многие микроконтроллерщики.
     
  • 3.11, Аноним (11), 13:56, 14/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Правильно писать: на этом прекрасном языке написали вагон и маленькую тележку стеков которыми пользуются все, в отличие от... Ожидаемо что и UB в штуках которыми не пользуются никого не интересуют. А если начинают пользоваться, то там тоже всякого вылазит, но чаще всего "ну мы прост не реализовали эту штуку реализованную ВЕЗДЕ, во всех других ЯП, потому что нишмагли"
     
  • 2.32, Аноним (-), 18:07, 14/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Угу.

    См. CVE-2009-1897.

     
     
  • 3.62, Аноним (-), 23:07, 14/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > См. CVE-2009-1897.

    В 2009 сабж еще не релизнулся даже...

     
  • 2.35, Аноним (-), 18:23, 14/03/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ave Ada. Ave SPARK.
     
     
  • 3.55, Аноним (-), 21:59, 14/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > Ave Ada. Ave SPARK.

    Rest in peace Arian V, rest in peace...

     
  • 2.61, Аноним (61), 22:53, 14/03/2026 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Жаль, что это не спасет от других тысячи способов получить UB на этом прекрасном языке.

    От тысяч способов получить UB спасает осведомлённость о возможности UB, которую программист может почерпнуть из документации.
    Но это относится только к тем, кто понимает - UB в стандарте языка есть предупреждение, а не предписание.

     
     
  • 3.67, Аноним (29), 00:46, 15/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > От тысяч способов получить UB спасает осведомлённость о возможности UB, которую программист может почерпнуть из документации.

    Каасика жанра: чтобы не было ошибок - просто не делай ошибок.

     

  • 1.9, Аноним (54), 13:40, 14/03/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Кто-нибудь из этих проектов добавит, наконец, SCTP для микроконтроллеров?
     
     
  • 2.24, Аноним (24), 16:11, 14/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    В wolf даже IPv6 не завезли (хотя с IPv4 геморнее из-за де-факто необходимости пересобирать не влезающий в MTU пакет, если только не захардкодили бит выключающий это), какое там SCTP. Плюс у вас роутер, который в проде сегодня зачем-то будет использовать IPv4, натить ничего кроме TCP и UDP не умеет.
     
     
  • 3.45, Аноним (54), 20:31, 14/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Во-первых, мне это в серой зоне адресов.
    Во-вторых, мой роутер на OpenWRT в IPv6 может.
     
  • 3.56, Аноним (-), 22:00, 14/03/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > В wolf даже IPv6 не завезли (хотя с IPv4 геморнее из-за де-факто
    > необходимости пересобирать не влезающий в MTU

    Это как? В новости написано "Из особенностей passt можно отметить: поддержка IPv6 помимо IPv4" - врут чтоли?

     
  • 2.31, Аноним (31), 17:57, 14/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    https://github.com/richlegrand/usrsctp-esp32
     
  • 2.46, Страдивариус (?), 20:37, 14/03/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Можно. А смысл?
     
     
  • 3.57, Аноним (54), 22:01, 14/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Не было бы смысла - не спрашивал бы.
     

  • 1.12, Аноним (12), 14:13, 14/03/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > оптимизации на базе инструкций AVX2

    Наверняка в QEMU внедрят и дропнут кору дуба.

     
     
  • 2.23, Аноним (54), 15:57, 14/03/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Соберём с --without-avx2.
     
     
  • 3.38, Аноним (37), 19:12, 14/03/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Ну уберут '--without-avx2', расскажут "неразумным" любителям "хлама" что "нужно двигаться дальше".
     
     
  • 4.43, Аноним (54), 20:24, 14/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Попросим какого-нибудь чата заменить ассемблерные вставки с этими вашими AVX на generic код на Сишке.
     
     
  • 5.69, Аноним (69), 01:39, 15/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Ну и будешь сам свой форк поддерживать, а дистры просто кору дуба дропнут, сначала в этом пакете, а потом скажут "многие пакеты на коре дуба неработоспособны, пора её совсем дропнуть".
     

  • 1.14, Аноним (29), 14:36, 14/03/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    > требующих повышенной надёжности (Safety-Critical)
    > написан на языке Си

    Классика жанра. 🤦 Пишем софт для "повышенной надежности" с использованием языка, в котором эта надежность максимально скомпрометирована by design.

    В их списке вулнов полно классических сишечных выходов за пределы буфера, но выводов такие ребята традиционно не делают:

    https://www.wolfssl.com/docs/security-vulnerabilities/

     
     
  • 2.19, Аноним (19), 14:56, 14/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Реалисты же. Сейчас практически все нормальные сдк для микроконтроллеров - на C, хрен туда впихнешь библиотеку на расте.
     
     
  • 3.26, Аноним (29), 17:29, 14/03/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Реалисты же.

    В реальности safety-critical и С не очень сочетаются, о чем говорит уже более полувека не прекращающийся поток классических сишечных ошибок.

     
     
  • 4.52, Сладкая булочка (?), 21:40, 14/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > В реальности safety-critical и С не очень сочетаются

    Если бы не сочетались, то никто бы не писал верифицированный компилятор для с.

     
  • 4.59, Аноним (-), 22:32, 14/03/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > В реальности safety-critical и С не очень сочетаются, о чем говорит уже более
    > полувека не прекращающийся поток классических сишечных ошибок.

    В реальности большая часть safety critical систем написана на си. А для ваших пафосных языков - даже просто гайдлайнов как sefety critical делать по сути - нет. И сертификаций и тех кто головой бы за это отвечать - тоже еще поискать. Или вон там у господ тулчейн на основе LLVM - проприетарный в хлам. Лицензия позволяет. Так что если не заплатил проприетарщику - во тебе, а не safety critical. Не, panic в runtime - совсем не "safe" в том смысле что контроль над ситуацией полностью теряется и это упс.

     
  • 3.27, Аноним (29), 17:33, 14/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > Сейчас практически все нормальные сдк для микроконтроллеров - на C, хрен туда впихнешь библиотеку на расте.

    Почему "хрен впихнешь"? Все эти россказни о том, что растовый код якобы получается в 10 раз больше аналогичного сишного - они уже порядком надоели и были не единожды опровержены даже тут в комментариях.

     
     
  • 4.70, Аноним (70), 01:46, 15/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Ага, щщас.

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

    А вот повседневный код — увы, нет. Раст выплёвывает копролитные погадки, слепленные из десятков, а то и сотен библиотек и весящие многие мегабайты, даже в релизном режиме.

     
  • 3.36, Аноним (-), 18:33, 14/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Rust: #[no_mangle] pub extern "C" fn my_func()

    Ada: pragma Export (C, My_Func, "my_func")

     
     
  • 4.60, Аноним (-), 22:34, 14/03/2026 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > Rust: #[no_mangle] pub extern "C" fn my_func()

    Вот когда вы сможете написать фирмварь делающую что-то осмысленное - и доверите ей свою тушку - тогда и будете расказывать как оно.

    > Ada: pragma Export (C, My_Func, "my_func")

    Как показал пример Arian V - продолбать ракету ценой несколько гигабаксов можно и без таких сложностей.

     

  • 1.34, Гуманоид (?), 18:12, 14/03/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Почему сразу не было сделано таким образом?
     
  • 1.40, Аноним (40), 19:46, 14/03/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >использоваться в качестве работающего в пользовательском пространстве TCP/IP-стека, подменяющего сетевой стек

    Зачем охранять ключи, если в пользовательском пространстве доступен весь код.
    >(bare-metal)

    Привет, руткит.
    >все буферы и таблицы сокетов имеют фиксированный размер и настраиваются на этапе компиляции.

    Атакеру много сокетов не надо.

     
  • 1.41, Аноним10084 и 1008465039 (?), 19:57, 14/03/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Не использовать динамическую память - одно из десяти NASA'вских правил для критичного кода
     
     
  • 2.73, Аноним (73), 08:51, 15/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > Не использовать динамическую память - одно из десяти NASA'вских правил для критичного кода

    Да и в MISRA насколько я помню сие весьма привествуется. Если вы не юзаете *alloc()/free и проч - вы и не облажаетесь в этом, соответственно. И из уравнения стабильности сиситемы вдолгую - выпадает "heap usage". Остается только стэк. Правда, отдельные таланты типа тойоты умудряются и с этим облажаться. Но от совсем идиотов - никакие measures не помогут.

     

  • 1.42, Аноним (42), 20:20, 14/03/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Странно, что не на Zig. Он как раз под такое и заточен.
     
     
  • 2.44, Аноним (54), 20:27, 14/03/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    И не подерётесь с рaстаманaми, и не подерётесь ;)
     
  • 2.53, Сладкая булочка (?), 21:53, 14/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > Он как раз под такое и заточен.

    Пока он заточен на то, чтобы в новых версиях ломать синтаксис.

     

  • 1.47, Аноним (47), 20:50, 14/03/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    По описанию на удивление очень годно и вкусно
     
  • 1.48, Аноним (48), 20:55, 14/03/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Можно ли его собрать с выключенной поддержкой IPv4 и прочего барахла? Нужен только IPv6 SLAAC.
     
  • 1.50, Аноним (50), 21:11, 14/03/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    > Код проекта написан на языке Си
    > Safety-Critical

    Ну смешно же.

     
     
  • 2.58, Аноним (54), 22:04, 14/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Просмеёшься, потом приходи.
     

  • 1.51, Dmitry (??), 21:18, 14/03/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А как с производительностью у такого стека?
     
     
  • 2.71, Аноним83 (?), 03:13, 15/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Да никак, он написан чтобы на всяком мусоре сеть появилась.
    4200 строк нужно только для TCP, и то это мало если делать хорошую реализацию, со всеми фичами, которая сможет полностью канал утилизировать.

    Авто написали минимально рабочий код, чтобы хоть как то работало.

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2026 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру