コンピュータネットワーキングのためのソケットプログラミングの概要

ソケットは、コンピュータネットワークプログラミングの最も基本的な技術の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は比較的小さく簡単です。 関数の多くは、 read() write() close()などのファイル入出力ルーチンで使用される関数に似ています。 。 使用する実際の関数呼び出しは、選択されたプログラミング言語とソケットライブラリによって異なります。

ソケットインターフェイスの種類

ソケットインタフェースは、次の3つのカテゴリに分けられます。

  • 最も一般的なタイプのストリームソケットでは、2人の通信相手が最初にソケット接続を確立する必要があります。その後、その接続を通過したデータは、送信されたのと同じ順序で到着することが保証されます。モデル。
  • データグラムソケットは「コネクションレス」セマンティクスを提供します。 データグラムでは、接続はストリームのように明示的ではなく暗黙的です。 どちらのパーティも必要に応じてデータグラムを送信し、他のパーティが応答するのを待ちます。 メッセージは送信時に失われたり、順序が乱れることがありますが、アプリケーションの責任であり、これらの問題に対処するのはソケットではありません。 データグラムソケットを実装すると、ストリームソケットを使用する場合と比較してパフォーマンスが向上し、柔軟性が向上するアプリケーションもあります。
  • rawソケットである第3のタイプのソケットは、 TCPUDPのような標準プロトコルのためのライブラリの組み込みのサポートをバイパスします。 Rawソケットは、カスタム低レベルプロトコル開発に使用されます。

ネットワークプロトコルにおけるソケットサポート

最新のネットワークソケットは、通常、インターネットプロトコル(IP、TCP、およびUDP)と共に使用されます。 インターネットプロトコル用のソケットを実装するライブラリは、ストリーム用のTCP、データグラム用のUDP、およびrawソケット用のIPを使用します。

IPソケットライブラリは、インターネットを介して通信するために、 IPアドレスを使用して特定のコンピュータを識別します。 インターネットの多くの部分がネーミングサービスと連携しているため、ユーザとソケットプログラマはアドレス(208.185.127.40など)ではなくコンピュータ名( 例: "thiscomputer.wireless.about.com")でコンピュータを操作できます。 ストリームとデータグラムソケットはIP ポート番号を使用して、複数のアプリケーションを相互に区別します。 たとえば、インターネット上のWebブラウザは、Webサーバーとのソケット通信のデフォルトとしてポート80を使用することを認識しています。