# uIP
uIP(micro IP) は、[[Adam Dunkels]]が設計・実装した、完全な TCP/IP 通信に必要な機構を絶対最小の資源量で提供する実装である。
## 本論文での構成
- 1 個のネットワークインターフェースと IP・ICMP・TCP を実装
- UDP、スライディングウィンドウ、送信済みデータのスタック側バッファを持たない
- 単一のグローバルパケットバッファと固定長の接続状態テーブルを使用
- 接続ごとに未確認の TCP セグメントを 1 個だけ許す
- 再送時にはアプリケーションを呼び出し、アプリケーションが送信データを再生成
- イベント駆動 API により、タスク管理とコンテキスト切り替えを避ける
uIP はスライディングウィンドウを持たないが、TCP の仕様上それ自体は必須ではなく、ホスト間相互運用性を損なわない。
一方、未確認セグメントを 1 個に制限するため、受信側の遅延 ACK が最大 200〜500 ms 待つ状況では送信スループットが大きく低下する。
## 評価
Ethernut/Atmega128 上の AVR 実験では、uIP のコードサイズは 5,164 バイト、RAM 使用量は送信ウィンドウに応じて 400 バイト〜3 キロバイトだった。
遅延 ACK を有効にした場合、送信ウィンドウを増やしてもスループットは数万 bytes/second 程度に留まる。
論文は、小量のデータを送信する小型機器ではこの低下が必ずしも重大でないと説明する。(Source: [[@2003__MobiSys__Full TCP IP for 8-Bit Architectures]] §5–§8, Figure 4–6, Table 3)
## 関連
- [[lwIP]] — 同じ論文で比較された、機能性とスループットを重視する実装。
- [[組み込みTCP IP|組み込みTCP/IP]] — uIP と lwIP が示す設計空間。