TCPおよびUDPソケット:それらの目的とポートとの違い

XNUMXつのホスト(コンピューター、スマートフォン、またはネットワークに接続されているデバイス)が相互に通信する必要がある場合、対応するIP(パブリックまたはプライベート)を介した通信を可能にするために、TCPまたはUDPソケットを開く必要があります。ポート。 XNUMX台以上のホスト間のすべての通信はトランスポート層レベルで実行されます。これは、XNUMX台以上のコンピューター間でポイントツーポイント通信が行われる最初の層であり、ここではTCPプロトコルまたはUDPプロトコルを使用できるためです。 。 今日この記事では、ソケットとは何か、そして一般的なルーターポートとの違いについてすべて説明します。

ソケットとは何ですか?それは何のためですか?

TCPおよびUDPソケット

異なるホスト上にあるXNUMXつのプロセスが、ローカルネットワークまたはインターネットなどのネットワークを介して情報を交換する必要がある場合、通信を確立し、データストリームを交換するためにソケットを開く必要があります。 通常、データフローは信頼性が高く整然とした方法で行われますが、プロセスがTCPプロトコルとUDPプロトコルのどちらを使用しているかによって異なります。以下では、両方のプロトコルの主な特徴について簡単に説明します。

  • TCPプロトコルは、コネクション型のトランスポート層プロトコルです。これは、実際のデータを交換する前に、通信を確立するための前のステップがあることを意味します。 このプロトコルはまた、すべてのデータ送信がエラーなしで行われることを保証します。受信者が時間どおりにデータを受信しなかったり、破損した場合に備えて、TCP自体がデータを再送信する責任があります。さらに、注文を保証します。プロセスがすべてのデータをその発信元から順番に受信することを確認してください。

  • UDPプロトコルの場合、コネクション型ではなく、通信に前のステップはありませんが、データは直接送信されます。 このプロトコルは、送信がエラーなしで実行されることを保証するものではありませんが、可能な限りすべてを実行し、発信元が宛先に送信するデータグラムの順序も保証しません。 UDPの良い点は、接続確立フェーズがないため、ヘッダーが非常に小さく、非常に高速であることです。

XNUMXつのプロセスが相互に通信できるようにするには、一方のプロセスが他方のプロセスを見つけられるようにし、両方のプロセスがネットワークを介して情報を交換できるようにする必要があります。 もちろん、クライアントサーバーアーキテクチャを使用しているため、XNUMXつのプロセスのいずれかが通信を開始する必要があります。 XNUMXつのプロセスが通信するには、ソケットが必要です。

TCPプロトコルとUDPプロトコルのどちらを使用するかに関係なく、ソケットは次のパラメーターによって定義されます。

  • 使用されるトランスポート層プロトコル:TCPまたはUDP
  • 送信元IPアドレス:パブリックIPまたはプライベートIPにすることができます。
  • 宛先IPアドレス:パブリックIPまたはプライベートIPにすることができます。
  • ソースポートまたはローカルポート:このポートは通常、ポート49152〜65535の間にあり、動的ポートまたはプライベートポートと呼ばれます。 ただし、この方法である必要はありません。任意の送信元ポートを使用できます。たとえば、HTTPS接続にポート443を使用するWebサーバーは、接続に送信元ポート443を使用します。
  • 宛先ポートまたはリモートポート:このポートは任意のポートにすることができます。他のプロセスまたはホストがこのポートをリッスンしている必要があります。

これらすべてのパラメーターのおかげで、各接続を一意にすることができます。このようにして、送信元と宛先の両方が接続を完全に識別し、データの交換を開始できます。

チームにはいくつのソケットを含めることができますか?

機器の外部で行う接続ごとに、異なるプロセス間で情報を交換できるようにソケットが必要です。 特定のコンピューターでは、多数のソケットを開くことができますが、これはコンピューターのハードウェアとオペレーティングシステムの両方に依存します。これは、すべてのソケットの管理(作成)を担当するのはオペレーティングシステムであるためです。そしてそれらを削除します)。 新しいソケットを開くときは、接続を一意に識別するために一意である必要があります。

