ソケットとポートの違い


121

誰かがポートとソケットの違いをはっきりと説明してください。ポートはアプリケーションプロセスのネットワークへのドアとして機能し、アプリケーションプロセスは指定されたポート番号へのソケット接続を使用してネットワーク通信を処理することを知っていますが、単一のポート番号でリッスンする複数のプロセスがある場合、私は見つけていますソケットとポートの違いと、それらがどのように組み合わされるかを理解することは困難です。


9
ポートは物理アドレスですが、ソケットはオブジェクトです。
superM

14
パケットがポートのソケットのポケットに衝突した場合
...-user16764

回答:


116

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:80Sの接続の終了を表し、によって返されるソケットに関連付けられますaccept
    • 10.0.0.5:55715クライアントの接続の終了であり、クライアントがconnectに渡したソケットに関連付けられます。クライアントのポートは、このTCP接続のパケットを適切なプロセスにルーティングする以外には使用されません。クライアントのカーネルによって一時的なポート範囲からランダムに割り当てられます。

これで、Sはより多くのクライアント接続を受け入れられるようになりました...それぞれが独自のソケットを取得し、各ソケットが一意のTCP接続に関連付けられ、各接続に一意のリモートアドレスが割り当てられます。Sは、クライアントの状態(ある場合)をソケットに関連付けて追跡します。

だから、大体:

  • IPアドレスは、ネットワーク上のホスト間のルーティング用です
  • ポートはホスト上の正しいソケットにルーティングするためのものです
    • 私はほぼ正しいプロセスを言ったが、実際には複数の(通常は子)プロセスが同じソケットですべて受け入れることができる...
    • ただし、同時accept呼び出しの1つが戻るたびに、1つのプロセスでのみ戻ります。各着信接続のソケットはサーバーの1つのインスタンスに固有です。
  • ソケットは、ファイル記述子のように、プロセスが特定の接続についてOSと通信するために使用するオブジェクトです
    • コメントで述べたように、ポートをまったく使用しないソケットには他にも多くの使用方法があります。たとえば、socketpairは、アドレス指定スキームをまったく持たない、接続されたソケットのペアを作成します-そのパイプを使用する唯一の方法はを呼び出しsocketpair、そのプロセスの子であり、そのプロセスを継承するか、そのプロセスからソケットの1つを明示的に渡されたプロセス

1
@Useless 回答が示すように、ソケットはIPベースである必要ありませ。OPとはまったく関係ありませんが、ソケットファミリの説明がこの答えを締めくくるのに役立ちます。
hafichuk

良い点-マルチプロセスサーバーについて書き始めたとき、私は既にスコープクリープについて心配していました。自由に編集してください。そうしない場合は、ある時点でそれについて説明します
役に立たない


私は電子機器のソケットを理解しようとします、サーバーがソケットをポート番号にバインドするのは、バッテリーを充電するためにいくつかの電子機器がプラグインされるのを待つ壁にソケットを置くようなものです。しかし、受け入れられると、新しいソケットが返されますか?どうして?新しいソケットを壁に設置しますか?いくつかの類推によってそれを理解するのを手伝ってください。
アーロンシェン

3
ここでの問題は、アナロジーが間違っていることです。ソケットが物理的な世界で何を意味するかを忘れてください-それは何か他のものの比notではなく、特定の技術的なソフトウェア概念の単なる技術用語です。物理的なネットワークポートやソケットとはあまり関係がありません-このドメインでは、それ自体の用語の概念として理解する必要があります。
役に立たない

49

マシンをアパートの建物と考えてください。

  • ポートはアパート番号です。

  • ソケットはアパートのドアです。

  • IPアドレスは、建物の番地です。


3
私はこのアナロジーが好きですが、今はたくさんのドアがある無限の廊下を眺めながらそのアパートの中にいることを考えています。出られません。出られない!:)
ダニエルホリンレイク

1
@Caleb A socket is the door of an apartment.しかし、1つのポートで多数のソケットを開くことはできませんでしたか?
スハイルグプタ

3
@suhail時々、アパートには複数のドアがあります。彼らはすべて同じアパート番号を持っていますが、それらは異なるドアです。
カレブ

45

ポートは、TCPおよびUDPプロトコルのアドレスの一部です。これは、受信したデータを取得するアプリケーションをOSが識別するのに使用されます。ポートはTCPとUDPの本質的な部分であるため、OSはTCPとUDPをサポートするためにポートをサポートする必要があります。

ソケットは、アプリケーションがネットワークデータを送受信できるようにするためにOSがアプリケーションに提供するインターフェイスの一部です。ほとんどのソケット実装は、TCPおよびUDPを超える多くのプロトコルをサポートしますが、その一部にはポートの概念がありません。OSは、TCPまたはUDPをサポートするためにソケットをサポートする必要はありません。アプリケーションが使用する別のインターフェイスを提供できます。ソケットは、特定のポートでデータを送受信する1つの方法にすぎません。


ソケットは、基本的に次の要素で構成される4つのタプルです。ソースIP:ポート-デストIP:ポート。
トニーザライオン

ポートはTCPおよびUDPプロトコルにのみ存在するということですか?httpおよびその他のプロトコルはどうですか?
ホセインアカハニ

HTTPは、TCPやUDPなどのトランスポート層プロトコルの上で実行されるアプリケーション層プロトコルです。ポートには独自のポートの概念はなく、基盤となるトランスポートレイヤープロトコルから継承します。
ダークホルソップル

8

コンピュータには、ネットワーク上の別個のエンティティとして識別するIPアドレスがあります。それに追加の番号を追加して、そのコンピューターへの接続を区別できるようにします。これはポート番号です。接続のOS側では、バッファ、接続状態などが必要です。この論理オブジェクトはソケットです。


0

ソケットは、ポートへの通信パスです。プログラムがネットワークを介して通信するようにしたい場合は、ポートをアドレス指定する方法を指定しました。これは、ソケットを作成してポートに接続することによって行われます。基本的に、ソケット= IP +ポートソケットはポート+ IPへのアクセスを提供します


-1

IPアドレスはデバイスを識別します。つまり、IPを使用してマシンに到達すると、特定のデバイスのアドレスになり、ポートはそのマシンのどのプロセスに通信するかを定義します。

したがって、実際の通信を行うには、ソケットと呼ばれるポートとIPの両方が必要です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.