背景とテクノロジーを含む Winsock の概要
Introduction Winsock Including Background Technology
この投稿では主に Windows ソケット API (短縮して WSA および Winsock) について説明します。この投稿を読むと、その定義、背景、テクノロジー、実装について知ることができます。
このページについて:Winsock への定義
ウィンソックとは何ですか?コンピューティングにおいて、Winsock は、Windows ネットワーク ソフトウェアがネットワーク サービス、特に TCP /IP にアクセスする方法を定義するために使用される技術仕様です。これは、Berkeley UNIX ソケット インターフェイスを Windows に適応させたものであるため、Winsock と呼ばれます。ソケットは、同じコンピュータまたはネットワーク上の 2 つのプログラム プロセスに接続し、それらの間でデータを交換するために使用される特別な取り決めです。
Winsock は、Windows Sockets API (WSA) の略称です。これは、Windows TCP/IP クライアント アプリケーション (FTP クライアントや Web ブラウザなど) と基本的な TCP/IP プロトコル スタック間の標準インターフェイスを定義します。
関連記事: Netsh Winsock Reset コマンドを使用して Windows 10 ネットワークの問題を解決する
ウィンソックの背景
Windows ソケット API は、1991 年 10 月に CompuServe BBS ネットワーク上の BoF (Bird of a Feather) ディスカッションで JSB Software (後の Stardust Technologies) の Martin Hall によって提案されました。
仕様の最初のバージョンは、Microdyne (後の Sun Microsystems) の Martin Hall、Mark Towfiq、Sun Microsystems の Geoff Arnold、Microsoft の Henry Sanders と J Allard によって、他の多くの人の協力を得て作成されました。
著作権、知的財産、および潜在的な独占禁止法の問題を最善に解決する方法、IETF または非営利財団の設立を通じた取り組みの検討について、いくつかの議論が行われました。最終的に、この仕様の著作権は 5 人の (無所属の) 作者によってのみ保護されるべきであると決定されました。
API と、一般的な WSA インターフェイスをその上のアプリケーションに公開するだけの DLL ライブラリ ファイル (winsock.dll) との間に多くの混乱があったため、参加している開発者全員が長い間、その名前を単に Winsock と省略することを拒否していました。一般に、DLL ファイルがシステム上に存在することを確認するだけで完全な TCP/IP プロトコル サポートを提供できると考えられています。
ウィンソックのテクノロジー
Windows ソケット API 仕様では、アプリケーション開発者が使用する API と、ネットワーク ソフトウェア開発者がシステムに新しいプロトコル モジュールを追加する方法を提供する SPI の 2 つのインターフェイスが定義されています。各インターフェイスはコントラクトを表します。
API は、準拠アプリケーションがネットワーク ソフトウェア ベンダーの準拠プロトコル実装で正常に実行できることを保証します。 SPI 契約は、準拠するプロトコル モジュールを Windows に追加して、API 準拠のアプリケーションで使用できることを保証します。
Windows Sockets が最初にリリースされたときはこれらの契約は重要でしたが、ネットワーク環境ではマルチプロトコルのサポートが必要なため、現在では学術的な重要性のみになっています。 Windows Sockets API バージョン 2.0 には IPX/SPX を使用する機能が含まれていますが、このプロトコルは WSA 2.0 が出荷された時点でほとんど廃止されました。
Windows ソケットのコードと設計は BSD ソケットに基づいていますが、API が従来の Windows プログラミング モデルに準拠できるようにするための追加機能が提供されています。
Windows ソケット API は、BSD ソケット API のほぼすべての機能をカバーしていましたが、主に Windows と Unix の基本的な違いによって引き起こされるいくつかの避けられない障害があります (ただし、Windows ソケットと BSD ソケットの違いは、Windows ソケットと BSD ソケットの違いよりも小さかったです)。後者とストリーム)。
ただし、Windows ソケットの設計目標は、開発者がソケット ベースのアプリケーションを Unix から Windows に比較的簡単に移植できるようにすることでした。新しく作成された Windows プログラムにのみ役立つ API を作成するだけでは十分ではありませんでした。
したがって、Windows ソケットには、移植を容易にするために設計された多くの要素が含まれていました。たとえば、Unix アプリケーションは、同じ errno 変数を使用して、ネットワーク エラーと標準 C ライブラリ関数で検出されたエラーをログに記録できます。
Windows では実装できないため、Windows ソケットではエラー情報を取得するための特別な関数 WSAGetLastError() が導入されました。このようなメカニズムは非常に役立ちましたが、アプリケーションの移植は依然として非常に複雑でした。
多くの原始的な TCP/IP アプリケーションは、Unix に固有のシステム機能 (擬似端末やフォーク システム コールなど) を使用して実装されており、この機能を Windows で再現するのは困難でした。比較的短期間で、移植は専用の Windows アプリケーションの開発に取って代わられました。
Winsock の実装
- Microsoft は Winsock 1.0 の実装を提供していません。
- Winsock のバージョン 1.1 は、Windows for Workgroups (コード名は Snowball) のアドオン パッケージ (Wolverine と呼ばれる) として提供されました。
- Winsock バージョン 2.1 は、Windows 95 のアドオン パッケージとして提供されました。
- Winsock 2.x の最新バージョンは、新しい Windows バージョンまたはサービス パックの一部として提供されています。
- Winsock 2 は、Layered Service Provider (LSP) と呼ばれるメカニズムを通じて拡張できます。