Webサーバーの場合、各クライアント接続はソケットによって定義されます。たとえば、合計XNUMXつのクライアントがWebサーバーに接続するとします。さらに、各ソケットは、ステータスを確認するかどうかによって異なります。ローカルまたはリモートコンピューターの接続では、IPとポートのペアが送信元から宛先に、またはその逆に変更されます。

次の例では、Webサーバー上に作成されたソケットを確認でき、Webサーバー自体からこれらのソケットを確認できます。

  • ユーザー1
  • プロトコル:TCP。
  • ソースIP:77.77.77.77(クライアント)。
  • 宛先IP:88.88.88.88(米国)。
  • ソースまたはローカルポート:49152(クライアント)。
  • 宛先またはリモートポート:443(HTTPSを使用)。

XNUMX番目のユーザーの場合、次のようになります。

  • ユーザー2
  • プロトコル:TCP。
  • ソースIP:71.71.71.71(クライアント)。
  • 宛先IP:88.88.88.88(米国)。
  • ソースまたはローカルポート:49152(クライアント)。
  • 宛先またはリモートポート:443(HTTPSを使用)。

この場合、ソースIPのみが変更されていますが、49152つのパラメーターのいずれかが変更されるとすぐに、接続を一意に識別できる新しいソケットがすでに用意されています。 そのクライアントは引き続き送信元ポートXNUMXを最初に使用できますが、送信元IPは異なります。 XNUMXつのパラメータのXNUMXつが変更されるとすぐに、私たちはすでに別のまったく異なるプロセスにあり、それを適切に識別するのに問題はありません。

システム内のすべてのソケットを確認する方法

In Windows オペレーティングシステムでは、管理者権限でコマンドプロンプトで次のコマンドを実行するだけで、開いているすべてのシステムソケットを確認できます。

netstat

次の画像では、TCPプロトコル、IP:PORTによって形成されるローカルアドレス、およびIP:PORTによって形成されるリモートアドレスを確認できます。 最後に、接続のステータスも示します。

In Linux オペレーティングシステムにはnetstatもあります。つまり、「非推奨」と見なされているためです。 代わりに、同じ機能を備えているが、より多くの表示オプションを使用できる「ss」コマンドがあります。 Linuxベースのオペレーティングシステムを使用している場合は、次のコマンドを実行してすべてのソケットを表示できます。

ss

ソケットとは何かを確認したので、それがポートとどのように異なるかを見てみましょう。

ポートとの違いは何ですか

TCPまたはUDPソケットは、TCPまたはUDPポートと混同されることがよくあります。 前に述べたように、ソケットは、トランスポート層プロトコル、送信元と宛先のIPアドレス、および送信元と宛先のポートで構成されます。 「ポート」はソケットの一部であり、基本的な部分ですが、一部にすぎません。ソケットを形成するには、XNUMXつのプロセス間でポイントツーポイント通信ができるように、対応するIPアドレスも必要です。

ルーターのポートを開くとき、実際に行っているのは、すべてのルーターがIPv4プロトコル用に持っているNATを介して、外部(インターネット)からローカルネットワークの内部への通信を許可することです。 NAT環境にいる場合、ルーターは、すべてのトラフィックをインターネットに正しくルーティングするために、プライベートIPアドレスをパブリックIPアドレスに変換します。

NAT内のクライアントがインターネット上にあるWebサーバーと通信したい場合、このローカルクライアントが作成するソケットは次のようになります。

  • プロトコル:TCP。
  • ソースIP:192.168.1.2(米国)。
  • 宛先IP:88.88.88.88(Webサーバー)。
  • 発信元またはローカルポート:49152(米国)。
  • 宛先またはリモートポート:443(Webサーバー)。

次に、ルーターはこの接続を取得し、それを次のように変換して、インターネット経由でルーティングできるようにし、ルーターとリモートWebサーバーの間に新しいソケットを作成します。

  • プロトコル:TCP。
  • ソースIP:20.20.20.20(パブリックIP)。
  • 宛先IP:88.88.88.88(Webサーバー)。
  • 発信元またはローカルポート:49152(米国)。
  • 宛先またはリモートポート:443(Webサーバー)。

通信が逆の場合(NATの外部からNATの内部へ)、外部からサーバーにアクセスできるようにルーターのポートを開く必要があります。それ以外の場合は、 ファイアウォール ルーターのはすべての通信を停止します。