1 Punkte von GN⁺ 2024-09-08 | 1 Kommentare | Auf WhatsApp teilen

lwIP-Überblick

Einführung
  • lwIP ist eine eigenständige Implementierung eines kleinen TCP/IP-Protokoll-Stacks
  • Der Schwerpunkt liegt darauf, den RAM-Verbrauch zu reduzieren und gleichzeitig vollwertiges TCP beizubehalten
  • Es eignet sich für den Einsatz in Embedded-Systemen und benötigt einige Dutzend Kilobyte RAM sowie etwa 40 Kilobyte Code-ROM
  • Ursprünglich wurde es von Adam Dunkels entwickelt und wird heute von einem weltweiten Netzwerk von Entwicklern gepflegt
Funktionen
  • IP (Internet Protocol, IPv4 und IPv6): einschließlich Paketweiterleitung zwischen mehreren Netzwerkschnittstellen
  • ICMP (Internet Control Message Protocol): für Netzwerkwartung und Debugging
  • IGMP (Internet Group Management Protocol): Verwaltung von Multicast-Datenverkehr
  • MLD (Multicast Listener Discovery): für IPv6, mit dem Ziel der RFC-2710-Konformität
  • ND (Neighbor Discovery und zustandslose Adress-Autokonfiguration): mit dem Ziel der RFC-4861- und RFC-4862-Konformität
  • DHCP, AutoIP/APIPA (Zeroconf) und (zustandsloses) DHCPv6
  • UDP (User Datagram Protocol): einschließlich der experimentellen UDP-lite-Erweiterung
  • TCP (Transmission Control Protocol): Staukontrolle, RTT-Schätzung, Fast Recovery/Fast Retransmit und SACK-Übertragung
  • Raw-/native API: für bessere Performance
  • Optionale Berkeley-ähnliche Socket-API
  • TLS: optionale geschichtete TCP-Schicht ("altcp") für nahezu transparentes TLS (auf mbedTLS portiert)
  • PPPoS und PPPoE (Point-to-Point Protocol über seriell/Ethernet)
  • DNS (Domain Name Resolver, einschließlich mDNS)
  • 6LoWPAN (über IEEE 802.15.4, BLE oder ZEP)
Anwendungen
  • HTTP-Server: einschließlich SSI und CGI (HTTPS über altcp)
  • SNMPv2c-Agent: mit MIB-Compiler, v3 wird über altcp unterstützt
  • SNTP (Simple Network Time Protocol)
  • NetBIOS Name Service Responder
  • MDNS (Multicast DNS) Responder
  • iPerf-Server-Implementierung
  • MQTT-Client: TLS-Unterstützung ist über altcp möglich
Lizenz
  • lwIP wird kostenlos unter der BSD-Lizenz bereitgestellt
Entwicklung
  • lwIP hat sich zu einem hervorragenden TCP/IP-Stack für Embedded-Geräte entwickelt
  • Entwickler reichen Bugfixes, Verbesserungen und zusätzliche Funktionen ein und steigern damit den Nutzen des Stacks weiter
  • Die Entwicklung wird auf Savannah gehostet, und jeder kann über Git und Mailinglisten zur Verbesserung von lwIP beitragen
  • Der lwIP-TCP/IP-Stack wird im Git-Modul lwip gepflegt, Beiträge befinden sich im Git-Modul contrib
  • Details zum Zugriff auf den Git-Server finden sich in doc/savannah.txt
  • Die aktuellen Git-Bäume können im Web eingesehen werden: lwip, lwip-contrib
  • Patches und Bugmeldungen: lwIP-Projektseite
  • Continuous-Integration-Builds: Travis CI
Dokumentation

Zusammenfassung von GN⁺

  • lwIP bietet einen effizienten TCP/IP-Stack für Embedded-Systeme und minimiert den Speicherverbrauch
  • Es unterstützt verschiedene Netzwerkprotokolle und Anwendungen und bietet damit Flexibilität und Erweiterbarkeit
  • Durch die aktive Beteiligung der Entwickler-Community wird es kontinuierlich verbessert
  • Ähnliche Projekte mit vergleichbaren Funktionen sind FreeRTOS+TCP, uIP und weitere

1 Kommentare

 
GN⁺ 2024-09-08
Hacker-News-Kommentare
  • Vor einigen Jahren wurde LwIP in einem Projekt verwendet, um Systemtests effektiv durchzuführen

    • Es war ein Projekt, bei dem mehrere Mikrocontroller über ein internes LAN kommunizierten
    • Verwendet wurden ein Embedded-Kernel namens MicroCOS und der LwIP-IP-Stack
    • Es wurde ein Cross-Platform-Build-Tool eingerichtet, sodass der Code nativ oder als x64-Code kompiliert und auf den Entwicklerrechnern ausgeführt werden konnte
    • Der unterste Link-Layer-Teil von LwIP wurde gemockt, sodass Standard-TCP/IP verwendet werden konnte
    • Es wurde ein kleiner TCP-Server geschrieben, damit die Mikrocontroller-Anwendung auf dem Entwicklerrechner wie im echten System kommunizieren konnte
    • Dieses Setup funktionierte sehr gut und wurde über Jahre hinweg während der Projektentwicklung genutzt
  • IP-Stack ist eine untertriebene Bezeichnung

    • Es kann als HTTP-Client, HTTP-Server oder MQTT-Client verwendet werden
    • Es ist so etwas wie das busybox des Embedded-Networkings, hat aber eine deutlich praktischere Lizenz
  • Allen, die nach Optionen wie LwIP suchen, wird empfohlen, NetXDuo und die zugehörigen Gegenstücke ThreadX, FileX, LevelX und UsbX in Betracht zu ziehen

    • Es gehört zu den kommerziellen RTOS-Netzwerk-Stacks, die seit 20 Jahren genutzt werden
    • Die Eigentümerschaft hat mehrmals gewechselt; aktuell wird es von der Eclipse Foundation unterstützt und steht unter der MIT-Lizenz
    • Es wird empfohlen, NetXDuo statt LwIP zu verwenden
    • NetXDuo-Link
  • Adam Dunkels hat den Großteil von Protothreads geschrieben

  • Es wird gefragt, was nongnu.org ist und wie es mit gnu.org zusammenhängt

    • savannah.gnu.org ist eine Hosting-Site für „offizielle“ GNU-Software, die von der Free Software Foundation unterstützt wird
    • savannah.nongnu.org ist eine Hosting-Site für „Community“-Projekte, die nicht von der FSF unterstützt werden
    • Zugehöriger Link
  • Es dürfte der am häufigsten verwendete TCP/IP-Stack auf Geräten mit begrenzten Ressourcen sein

  • Ein Grund, warum LWIP geschätzt wird: Es erlaubt, denselben vom Ethernet-MAC-DMA zugewiesenen Speicherblock über die gesamte Lebensdauer eines Pakets hinweg zu verwenden

    • Der Speicher-„Pool“ kann optimiert werden, um die Anzahl der memcpys zu reduzieren
  • Für alle, die einen eigenen leichtgewichtigen TCP/IP-Stack implementieren möchten, ist Jeremy Benthams Buch <i>TCP/IP Lean</i> eine hervorragende Ressource

  • Auszug aus dem Artikel:

    • „Dadurch eignet sich lwIP für den Einsatz in Embedded-Systemen mit einigen Dutzend Kilobyte freiem RAM und etwa 40 Kilobyte Code-ROM“
  • Der Pico W verwendet das