どちらも、ホスト間プロトコルがデータを適切なプロセスに配信できるようにしていると思います。しかし、それらはどのように違うのでしょうか。
2 に答える
ネットワーク アプリケーションは、(通常) ソケット API の上に記述されます。ある意味で、ソケットは、2 つ以上のネットワーク アプリケーションを接続するネットワーク「パイプ」のエントリ ポイントです。ネットワーク「パイプ」を作成するには、両側でソケットを開く必要があります。ソケットは本質的に双方向であるため、「パイプ」の両端は、同時にもう一方の端にデータを送信し、もう一方の端からデータを受信できます。通常、2 つのエンドポイントは異なるマシン上にあります。明らかに、それらを同じマシンに座らせることを妨げるものは何もありません。
ソケットは 3 つの主要なパラメーターによって識別されます。そのうちの 1 つはポート番号です。他の 2 つは、(a) マシンの IP アドレス (IPv4 または IPv6) と (b) トランスポート プロトコル (TCP/UDP など) です。ポート番号は、ネットワーク アプリケーションの論理的なローカル識別ポイントです。各ホストは、各プロトコルおよび各アドレス ファミリに対して最大 65,536 個のポートを持つことができます。通常、0 ~ 1024 の範囲のポート番号は標準ポートであり、さまざまなアプリケーション用に予約されています。通常、この範囲外のポートは一般的な用途に使用できます。これら 3 つのパラメータは、ネットワーク全体で特定のソケットに対して一意である必要があります。したがって、同じマシンに 2 つの TCP ソケット アプリケーションを配置できますが、それらが一意に到達できるようにするには、異なるポートにバインドする必要があります。複数のソケットを同じポートにバインドする方法がありますが、
したがって、簡単な答えは、ソケットとポートが連携して、2 つのネットワーク アプリケーションが通信できるようにすることです。それらは競合する概念ではありません。
Beej の Networking guide の socket/bind セクションが役に立つかもしれません。 https://beej.us/guide/bgnet/html/multi/syscalls.html#socket
「ポート」は、TCP、UDP、およびその他のトランスポート層プロトコルの不可欠な部分です。
「ソケット」は、address:protocol:port コンボとアプリケーション間の API レベルのマッピングを表す一般的な用語です。TCP/IP とはほとんど関係がなく、その上にあるレイヤー、特に BSD ソケット、WinSock、XTI などの使用されているソケット API と関係があります。ネットワーク プロトコルに関する優れたドキュメントでは、それらを説明する際にその言葉を使用することはありません。一方、API ドキュメントは、ほとんどの場合そうします。