Los desarrolladores de la biblioteca criptográfica wolfSSL están desarrollando el stack TCP/IP wolfIP, optimizado para su uso en dispositivos embebidos con recursos limitados, así como para sistemas que operan en tiempo real y soluciones que requieren una alta fiabilidad (Safety-Critical). Para un consumo de recursos predecible, wolfIP no utiliza la asignación dinámica de memoria: todos los buffers y tablas de sockets tienen un tamaño fijo y son configurables en el momento de la compilación. El código del proyecto está escrito en C y se distribuye bajo la licencia GPLv3.
El proyecto puede utilizarse como un stack TCP/IP en espacio de usuario, reemplazando el stack de red de Linux, FreeBSD y macOS, así como siendo adecuado para su uso en sistemas embebidos basados en FreeRTOS, SafeRTOS, Zephyr, Azure RTOS ThreadX, NuttX, RTEMS, VxWorks y QNX. Además, sobre la base de wolfIP se pueden crear aplicaciones de red autónomas que se ejecutan sobre hardware (bare-metal). En combinación con la biblioteca wolfSSL, se proporciona soporte para TLS 1.3, lo que permite crear sistemas embebidos compactos que soportan HTTPS.
Características principales de wolfIP:
- Uso de buffers preasignados en memoria estática para el procesamiento de paquetes de red. No se utilizan llamadas a malloc y free.
- Posibilidad de utilizar en lugar de los stacks de red del sistema en sistemas POSIX.
- Soporte para sockets BSD en modo no bloqueante y bloqueante.
- Tamaño compacto (4200 líneas de código, 4 veces más pequeño que el stack TCP/IP lwIP).
- Soporte para interfaces de red STM32 Ethernet.
- Posibilidad de usar la interfaz de red TAP para probar la funcionalidad sin hardware.
- Desarrollo considerando sistemas con altos requisitos de seguridad: configuración determinística y reproducible; modelo de despliegue que garantiza seguridad (Secure-by-default); aislamiento entre componentes. Soporte para actualizaciones de versiones seguras; largo soporte.
- Consideración de los requisitos para sistemas de alta fiabilidad: ausencia de asignación dinámica de recursos; grupos de memoria fijos; uso controlado de recursos; comportamiento predecible; arquitectura simplificada; soporte para la generación de artefactos para verificación.
- Implementación de IPv4, UDP, TCP, IPSEC, ARP, ICMP, cliente DHCP, cliente DNS y servidor HTTP/HTTPS. Soporte en la implementación de TCP RFC 7323 (Marcas de tiempo TCP, medición RTT, PAWS, Escalado de ventana), MSS (Tamaño máximo de segmento), RTO (Tiempo de espera para retransmisión) y SACK (Reconocimiento selectivo). Varios algoritmos de control de congestión.
Entre las limitaciones de wolfIP se destaca la posibilidad de utilizar wolfIP solo como un nodo final, capaz de recibir y establecer conexiones, pero no soportando el enrutamiento de tráfico entre las interfaces de red.
Además, se puede mencionar el desarrollo activo por parte de un empleado de Red Hat de un stack TCP/IP similar llamado passt, que funciona en espacio de usuario y no utiliza asignación dinámica de memoria. El proyecto passt se desarrolla para establecer un canal de comunicación entre el entorno host y los sistemas invitados en QEMU como una alternativa más segura a libslirp. El código de passt está escrito en C, tiene alrededor de 5000 líneas y se distribuye bajo la licencia GPLv2+.
Entre las características de passt se puede señalar: soporte para IPv6 además de IPv4, optimizaciones basadas en instrucciones AVX2, protección contra synflood, soporte integrado para QEMU, libvirt y Podman, paquetes para todas las distribuciones populares, servicio de proxy ARP, servidores DHCPD, DHCPv6 y NDP minimalistas, perfil seccomp para bloquear todas las llamadas al sistema no utilizadas, soporte para NAT, posibilidad de usarse como un reemplazo transparente de slirp4netns.
Fuente: opennet.ru
