誰かがポートとソケットの違いをはっきりと説明してくれませんか。ポートがアプリケーションプロセスのネットワークへのドアとして機能し、アプリケーションプロセスが特定のポート番号へのソケット接続を使用してネットワーク通信を処理することを知っていますが、複数のプロセスが単一のポート番号をリッスンしている場合、ソケットとポートの違い、およびそれらがどのように組み合わされるかを理解することは困難です。
[〜#〜] s [〜#〜]はサーバープログラムです:HTTPサーバーであるため、よく知られているものを使用します [〜#〜] http [〜#〜] のポート番号、80です。IPアドレス_10.0.0.4
_のホストで実行するため、リッスンします_10.0.0.4:80
_での接続(誰もがそれを見つけることを期待する場所だからです)。
[〜#〜] s [〜#〜]の内部に、 socket を作成しますそして bind それをそのアドレスに:これで、OSは_10.0.0.4:80
_に着信する接続がmy[〜#〜 ] 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
はそのクライアントに固有のnewソケットを返します
接続が受け入れられた後の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つが返されるたびに、oneプロセスのみで返され、各着信接続のソケットはサーバーの1つのインスタンスに固有です。socketpair
を呼び出したプロセスであるか、そのプロセスの子であり、プロセスを継承するか、または明示的にいずれかを渡すことです。そのプロセスからのソケットあなたの機械をアパートの建物と考えてください:
ポートはアパート番号です。
ソケットはアパートのドアです。
IPアドレスは、建物の番地です。
ポートは、TCPおよびUDPプロトコルのアドレスの一部です。これは、受信したデータを取得する必要があるアプリケーションをOSが識別できるようにするために使用されます。OSがサポートするポートをサポートする必要があります= TCPおよびUDPです。これは、ポートがTCPおよびUDPの組み込み部分であるためです。
ソケットは、OSがアプリケーションに提供するインターフェースの一部であり、アプリケーションがネットワークデータを送受信できるようにします。ほとんどのソケット実装は、TCPおよびUDPを超える多くのプロトコルをサポートします。これらの一部にはポートの概念がありません。OSは、TCPまたはUDP;これは、アプリケーションが使用する別のインターフェースを提供する可能性があります。ソケットは、特定のポートでデータを送受信する1つの方法にすぎません。
コンピュータには、ネットワーク上の別のエンティティとして識別するIPアドレスがあります。そのコンピューターへの接続を区別できるように、番号を追加します。これはポート番号です。接続のOS側では、バッファ、接続状態などが必要です。この論理オブジェクトはソケットです。
ソケットは、ポートへの通信パスです。プログラムがネットワークを介して通信するようにしたい場合は、ポートをアドレス指定する方法をプログラムに与えました。これは、ソケットを作成してポートに接続することによって行われます。基本的に、ソケット= IP +ポートソケットはポート+ IPへのアクセスを提供します