1. 序章

ソケットは、さまざまなプロセスが相互に通信できるようにするネットワークリソースです。 特に、ソケットを使用するアプリケーションには、ライフサイクルを管理するための複数の操作があります。 これらの操作の例は、バインド、リッスン、送信、受信、およびクローズです。

この記事では、ソケットバインディング操作の主な概念を見て、それがどのように機能するかを理解します

2. ソケットの基本

ソケットは、2つのプロセス間の通信を可能にするエンドポイントです。 この通信は、プロセスが実行されている場所に関係ありません。 さらに、TCP / IPベースのネットワークのコンテキストでのソケットは、ネットワークソケットまたはインターネットソケットと呼ばれることを強調します。 この場合、ソケットはTCP/IPスタックのトランスポート層とアプリケーション層の間で実行されます。

ソケットには主に3つのタイプがあります。

  • データグラム:ユーザーデータグラムプロトコル(UDP)とのプロセス間通信を作成するソケット。 このように、データグラムソケットは、プロセス間の接続を確立することなく、単純なIP通信を可能にします。
  • ストリーム:伝送制御プロトコル(TCP)を使用したプロセス間の通信を可能にするソケット。 したがって、ストリームソケットでは、プロセスを接続し、特定のメッセージ配信保証との通信を提供するために、3ウェイハンドシェイクを実行する必要があります。
  • raw:トランスポート層プロトコルに関係なくネットワークインターフェイスからネットワークトラフィックを読み取るソケット。 rawソケットの一般的な使用法は、パケットスニファの開発です。

タイプは、ソケットの通信に関連するプロパティを定義します。 このように、特定のタイプを選択すると、一部のソケットのライフサイクル操作の動作が変わる可能性があります。 これらの操作の例としては、bind(次のセクションで詳しく説明します)、 close、shutdownがあります。

最後に、タイプを定義するだけでなく、ソケットを開くにはプロトコルファミリの指定も必要であることに注意することが重要です。 これらのプロトコルファミリは、バインディング操作に影響を与えるソケットアドレスを確立するための決定要因です。 プロトコルファミリの詳細については、次のセクションで説明します。

3. ソケットバインディング

開いた後、ソケットが作成されますが、アドレスは割り当てられていません。したがって、バインド操作は、ソケットへの特定のアドレスを確立する役割を果たします。

バインド操作を実行する前に、ソケットを開くときに、ソケットに定義されているプロトコルファミリに従って適切なアドレスを選択する必要があります。 次に、最も一般的なソケットプロトコルファミリを引用し、それらのアドレスを構成するデータを示します。

  • AF_INET:インターネットプロトコルバージョン4(IPv4)を参照するプロトコルファミリ。 したがって、このプロトコルファミリで開かれたソケットは、IPv4アドレスとポート番号でバインドされます。
  • AF_INET6:インターネットプロトコルバージョン6(IPv6)を参照するプロトコルファミリ。 この場合のソケットアドレスは、AF_INETアドレスに似ています。 そのため、IPとポート番号で構成されていますが、バージョン6形式のIPが使用されています。
  • AF_LOCAL:プロセス間のローカル通信を可能にするプロトコルファミリ。 このプロトコルファミリは、IP経由では実行されません。 したがって、AF_LOCALで作成されたソケットは、nullで終了するファイルパス名で構成されるアドレスにバインドします。
  • AF_PACKET: デバイスレベル(OSIレイヤー2またはTCP / IPレイヤー1)で生のパケットを直接処理するために使用されるプロトコルファミリー。 このように、アドレスは通常、ソケットがネットワークトラフィックをキャッチする場所からのネットワークインターフェイスです。

ソケットのプロトコルファミリを定義した後、それをアドレスにバインドできます。 次の画像で、以前に提示されたプロトコルファミリのバインド操作の実行を示します。

3.1. バインディングの使用に関するいくつかの側面

実際には、ソケットをバインドする前に、展開シナリオのいくつかの運用面を考慮する必要があります。 たとえば、サーバー/クライアントモデルでは、バインディング操作は、ほとんどの場合、サーバー側でのみ明示的に実行されます。サーバーが通信を待機すると、私たちはクライアントになります静的でわかりやすいアドレスで応答することを期待してください。 対照的に、サーバーは、クライアントが通信を開始するときにクライアントアドレスを受信します。 したがって、クライアントへの明示的なバインドを実行する必要はありません。

以前に提示されたシナリオの例外を引用することができます:特定のアドレスから通信するクライアントに応答するサーバー。 その場合、クライアントも明示的なバインドを実行する必要があります。

最後に、ソケットをバインドするための特別な特性を持つアドレスがいくつかあります。たとえば、IP 0.0.0.0にバインドされたAF_INETソケット、または:: /0IPにバインドされたAF_INET6ソケットは通常すべてのネットワークインターフェイスをリッスンします利用可能。 さらに、オペレーティングシステムは、ポート0にバインドされたネットワークソケットに適したポートを動的に定義します。

4. 結論

この記事では、ソケットのバインド操作について説明しました。 まず、レビューしました ソケットの基本概念。 次に、 ソケットバインディングの要件と特性.

ソケットへのアドレスを確立するため、プロセス間通信を可能にするためにバインド操作が重要であると結論付けることができます。