ソケットは、コンピュータネットワークプログラミングの最も基本的な技術の1つです。ソケットを使用すると、ネットワークソフトウェアアプリケーションは、ネットワークハードウェアとオペレーティングシステムに組み込まれた標準的なメカニズムを使用して通信することができます。
インターネットソフトウェア開発のもう一つの機能のように聞こえるかもしれませんが、ソケット技術はWebのずっと前から存在していました。そして、今日の最も一般的なネットワークソフトウェアアプリケーションの多くは、ソケットに依存しています。
あなたのネットワークでできるソケット
ソケットは、ちょうど2つのソフトウェアの間の単一の接続を表します(いわゆる ポイントからポイントへ 接続)。 3つ以上のソフトウェアは、複数のソケットを使用してクライアント/サーバまたは分散システムと通信できます。たとえば、多くのWebブラウザは、サーバー上に作成されたソケットのグループを介して単一のWebサーバーと同時に通信できます。
ソケットベースのソフトウェアは通常、ネットワーク上の2つの別々のコンピュータで動作しますが、ソケットを使用してローカルで通信することもできます プロセス間 )を1台のコンピュータにインストールします。ソケットは 双方向 接続のいずれかの側でデータの送受信が可能であることを意味します。通信を開始する1つのアプリケーションを「クライアント」と呼び、もう1つのアプリケーションを「サーバー」と呼ぶこともありますが、この用語はピアツーピアネットワーキングに混乱を招き、一般的には避けるべきです。
ソケットAPIとライブラリ
標準のアプリケーションプログラミングインターフェイス(API)を実装するいくつかのライブラリがインターネット上に存在します。最初の主流パッケージであるBerkeley Socket Libraryは、依然としてUNIXシステム上で広く使用されています。非常に一般的なもう1つのAPIは、Microsoftオペレーティングシステム用のWindowsソケット(WinSock)ライブラリです。他のコンピュータ技術と比較して、ソケットAPIはかなり成熟しています。WinSockは、1993年以降に使用されており、1982年以来バークレーソケットを使用しています。
ソケットAPIは比較的小さく簡単です。関数の多くは、ファイル入力/出力ルーチンで使用されるものと似ています。 読む(), 書きます()、および 閉じる()。使用する実際の関数呼び出しは、選択されたプログラミング言語とソケットライブラリによって異なります。
ソケットインターフェイスの種類
ソケットインタフェースは、次の3つのカテゴリに分けられます。
- ストリーム ソケットは、最も一般的なタイプであり、2人の通信相手が最初にソケット接続を確立する必要があります。その後、その接続を通過したデータは、送信されたのと同じ順序で到着することが保証されます。 。
- データグラム ソケットは「コネクションレス」セマンティクスを提供します。データグラムでは、接続はストリームのように明示的ではなく暗黙的です。どちらのパーティも必要に応じてデータグラムを送信し、他のパーティが応答するのを待ちます。メッセージは送信時に失われたり、順序が乱れることがありますが、アプリケーションの責任であり、これらの問題に対処するのはソケットではありません。データグラムソケットを実装すると、ストリームソケットを使用する場合と比較してパフォーマンスが向上し、柔軟性が向上するアプリケーションもあります。
- 第3のタイプのソケット - 生 socket - TCPやUDPのような標準プロトコルのためのライブラリのビルトインサポートをバイパスします。 Rawソケットは、カスタム低レベルプロトコル開発に使用されます。
ネットワークプロトコルにおけるソケットサポート
最新のネットワークソケットは、通常、インターネットプロトコル(IP、TCP、およびUDP)と共に使用されます。インターネットプロトコル用のソケットを実装するライブラリは、ストリーム用のTCP、データグラム用のUDP、およびrawソケット用のIPを使用します。
IPソケットライブラリは、インターネットを介して通信するために、IPアドレスを使用して特定のコンピュータを識別します。インターネットの多くの部分がネーミングサービスと連携しているため、ユーザーとソケットプログラマは名前でコンピュータを操作できます( 例えば 、 "thiscomputer.wireless.about.com")の代わりにアドレス( 例えば 、208.185.127.40)。ストリームとデータグラムソケットはIPポート番号を使用して、複数のアプリケーションを相互に区別します。たとえば、インターネット上のWebブラウザは、Webサーバーとのソケット通信のデフォルトとしてポート80を使用することを認識しています。