UIP (マイクロIP)
uIP 0.9は、最小限のオペレーティングシステムの依存、最小のリソースの使用、完全なイベントループAPIを持つ唯一のバージョンであるが、オリジナルではIPv6を使用しておらず、IPv4のみをサポートしている。 このバージョンは、非常にリソースが限定された組み込みシステムで使用できる。
バージョン0.9は、イベントループシステムで動く、HTTP(簡単なウェブサーバー)、SMTP(Simple Mail Transfer Protocol)、FTP(File Transfer Protocol)、telnet(ターミナルエミュレーション)などの例とその小さなサイズにも関わらず、ソケットAPIを一切持たないため、uIP 0.9を使用するのは難しい。
uIPは広く使われているが、広く知られた弱さも持っている。 uIPの設計では32ビットの演算は最小限に抑えられ分離されている。8ビットと16ビットのCPUに最適なように調整されているからである。 また、16ビットのソフトウェアタイマー(小規模なマイクロコントローラーでは一般的である)は、オーバーフローしてシステムが停止することがあり得る。 これは、タイマーシステムがオーバーフローしないように修正することで可能である(例えば、タイマーをカウントダウンするか、合同算術を利用するなど)
もう1つの問題は、1つしかパケットバッファーがないことでスループットに問題が発生することである。
つまり、送信用と受信用の両方に使用する。 また、uIPがパケットを再送信する必要が生じた時は、アプリケーションコードを呼び出し、再送信させるデータを再生成してもらうことになる。
もう1つの変わった点は、uIPのコネクションの管理方法である。 多くのIP実装は1つのコネクションにつき1つのタスクを持っている。そして、そのタスクが通信の相手であるコンピューターのタスクと通信する。 uIPでは、マルチタスク可能なオペレーティングシステムは想定されていない。 コネクションは配列に保持される。 そして、呼び出される度に、uIPはコネクションを作り返信または送信するアプリケーションコードをサブルーチンとして呼び出す。 コネクションの配列のサイズは、uIPを再コンパイルすることで調整できる。
uIPは、TCP、UDP、IPを定義するRFCに準拠している。 また、ICMPも実装されている。