# 組み込みTCP/IP ## 定義 組み込み TCP/IP は、数十キロバイト級のコード領域と RAM しか持たない 8 ビット・16 ビット機器へ、ホスト間相互運用性を保った TCP/IP 通信を実装する設計領域である。 単に TCP の機構を削るのではなく、プロトコル要件を保つ範囲で状態、バッファ、アプリケーション・スタック間インターフェースの責任を再配置し、資源量と機能性の異なる実装を構成する。(Source: [[@2003__MobiSys__Full TCP IP for 8-Bit Architectures]]) ## 設計軸 - **機能性と資源量**: [[lwIP]] は動的バッファ、再送キュー、スライディングウィンドウ、複数インターフェース、UDP を保持する。[[uIP]] は単一バッファ、固定接続テーブル、1 セグメントの未確認制約で資源量を抑える。 - **状態の置き場所**: lwIP は送信済みデータと接続状態をスタック側に保持する。uIP は再送データの再生成をアプリケーションへ委ねる。 - **並行実行モデル**: BSD ソケットの停止待ちとタスク切り替えを避け、イベント到着と周期タイムアウトを処理するループを使う。 - **相互運用性と省略範囲**: RFC1122 のホスト間通信要件を実装し、アプリケーション内部だけに影響するソフトエラー報告などを省略する。 - **資源量と性能の交換**: uIP は AVR で 5,164 バイトのコードと 400 バイトからの RAM 構成を得るが、遅延 ACK と単一未確認セグメント制約によって送信性能が下がる。lwIP は AVR で 21,756 バイトのコードと 5〜16 キロバイトの RAM を使い、より大きな送信ウィンドウで遅延 ACK の影響を緩和する。 ## 横断的知見 - この concept は現時点で [[@2003__MobiSys__Full TCP IP for 8-Bit Architectures]] 1 件から立ち上げた。今後、組み込み OS、センサー向けネットワークスタック、現代の IoT ランタイムを突き合わせ、資源制約下のプロトコル実装がどの設計軸を維持・変更したかを追記する。 - 8 ビット・16 ビット機器向けの uIP/lwIP と、高速 NIC を使う iip は資源規模も性能目標も異なるが、TCP/IP 機構をどこまでスタック内部に保持し、どこから統合側へ委ねるかを設計軸にしている点で連続している。uIP は再送データの再生成をアプリケーションへ移し、iip は NIC、メモリ、実行ループ、CPU コア割り当てをコールバックと利用側関数へ移す。(Source: [[@2003__MobiSys__Full TCP IP for 8-Bit Architectures]], [[@2024__SIGCOMM CCR__iip - An Integratable TCP IP Stack]]) - 小型機器の資源制約と 100 Gbps 級ホストの資源制約は規模こそ異なるが、どちらも TCP/IP 機構を同じ固定構成に押し込めない問題として現れる。uIP/lwIP は状態・バッファ・再送責任を分け、高帯域 Linux の測定はデータコピー、キャッシュ、NUMA、スケジューリングを接続ごとに調整する必要を示す。(Source: [[@2003__MobiSys__Full TCP IP for 8-Bit Architectures]], [[@2021__SIGCOMM__Understanding Host Network Stack Overheads]]) ## 未解決の問い - 現代の IoT 向け TCP/IP 実装では、uIP の単一バッファ・アプリケーション主導再送と lwIP の動的バッファ・スタック主導再送のどちらが主流か。 - TLS、IPv6、アドレス自動設定、電力管理を追加したとき、RFC1122 の相互運用性と 8 ビット級の資源制約を同時に満たせるか。 - イベント駆動 API と現代の RTOS タスクモデルは、低レイテンシ、RAM 使用量、アプリケーションの再送責任をどのように分担するか。 - 1 セグメント制約を 2 セグメントへ緩和する論文の将来課題は、実際の組み込み TCP 実装でどの程度のコード・RAM 増加と性能改善をもたらすか。 - iip の API 境界と uIP/lwIP のイベント駆動 API を、TLS、IPv6、電力制御を含む現代の組み込み環境で統合できるか。 ## 関連 - [[lwIP]] — 機能性・複数接続・スループットを重視する実装。 - [[uIP]] — 絶対最小の資源量を重視する実装。 - [[アプリケーション並行実行モデル]] — イベント駆動 API とメインループの設計。 - [[TCP輻輳制御アルゴリズム]] — uIP が単一未確認セグメントにより輻輳制御を不要とし、lwIP が実装する対照。 - [[Webサーバアーキテクチャ]] — 組み込みウェブサーバーを含むイベント駆動モデル。 ## 出典 - [[@2003__MobiSys__Full TCP IP for 8-Bit Architectures]] §1, §4–§8, Figure 1–7, Table 1–5