出典 しゅってん : フリー百科 ひゃっか 事典 じてん 『ウィキペディア(Wikipedia)』
Winsock (Windows Sockets API , WSA ) は、Windows においてネットワーク ソフトウェア がネットワークサービス (特 とく にTCP/IP )にアクセスする方法 ほうほう を定義 ていぎ した技術 ぎじゅつ 仕様 しよう である。Windows 上 じょう のTCP/IP クライアントアプリケーション(FTPクライアント や Gopherクライアント)とTCP/IP プロトコルスタックとの標準 ひょうじゅん インタフェース を定義 ていぎ している。その名称 めいしょう はBSD 系 けい UNIX でプログラム間 あいだ の通信 つうしん に使 つか われたソケット と呼 よ ばれるAPI モデルに基 もと づいている。winsock.dll というDLL ファイルはWSAインタフェースの主要 しゅよう 部分 ぶぶん を提供 ていきょう するものであったため、このAPIを Winsock という略称 りゃくしょう で呼 よ ぶことには開発 かいはつ 者 しゃ 側 がわ の抵抗 ていこう があったし、ユーザー側 がわ にも多 おお くの混乱 こんらん があった。ユーザーは winsock.dll さえあれば、TCP/IP プロトコルが完全 かんぜん にサポートされるのだと誤解 ごかい していることが多 おお かった。
初期 しょき のマイクロソフトのオペレーティングシステム(MS-DOS もWindows も)は、ネットワーク機能 きのう が貧弱 ひんじゃく で、NetBIOS /NetBEUI を主 おも に使 つか っていた。これは階層 かいそう 化 か されていない、ルーティング不可能 ふかのう なネットワーク機能 きのう であり、IBM の NetBIOS をマイクロソフトが実装 じっそう したものであった。特 とく に当時 とうじ 、マイクロソフトはTCP/IP を完全 かんぜん に無視 むし していた。数々 かずかず の大学 だいがく グループ(MIT )や商用 しょうよう ベンダー(サン・マイクロシステムズ 他 た )がMS-DOS用 よう TCP/IPを開発 かいはつ し、ハードウェアに同 どう 梱 こり するなどして販売 はんばい していた。Windows がリリースされると、さらに Windows 向 む け TCP/IP を提供 ていきょう するベンダーが増 ふ えていった。しかし、マイクロソフトは相変 あいか わらず機能 きのう の貧弱 ひんじゃく な製品 せいひん を提供 ていきょう していた。
これらベンダーの製品 せいひん の弱点 じゃくてん は、それぞれ独自 どくじ のAPI を採用 さいよう していた点 てん である。また、メモリ使用 しよう 量 りょう (当時 とうじ 、640KBもあれば大 だい 容量 ようりょう とされていた)や、複数 ふくすう のプロトコルを並行 へいこう してサポートする方法 ほうほう がない点 てん も問題 もんだい だった。特 とく に最後 さいご の問題 もんだい 点 てん は重要 じゅうよう であった。当時 とうじ のネットワーク環境 かんきょう はベンダー毎 ごと に異 こと なり(例 たと えば、DECのDECnet、ノベル のNetware 、Banyan Vines、IBM Lan Manager など)、それぞれ違 ちが ったプロトコルを使 つか っていた(例 たと えば、ノベルは IPX/SPX、IBM は NetBIOS API ベースのプロトコル、マイクロソフトは NetBEUI Frames Protocol)。従 したが って、ユーザーが複数 ふくすう のネットワークサービスに接続 せつぞく するには、複数 ふくすう のブート構成 こうせい を用意 ようい し、使 つか いたいサービスに合 あ わせて立 た ち上 あ げ直 なお して、対応 たいおう するプロトコルを使 つか えるようにする必要 ひつよう があった。さらにプログラミングモデルが統一 とういつ されていないため、任意 にんい のベンダーのTCP/IP実装 じっそう で動作 どうさ するネットワークアプリケーションの開発 かいはつ は非常 ひじょう に困難 こんなん であった。何 なん らかの「標準 ひょうじゅん 化 か 」が必要 ひつよう であることは明 あき らかであった。
当時 とうじ 既 すで にPCネットワークの分野 ぶんや での標準 ひょうじゅん 化 か はいくつも進 すす められていた。アメリカ空軍 くうぐん の支援 しえん で行 おこな われた標準 ひょうじゅん 化 か として RFC 1001 と RFC 1002 がある。これは TCP/IP 上 じょう の NetBIOS 実装 じっそう であり、NBT (NetBIOS over TCP/IP) と呼 よ ばれた。次 つぎ に FTP Software 社 しゃ が中心 ちゅうしん となって進 すす められた Crynwr packet driver がある。これは、上述 じょうじゅつ したメモリ使用 しよう 量 りょう の問題 もんだい をアセンブリ言語 げんご で実装 じっそう することで回避 かいひ し、ネットワークカードの割 わ り込 こ みを独占 どくせん しないことで複数 ふくすう プロトコルの同時 どうじ サポート問題 もんだい にも対応 たいおう した。同様 どうよう の試 こころ みとしてノベルのODI (Open Data-Link Interface ) やマイクロソフトのNDIS (Network Driver Interface Specification ) といったAPIがある。これらはTCP/IPも含 ふく めたプロトコルスタックの完全 かんぜん な実装 じっそう ではない点 てん が重要 じゅうよう である。従 したが って、例 たと えば Crynwr の Russ Nelson が開発 かいはつ した QVT や WinQVT はDECのVT220端末 たんまつ エミュレータだが、どちらもアプリケーション内 ない にTCP/IPスタックを持 も っていた。packet driver と同時 どうじ に使 つか うことが可能 かのう で、例 たと えばノベルのIPX/SPX でNetWare のファイルサーバにアクセスすると同時 どうじ に、DECのVMS にTCP/IP経由 けいゆ でアクセスすることが可能 かのう であった。明 あき らかにこのような環境 かんきょう がこのプロジェクトの目指 めざ したものであり、例 たと えばパリのOECD などでそのような使 つか われ方 かた をしていた。
Windows Sockets API を提案 ていあん したのは JSB Software の Martin Hall であり、1991年 ねん 10月 がつ 、CompuServe での電子 でんし 掲示板 けいじばん での議論 ぎろん が最初 さいしょ であった。仕様 しよう の第 だい 1版 はん を編集 へんしゅう したのは Martin Hall、Mark Towfiq(Microdyne、後 のち にサン・マイクロシステムズ)、Geoff Arnold(サン・マイクロシステムズ)、Henry Sanders と J Allard(マイクロソフト )らである。著作 ちょさく 権 けん や知的 ちてき 所有 しょゆう 権 けん について議論 ぎろん があり、IETF を通 とお すとか非 ひ 営利 えいり 団体 だんたい を結成 けっせい するといった議論 ぎろん がなされた。結局 けっきょく 、単純 たんじゅん に著作 ちょさく 権 けん は5人 にん がそれぞれ所有 しょゆう することとなった。後 のち に J Allard はマイクロソフト社内 しゃない に大 おお きなオフィスを与 あた えられ、そこで ACK と NACK と名 な づけたイグアナを飼 か った。
Windows Socket API 仕様 しよう は2つのインタフェースを定義 ていぎ している。1つはアプリケーションソフトウェア 開発 かいはつ 者 しゃ が利用 りよう するAPI であり、もう1つはネットワークソフトウェア開発 かいはつ 者 しゃ が新 あら たなプロトコルモジュールをシステムに追加 ついか する際 さい に利用 りよう するSPI である。APIは準拠 じゅんきょ アプリケーションがWinsockに準拠 じゅんきょ して実装 じっそう された任意 にんい のプロトコルを使 つか って動作 どうさ 可能 かのう であることを保証 ほしょう する。SPI は準拠 じゅんきょ プロトコルモジュールを Windows に追加 ついか 可能 かのう であることと、任意 にんい のAPI準拠 じゅんきょ アプリケーションから利用 りよう 可能 かのう となることを保証 ほしょう する。リリース当初 とうしょ 、複数 ふくすう プロトコルサポートが必須 ひっす だったため、このような保証 ほしょう は重要 じゅうよう だったが、今 いま では学問 がくもん 的 てき 興味 きょうみ から語 かた られるだけである。Windows Socket version 2.0には IPX/SPX で使 つか われる機能 きのう も含 ふく まれているが、Winsock 2.0 リリース当時 とうじ から既 すで に廃 すた れつつあるプロトコルであり、今 いま ではこれを使 つか うものはほとんどないだろう。マイクロソフト は最近 さいきん の Windows には必 かなら ず高 こう 品質 ひんしつ なTCP/IP スタックを実装 じっそう しており、その代替 だいたい となる有力 ゆうりょく な製品 せいひん も存在 そんざい しない。さらに言 い えば、TCP/IP 以外 いがい のプロトコルを実装 じっそう しなければならない強 つよ い動機 どうき も存在 そんざい しない。
Windows Sockets はバークレーのソケット に基 もと づいているが、Windows の標準 ひょうじゅん プログラミングモデルに対応 たいおう するために機能 きのう を追加 ついか している。Winsock はソケットのほとんどの機能 きのう をカバーしているが、Windows と UNIX の根本 こんぽん 的 てき な違 ちが いからどうしても避 さ けられない差異 さい も生 しょう じている(とは言 い っても、STREAMS との差異 さい に比 くら べれば、ずっとソケットに近 ちか い)。APIに含 ふく まれる全 すべ ての関数 かんすう 名 めい の頭 あたま にはWSA
が付 つ く。例 たと えばホスト名 めい 参照 さんしょう の WSAGetHostByName()
などである。BSDソケットからの拡張 かくちょう で特筆 とくひつ すべきは、「非同期 ひどうき ソケット」およびオーバーラップI/O を利用 りよう した「オーバーラップソケット」である。非同期 ひどうき バージョンの関数 かんすう は、接頭 せっとう 辞 じ として WSAAsync
を付 つ け、WSAAsyncGetHostByName()
などという名前 なまえ になっており、Windowsのウィンドウメッセージによって結果 けっか を通知 つうち する。非同期 ひどうき 処理 しょり のキャンセルはWSACancelAsyncRequest()
で実行 じっこう する。オーバーラップソケットは完了 かんりょう 通知 つうち にWSAEVENT
オブジェクトとWSAOVERLAPPED
構造 こうぞう 体 たい を使用 しよう する。なお、Winsockの非同期 ひどうき ソケットやオーバーラップソケットは、BSDのノンブロッキングソケットとは異 こと なる概念 がいねん である。ブロッキングモードのsend()
およびrecv()
のタイムアウト時間 じかん を設定 せってい するソケットオプションSO_SNDTIMEO
およびSO_RCVTIMEO
を使用 しよう するには、ソケット作成 さくせい 時 じ にWSA_FLAG_OVERLAPPED
属性 ぞくせい が設定 せってい されている必要 ひつよう がある[ 1] 。Winsock2では、ソケットは既定 きてい でブロッキングモードで作成 さくせい される[ 2] 。またBSD互換 ごかん のsocket()
関数 かんすう を使用 しよう して作成 さくせい されたソケットは、既定 きてい でWSA_FLAG_OVERLAPPED
属性 ぞくせい を持 も つ[ 3] 。
設計 せっけい 目標 もくひょう は、UNIX から Windows へのソケットベースのアプリケーションの移植 いしょく を容易 ようい にすることであった。新 あら たに Windows 向 む けに書 か かれるプログラムにとって、そのAPIが十分 じゅうぶん かどうかはあまり考慮 こうりょ されなかった。このため、Winsock には移植 いしょく のために設計 せっけい された要素 ようそ がいくつか含 ふく まれている。例 たと えば、UNIX アプリケーションでは、ネットワークのエラーも標準 ひょうじゅん Cライブラリ の関数 かんすう 内 ない のエラーも同 おな じ errno
で表 あらわ される。これは Windows にはない機能 きのう であるため、Winsock はそのための関数 かんすう WSAGetLastError()
でエラー情報 じょうほう が得 え られるようにした。このような機能 きのう は役立 やくだ つものの、アプリケーションの移植 いしょく はなかなか困難 こんなん だった。多 おお くのTCP/IP アプリケーションは、仮想 かそう 端 はし 末 まつ とかfork システムコールといったUNIX のシステム固有 こゆう 機能 きのう を使 つか って実装 じっそう されており、そのような機能 きのう を Windows で再現 さいげん するのが困難 こんなん だったのである。しかし、間 ま もなく移植 いしょく よりも Windows 独自 どくじ のアプリケーション開発 かいはつ の方 ほう が主流 しゅりゅう となっていった。
Version 1.0 (1992年 ねん 6月 がつ )
Winsock の基本 きほん 定義 ていぎ 。BSDのソケットのインタフェースをかなり忠実 ちゅうじつ に守 まも っており、既存 きそん アプリケーションの移植 いしょく 性 せい を考慮 こうりょ している。Windows固有 こゆう の拡張 かくちょう が若干 じゃっかん あり、主 おも にメッセージ通知 つうち による非同期 ひどうき 操作 そうさ に関 かん するものである。文書 ぶんしょ ではTCP/IPに制限 せいげん してはいないが、具体 ぐたい 的 てき に言及 げんきゅう されているプロトコルはTCPとUDPだけであった。ほとんどのベンダーはTCP/IPだけをサポートしたが、DEC は DECnet もサポートしていた。
Verison 1.1 (1993年 ねん 1月 がつ )
細 こま かな修正 しゅうせい と仕様 しよう の分類 ぶんるい 。重要 じゅうよう な変更 へんこう 点 てん としては、gethostname() 関数 かんすう を追加 ついか した点 てん が挙 あ げられる。
Winsock 2
Winsock 1.1 との互換 ごかん 性 せい を維持 いじ しつつ拡張 かくちょう している。プロトコルに独立 どくりつ した名前 なまえ 解決 かいけつ 法 ほう をサポート。イベント通知 つうち や完了 かんりょう ルーチンによる非同期 ひどうき 操作 そうさ サポート。階層 かいそう 型 がた プロトコル実装 じっそう サポート。マルチキャスト 。Quality of Service 。複数 ふくすう プロトコルサポートも公式 こうしき 化 か され、IPX/SPX とDECnet が明記 めいき された。プロセス間 あいだ でのソケット共有 きょうゆう 、コネクションの条件 じょうけん 付 つ き受理 じゅり 、ソケットグループ処理 しょり などが可能 かのう となった。Winsock 1.x とは大幅 おおはば な違 ちが いがあるが、Winsock 1.1 API とのソース互換 ごかん とバイナリ互換 ごかん を保 たも っている。他 ほか にも Service Provider Interface (SPI) API や Layered Service Provider (LSP) がサポートされた。
Version 2.0.x (1994年 ねん 3月 がつ 以降 いこう )
内部 ないぶ ドラフト。標準 ひょうじゅん として公開 こうかい されたものではない。
Version 2.1.0 (1996年 ねん 1月 がつ )
Winsock 2 としての最初 さいしょ の公開 こうかい 版 ばん 。
Version 2.2.0 (1996年 ねん 5月 がつ )
細 こま かな修正 しゅうせい 、明確 めいかく 化 か 、使用 しよう 方法 ほうほう の追記 ついき など。16ビット Windows アプリケーションサポートを削除 さくじょ した。
Version 2.2.1 (1997年 ねん 5月 がつ )、Version 2.2.2 (1997年 ねん 8月 がつ )
細 こま かな機能 きのう 強化 きょうか 。ネットワーク構成 こうせい やシステム構成 こうせい の変化 へんか に関 かん して問 と い合 あ わせたり、通知 つうち を受 う け付 つ ける機構 きこう を追加 ついか した。
IPv6 対応 たいおう はWindows 2000 (2000年 ねん 12月 がつ )で、RFC 2553 (後 のち に RFC 3493 に置換 ちかん )に基 もと づいて行 おこな われ、Windows XP の Winsock の一部 いちぶ となっている。
マイクロソフトは Winsock 1.0 の実装 じっそう を提供 ていきょう しなかった。
Winsock 1.1 は Windows for Workgroups のアドオンパッケージとして提供 ていきょう された。また、Windows 95 と Windows NT 3.x では最初 さいしょ から必須 ひっす コンポーネントとして導入 どうにゅう された。
Winsock 2 は Windows 95 のアドオンパッケージとして提供 ていきょう された[ 4] 。Windows 98 および NT 4.0 以降 いこう は必須 ひっす コンポーネントとして導入 どうにゅう されている。Windows 3.x や NT 3.x 向 む けに Winsock 2 が提供 ていきょう されることはなかった。
Winsock 2.x は新 あら たなWindowsのリリース時点 じてん やサービスパック の形 かたち で提供 ていきょう されている。
Winsock 2 は Layered Service Provider (LSP) と呼 よ ばれる機構 きこう で拡張 かくちょう 可能 かのう である。Winsock LSP はペアレンタル制御 せいぎょ 、Webコンテンツのフィルタリング、QoS などに使 つか われている。全 すべ ての Provider の階層 かいそう 順位 じゅんい は Winsock Catalog で管理 かんり される。かつて、バグのある LSP を削除 さくじょ すると Winsock Catalog が破壊 はかい されてネットワークが全 まった く使 つか えなくなるという問題 もんだい があった。Windows XP SP2、Windows Server 2003 SP1、およびその後 ご の Windows では、LSP をアンインストールしても自動 じどう 修復 しゅうふく できるようになっている。
Winsock 準拠 じゅんきょ の TCP/IP スタックを提供 ていきょう するベンダーとしては、スリーコム 、Beame & Whiteside、DEC、Distinct、FTP Software、Frontier、IBM 、Microdyne、NetManage、ノベル 、サン・マイクロシステムズ 、Trumpet Software International などがある。
Trumpet Winsock は数少 かずすく ない Winsock 1.0 の実装 じっそう であり、Windows 3.0 にインストール可能 かのう であった。Trumpet は Windows 3.x 向 む け Winsock のシェアウェア 版 はん でも知 し られている。2008年 ねん 2月 がつ 以降 いこう はTattam Software EnterprisesがTrumpet の知的 ちてき 所有 しょゆう 権 けん を有 ゆう している[ 5] 。
Aboba, Bernard D., comp.protocols.tcp-ip.ibmpc, Frequently Asked Questions, 1993. Usenet: news:news.answers .
この記事 きじ は2008年 ねん 11月1日 にち 以前 いぜん にFree On-line Dictionary of Computing から取得 しゅとく した項目 こうもく の資料 しりょう を元 もと に、GFDL バージョン1.3以降 いこう の「RELICENSING」(再 さい ライセンス) 条件 じょうけん に基 もと づいて組 く み込 こ まれている。
マイクロソフトのAPIとフレームワーク
グラフィック オーディオ マルチメディア ウェブ データアクセス ネットワーク コミュニケーション 管理 かんり コンポーネントモデル ライブラリ デバイスドライバ セキュリティ .NET ソフトウェアファクトリー IPC アクセシビリティ テキストと多言 たげん 語 ご サポート