Programiści biblioteki kryptograficznej wolfSSL rozwijają stos TCP/IP wolfIP, zoptymalizowany do użytku na zintegrowanych urządzeniach o ograniczonych zasobach, jak również w systemach działających w czasie rzeczywistym i rozwiązaniach wymagających wysokiej niezawodności (Safety-Critical). Aby zapewnić przewidywalne zużycie zasobów, w wolfIP nie stosuje się dynamicznego przydzielania pamięci — wszystkie bufory i tabele gniazd mają stały rozmiar i są konfigurowane na etapie kompilacji. Kod projektu napisany jest w języku C i jest udostępniany na licencji GPLv3.
Projekt może być używany jako działający w przestrzeni użytkownika stos TCP/IP, który zastępuje stos sieciowy systemów Linux, FreeBSD i macOS, a także nadaje się do zastosowania w zintegrowanych systemach opartych na FreeRTOS, SafeRTOS, Zephyr, Azure RTOS ThreadX, NuttX, RTEMS, VxWorks i QNX. Ponadto na podstawie wolfIP można tworzyć samodzielne aplikacje sieciowe, uruchamiane bezpośrednio na sprzęcie (bare-metal). W połączeniu z biblioteką wolfSSL oferuje wsparcie dla TLS 1.3, co umożliwia tworzenie kompaktowych zintegrowanych systemów obsługujących HTTPS.
Główne cechy wolfIP:
- Wykorzystanie buforów statycznie przydzielonych w pamięci do przetwarzania pakietów sieciowych. Wywołania malloc i free nie są używane.
- Możliwość stosowania zamiast standardowych systemowych stosów sieciowych w systemach POSIX.
- Wsparcie dla gniazd BSD w trybie blokującym i nieblokującym.
- Kompaktowy rozmiar (4200 linii kodu, 4 razy mniejszy niż stos TCP/IP lwIP).
- Wsparcie dla interfejsów sieciowych STM32 Ethernet.
- Możliwość użycia interfejsu sieciowego TAP do testowania działania bez sprzętu.
- Rozwój z uwzględnieniem systemów o podwyższonych wymaganiach dotyczących bezpieczeństwa: deterministyczna i powtarzalna konfiguracja; model wdrażania zapewniający bezpieczeństwo (Secure-by-default); izolacja między komponentami. Wsparcie dla bezpiecznego aktualizowania wersji; długoterminowe wsparcie.
- Uwzględnienie wymagań dotyczących systemów o wysokiej niezawodności: brak dynamicznego przydzielania zasobów; stałe pule pamięci; kontrolowane użycie zasobów; przewidywalne zachowanie; uproszczona architektura; wsparcie dla generacji artefaktów do weryfikacji.
- Implementacja IPv4, UDP, TCP, IPSEC, ARP, ICMP, klienta DHCP, klienta DNS oraz serwera HTTP/HTTPS. Wsparcie dla implementacji TCP RFC 7323 (znaczniki czasu TCP, pomiar RTT, PAWS, skalowanie okna), MSS (Maksymalny Rozmiar Segmentu), RTO (timeout retransmisji) oraz SACK (selektywne potwierdzenie). Wiele algorytmów kontroli przeciążenia.
Wśród ograniczeń wolfIP warto zauważyć, że może on działać tylko jako końcowy punkt zdolny do nawiązywania i akceptowania połączeń, ale nie wspiera routingu ruchu pomiędzy interfejsami sieciowymi.
Dodatkowo warto wspomnieć o aktywnym rozwoju podobnego stosu TCP/IP o nazwie passt, rozwijanego przez pracownika Red Hat, który działa w przestrzeni użytkownika i nie używa dynamicznego przydzielania pamięci. Projekt passt jest rozwijany w celu utworzenia kanału komunikacyjnego między środowiskiem gospodarza a systemami gościnnymi w QEMU jako bezpieczniejsza alternatywa dla libslirp. Kod passt jest napisany w języku C, liczy około 5000 linijek i jest rozpowszechniany na licencji GPLv2+.
Wśród cech passt można wyróżnić: wsparcie IPv6 oprócz IPv4, optymalizację bazującą na instrukcjach AVX2, ochronę przed synfloodingiem, wbudowane wsparcie dla QEMU, libvirt oraz Podman, pakiety dla wszystkich popularnych dystrybucji, usługę proxy ARP, minimalistyczne serwery DHCPD, DHCPv6 i NDP, profil seccomp do blokowania wszystkich nieużywanych wywołań systemowych, wsparcie NAT, możliwość użycia jako przezroczysta alternatywa dla slirp4netns.
Źródło: opennet.ru
