WSHIP6.DLLは,Windows環境においてIPv6プログラミングに必要なAPIセットを実装したライブラリのことである。Windows NT/2000は,出荷時の状態ではIPv6がサポートされていない。IPv6関連のプロトコル・ドライバやライブラリを追加インストールすることで,IPv6対応となる。WSHIP6.DLLはこのときインストールされるモジュールのひとつで,標準のWinSock機能をOSに補完する。このような役割があるので,WinSockヘルパーライブラリに位置づけられている。

 WSHIP6.DLLの役割は,IPv6によってソケット・インタフェースがどのように拡張されたかを見ると理解しやすい。Windowsからのネットワーク・アクセスは,WinSockと呼ばれるAPIセットを通して行われている。このWinSockは,UNIX環境で一般的に用いられている「BSDソケット」から派生したインタフェースで,これを使うことで,若干の違いはあるものの,UNIXとWindowsの双方で同じスタイルでプログラミングできるようになる。

 WinSockの起源となったBSDソケットは,その誕生当初からIPv4に限らず複数のプトロコルを取り扱えるように設計されていた。こうした事情から,WinSockでもBSDソケットでも,IPv6が出現したといっても,プログラミング・インタフェースに本質的な変更は生じていない。

 IPv6プログラミングのために拡張された部分は,RFC2553「Basic Socket Interface Extensions for IPv6」に定められている(ただしRFC2553はすでに古い内容を含んでいるので,最新状況はInternet Draftを参照する必要がある)。そこで規定されている主な項目は次の通り。

a) ソケット・インタフェースへの拡張と使用法
b) 拡張されたリゾルバ・ライブラリの定義

 a)は,BSDソケットの上でIPv6のソケットの開き方や通信の仕方を定めたもの。処理の基本的な流れはIPv4と同じである。ソケットには,通信先を特定するために相手先のIPアドレスやポート番号などの情報が結び付けられている。これをソケット・アドレスと呼ぶ。IPv6ではアドレスのサイズが32ビットから128ビットへ広がったので,ソケット・アドレスの構造や取り扱い方法が変更されている。

 b)では,何回かの改訂を経て,現在はgetaddrinfo,getnameinfoという2つのインタフェースが標準的に使われるようになっている。

 リゾルバの役割は,ノード名からIPアドレスを取得したり,あるいはその逆にIPアドレスからノード名を取得すること。ソケット・インタフェースは,複数のプロトコルに対応しているので,IPv6が登場してもその設計を大幅に変更する必要はないが,旧来用いられてきたリゾルバはIPv4以外での利用をあまり想定していなかった。さらに,IPv6に対応したアプリケーションはIPv4にも対応していることがほとんどなので,IPv6/IPv4の両者を取り混ぜて効率的に利用できるリゾルバのAPIが必要とされていた。WSHIP6.DLLの実体はここで拡張されたリゾルバのAPIを含んでいる。

 IPv6に標準対応していない旧バージョンのOS(Windows NT/2000やFreeBSD3.x-RELEASEなど)は,拡張されたリゾルバを含んでいない。これらのOSでは,Microsoft提供のIPv6スタックやKAMEをインストールすることでIPv6対応となる。

 ただしこのとき,拡張されたリゾルバをOSのどの部分にインストールするかが問題となった。OSにあらかじめ付属する標準ライブラリを置き換えて拡張部分を埋め込んでしまうこともできるが,その場合は副作用が生じる範囲が広くなる。そこでマイクロソフトは,WSHIP6.DLL(KAMEにおいてはlibinet6)という追加ライブラリを導入し,IPv6が必要なアプリケーションがそれをリンクする方式を採っている。

 IPv6に標準対応した最近のOSは,標準ライブラリに拡張されたリゾルバAPIを組み込んでいる。最新のBSD系UNIXでは,最も標準的なライブラリであるlibcに取り込まれているので,OSをインストール後すぐに使える。一方Windows XPでも,WinSockの標準モジュール(WS2_32.DLL)が含んでいる。バイナリ互換を保つためWSHIP6.DLLは残されているが,WS2_32.DLLの中に含まれる実体へのポインタが格納されている。

(加藤淳也▼早稲田大学大学院 理工学研究科)


Basic Socket Interface Extensions for IPv6(RFC2553)
ftp://ftp.ietf.org/rfc/rfc2553.txt
RFC2553を改定するInternet Draft
ftp://ftp.ietf.org/internet-drafts/draft-ietf-ipngwg-rfc2553bis-05.txt
(2002年3月現在)