1 ポイント 投稿者 GN⁺ 2024-09-08 | 1件のコメント | WhatsAppで共有

lwIP の概要

紹介
  • lwIP は独立した小型 TCP/IP プロトコルスタックの実装
  • RAM 使用量を抑えつつ、フルスケールの TCP を維持することに重点を置いている
  • 組み込みシステムでの利用に適しており、数十キロバイトの RAM と約 40 キロバイトのコード ROM を必要とする
  • もともとは Adam Dunkels によって開発され、現在は世界中の開発者ネットワークによって保守されている
機能
  • IP(インターネットプロトコル、IPv4 および IPv6): 複数のネットワークインターフェース間でのパケット転送を含む
  • ICMP(インターネット制御メッセージプロトコル): ネットワーク保守とデバッグ
  • IGMP(インターネットグループ管理プロトコル): マルチキャストトラフィック管理
  • MLD(マルチキャストリスナー検出): IPv6 向け、RFC 2710 準拠を目標
  • ND(近隣探索およびステートレスアドレス自動設定): RFC 4861 および RFC 4862 準拠を目標
  • DHCP、AutoIP/APIPA(Zeroconf)および(ステートレス)DHCPv6
  • UDP(ユーザーデータグラムプロトコル): 実験的な UDP-lite 拡張を含む
  • TCP(伝送制御プロトコル): 輻輳制御、RTT 推定、高速回復/高速再送、および SACK 送信
  • raw/ネイティブ API: パフォーマンス向上
  • オプションの Berkeley 互換ソケット API
  • TLS: ほぼ透過的な TLS のためのオプション階層 TCP("altcp")(mbedTLS にポーティング済み)
  • PPPoS および PPPoE(シリアル/Ethernet 経由の Point-to-Point Protocol)
  • DNS(ドメイン名リゾルバ、mDNS を含む)
  • 6LoWPAN(IEEE 802.15.4、BLE または ZEP 経由)
アプリケーション
  • HTTP サーバー: SSI および CGI を含む(altcp 経由の HTTPS)
  • SNMPv2c エージェント: MIB コンパイラを含み、v3 は altcp 経由でサポート
  • SNTP(簡易ネットワーク時刻プロトコル)
  • NetBIOS 名サービスレスポンダ
  • MDNS(マルチキャスト DNS)レスポンダ
  • iPerf サーバー実装
  • MQTT クライアント: TLS サポートは altcp 経由で利用可能
ライセンス
  • lwIP は BSD ライセンスの下で無償提供されている
開発
  • lwIP は組み込み機器向けの優れた TCP/IP スタックへと成長してきた
  • 開発者はバグ修正、改善、追加機能を提出し、スタックの有用性をさらに高めている
  • 開発は Savannah でホストされており、Git とメーリングリストを通じて誰でも lwIP の改善に貢献できる
  • lwIP TCP/IP スタックは lwip Git モジュールで保守され、コントリビューションは contrib Git モジュールにある
  • Git サーバーへのアクセスの詳細は doc/savannah.txt を参照
  • 現在の Git ツリーは Web で閲覧可能: lwip, lwip-contrib
  • パッチおよびバグ報告の提出: lwIP プロジェクトページ
  • 継続的インテグレーションビルド: Travis CI
ドキュメント

GN⁺ のまとめ

  • lwIP は組み込みシステム向けに効率的な TCP/IP スタックを提供し、メモリ使用量を最小限に抑える
  • 多様なネットワークプロトコルとアプリケーションをサポートし、柔軟性と拡張性を提供する
  • 開発者コミュニティの活発な参加により継続的に改善されている
  • 類似機能を持つプロジェクトとしては FreeRTOS+TCP、uIP などがある

1件のコメント

 
GN⁺ 2024-09-08
Hacker Newsの意見
  • 数年前のプロジェクトで LwIP を使って、システムテストを効果的に実施した

    • 複数のマイクロコントローラが内部 LAN を通じて通信するプロジェクトだった
    • MicroCOS という組み込みカーネルと LwIP IP スタックを使用した
    • クロスプラットフォームのビルドツールを設定し、ネイティブ実行または x64 コードとしてコンパイルして、開発者のマシン上で実行できるようにした
    • LwIP の最下位リンク層の部分をモック実装し、標準 TCP/IP を使用した
    • 小さな TCP サーバーを書き、マイクロコントローラのアプリケーションが実システムのように開発者マシン上で通信できるようにした
    • この構成は非常によく機能し、プロジェクト開発の間、何年にもわたって使われた
  • IP スタックという表現では過小評価されている

    • HTTP クライアント、HTTP サーバー、あるいは MQTT クライアントとして使える
    • 組み込みネットワーキング版の busybox のようなものだが、ライセンスははるかに扱いやすい
  • LwIP のような選択肢を探している人には、NetXDuo と、その対応物である ThreadX、FileX、LevelX、UsbX を検討することを勧める

    • 商用 RTOS のネットワークスタックの 1 つとして 20 年間使われてきた
    • 所有権が何度か変わり、現在は Eclipse Foundation が支援しており、MIT ライセンスで提供されている
    • LwIP より NetXDuo を使うことを勧める
    • NetXDuo リンク
  • Adam Dunkels は Protothreads の大部分を書いた

  • nongnu.org とは何で、gnu.org とどういう関係があるのか気になる

    • savannah.gnu.org は、Free Software Foundation が支援する「公式」GNU ソフトウェアのためのホスティングサイト
    • savannah.nongnu.org は、FSF が支援していない「コミュニティ」プロジェクトのためのホスティングサイト
    • 関連リンク
  • リソース制約のあるデバイスで最も多く使われている TCP/IP スタックかもしれない

  • LWIP が気に入っている理由は、Ethernet MAC DMA によって割り当てられた同じメモリブロックを、パケットの寿命の間ずっと使えるようにしてくれること

    • メモリ「プール」を最適化して、memcpy の回数を減らせる
  • 独自の軽量 TCP/IP スタックを実装しようとしている人にとって、Jeremy Bentham の著書 <i>TCP/IP Lean</i> は素晴らしい資料

  • 記事からの抜粋:

    • 「このため lwIP は、数十キロバイトの余裕 RAM と約 40 キロバイトのコード ROM を持つ組み込みシステムでの利用に適している」
  • Pico W はこれを使っている