# 組み込み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