誰かがポートとソケットの違いをはっきりと説明してください。ポートはアプリケーションプロセスのネットワークへのドアとして機能し、アプリケーションプロセスは指定されたポート番号へのソケット接続を使用してネットワーク通信を処理することを知っていますが、単一のポート番号でリッスンする複数のプロセスがある場合、私は見つけていますソケットとポートの違いと、それらがどのように組み合わされるかを理解することは困難です。
誰かがポートとソケットの違いをはっきりと説明してください。ポートはアプリケーションプロセスのネットワークへのドアとして機能し、アプリケーションプロセスは指定されたポート番号へのソケット接続を使用してネットワーク通信を処理することを知っていますが、単一のポート番号でリッスンする複数のプロセスがある場合、私は見つけていますソケットとポートの違いと、それらがどのように組み合わされるかを理解することは困難です。
回答:
Sは、サーバプログラムである:それはのためのよく知られたポート番号を使用しますので、のは、それがHTTPサーバだとしましょうHTTP 80である、私はIPアドレスを持つホスト上で実行10.0.0.4
するので、それは上の接続を待機します10.0.0.4:80
(理由それは誰もがそれを見つけることを期待する場所です)。
内部S、私が作成するつもりですソケットをと結合し、そのアドレスにそれを:今、OSは接続が入ってくることを知っている10.0.0.4:80
私に送られるべきSのその特定のソケットを介してプロセス。
ソケットがバインドされた後のnetstat出力:
$ netstat --tcp -lan
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
NB。Sはクライアントのアクセス方法を気にしないため、ローカルアドレスはすべてゼロです。
いったんSは、このソケットがバインドされており、それがされます受け入れ接続を-新しいクライアントが接続するたびに、accept
返す新しいそのクライアントに固有のソケットを、
接続が受け入れられた後のnetstat出力:
$ netstat --tcp -lan
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 10.0.0.4:80 10.0.0.5:55715 ESTABLISHED
10.0.0.4:80
Sの接続の終了を表し、によって返されるソケットに関連付けられますaccept
10.0.0.5:55715
クライアントの接続の終了であり、クライアントがconnectに渡したソケットに関連付けられます。クライアントのポートは、このTCP接続のパケットを適切なプロセスにルーティングする以外には使用されません。クライアントのカーネルによって一時的なポート範囲からランダムに割り当てられます。これで、Sはより多くのクライアント接続を受け入れられるようになりました...それぞれが独自のソケットを取得し、各ソケットが一意のTCP接続に関連付けられ、各接続に一意のリモートアドレスが割り当てられます。Sは、クライアントの状態(ある場合)をソケットに関連付けて追跡します。
だから、大体:
accept
呼び出しの1つが戻るたびに、1つのプロセスでのみ戻ります。各着信接続のソケットはサーバーの1つのインスタンスに固有です。socketpair
、そのプロセスの子であり、そのプロセスを継承するか、そのプロセスからソケットの1つを明示的に渡されたプロセスマシンをアパートの建物と考えてください。
ポートはアパート番号です。
ソケットはアパートのドアです。
IPアドレスは、建物の番地です。
A socket is the door of an apartment.
しかし、1つのポートで多数のソケットを開くことはできませんでしたか?
ポートは、TCPおよびUDPプロトコルのアドレスの一部です。これは、受信したデータを取得するアプリケーションをOSが識別するのに使用されます。ポートはTCPとUDPの本質的な部分であるため、OSはTCPとUDPをサポートするためにポートをサポートする必要があります。
ソケットは、アプリケーションがネットワークデータを送受信できるようにするためにOSがアプリケーションに提供するインターフェイスの一部です。ほとんどのソケット実装は、TCPおよびUDPを超える多くのプロトコルをサポートしますが、その一部にはポートの概念がありません。OSは、TCPまたはUDPをサポートするためにソケットをサポートする必要はありません。アプリケーションが使用する別のインターフェイスを提供できます。ソケットは、特定のポートでデータを送受信する1つの方法にすぎません。