1061

これは、私の組織のソフトウェア エンジニアの 1 人が提起した質問でした。私は最も広い定義に興味があります。

4

36 に答える 36

1096

概要

TCP ソケットは、特定の TCP 接続またはリッスン状態のいずれかのコンテキストで、IP アドレスとポートによって定義されるエンドポイントインスタンスです。

ポートは、サービス エンドポイントを定義する仮想化識別子です(サービスインスタンスエンドポイント、別名セッション識別子とは異なります)。

TCP ソケットは接続ではなく、特定の接続のエンドポイントです。

接続はローカル エンドポイントとリモート エンドポイントの両方によって識別され、特定のサービス インスタンスにトラフィックをルーティングできるため、サービス エンドポイントへの同時接続が存在する可能性があります。

特定のアドレス/ポートの組み合わせに対して、リスナー ソケットは 1 つしか存在できません

博覧会

これは、私が知っていると思っていた多くのことを裏返しに再検討することを余儀なくされた興味深い質問でした. 「ソケット」のような名前は一目瞭然だと思うでしょう。明らかに、ネットワーク ケーブルを接続するエンドポイントのイメージを呼び起こすために選択されたものであり、強力な機能上の類似点があります。とはいえ、ネットワークの用語では、「ソケット」という言葉は非常に多くの問題を抱えているため、慎重に再検討する必要があります。

可能な限り広い意味で、ポートは入口または出口のポイントです。ネットワーキングのコンテキストでは使用されませんが、フランス語のporteは文字通りドアまたはゲートウェイを意味し、ポートがデータまたは大きなスチール コンテナの輸送の終着点であるという事実をさらに強調しています。

この議論の目的のために、TCP-IP ネットワークのコンテキストに限定して考察します。OSI モデルはすべて非常によくできていますが、完全に実装されたことはなく、トラフィックが多くストレスの多い状況ではあまり広く展開されていません。

IP アドレスとポートの組み合わせは厳密にはエンドポイントと呼ばれ、ソケットと呼ばれることもあります。この使用法は、元の TCP 仕様である RFC793 に由来します。

TCP接続は、ソケットとも呼ばれる 2 つのエンドポイントによって定義されます。

エンドポイント (ソケット) は、ネットワーク アドレスとポート識別子の組み合わせによって定義されます。アドレス/ポートはソケットを完全には識別しないことに注意してください (これについては後で詳しく説明します)。

ポートの目的は、特定のネットワーク アドレス上の複数のエンドポイントを区別することです。ポートは仮想化されたエンドポイントであると言えます。この仮想化により、単一のネットワーク インターフェイスで複数の同時接続が可能になります。

インターネット内の各 TCP 接続を一意に識別する 2 つのエンドポイントを指定するのは、ソケット ペア (クライアント IP アドレス、クライアント ポート番号、サーバー IP アドレス、およびサーバー ポート番号で構成される 4 つのタプル) です。( TCP-IP イラストレイテッド 第 1 巻、W. リチャード・スティーブンス)

ほとんどの C 派生言語では、TCP 接続は Socket クラスのインスタンスのメソッドを使用して確立および操作されます。より高いレベルの抽象化 (通常は NetworkStream クラスのインスタンス) で操作するのが一般的ですが、これは通常、ソケット オブジェクトへの参照を公開します。コーダーには、ソケット オブジェクトのメソッドを使用して接続が作成および操作されるため、このソケット オブジェクトは接続を表しているように見えます。

C# で (既存のリスナーへの) TCP 接続を確立するには、まずTcpClientを作成します。TcpClientコンストラクターにエンドポイントを指定しない場合、既定値が使用されます。何らかの方法でローカル エンドポイントが定義されます。 次に、作成したインスタンスでConnectメソッドを呼び出します。このメソッドには、他のエンドポイントを記述するパラメーターが必要です。

これはすべて少し紛らわしく、ソケットが接続であると信じ込ませてしまいます。リチャード・ドーマンが質問するまで、私はこの誤解の下で働いていました.

多くの読書と思考を行った結果、 LocalEndpointRemoteEndpointの 2 つの引数を取るコンストラクターを持つクラスTcpConnectionを持つ方がはるかに理にかなっていると確信しています。ローカル エンドポイントでデフォルトが許容される場合は、おそらく単一の引数RemoteEndpointをサポートできます。これはマルチホーム コンピューターではあいまいですが、ルーティング テーブルを使用して、リモート エンドポイントへの最短ルートを持つインターフェイスを選択することにより、あいまいさを解決できます。

明快さは、他の点でも強化されます。ソケットは、IP アドレスとポートの組み合わせでは識別されません。

[...]TCP は、ローカル アドレスと外部アドレスを構成する 4 つの値 (宛先 IP アドレス、宛先ポート番号、送信元 IP アドレス、および送信元ポート番号) をすべて使用して着信セグメントを逆多重化します。TCP は、宛先ポートのみを見て、着信セグメントを取得するプロセスを判別できません。また、着信接続要求を受信する [特定のポート番号] の [さまざまな] エンドポイントの 1 つだけがリッスン状態にあります。(p255、TCP-IP 図解第 1 巻、W. リチャード・スティーブンス)

ご覧のように、ネットワーク サービスが同じアドレス/ポートを持つ多数のソケットを持ち、特定のアドレス/ポートの組み合わせで 1 つのリスナー ソケットしか持たない可能性は非常に高いです。典型的なライブラリ実装はソケット クラスを提示し、そのインスタンスは接続の作成と管理に使用されます。これは非常に残念なことです。なぜなら、それは混乱を引き起こし、2 つの概念の広範な混同につながっているからです。

ハグラワルは私を信じていないので (コメントを参照)、これが実際のサンプルです。Web ブラウザーをhttp://dilbert.comに接続してから、 を実行しましnetstat -an -p tcpた。出力の最後の 6 行には、アドレスとポートだけではソケットを一意に識別できないという 2 つの例が含まれています。192.168.1.3 (私のワークステーション) と 54.252.94.236:80 (リモート HTTP サーバー) の間には 2 つの異なる接続があります。

  TCP    192.168.1.3:63240      54.252.94.236:80       SYN_SENT
  TCP    192.168.1.3:63241      54.252.94.236:80       SYN_SENT
  TCP    192.168.1.3:63242      207.38.110.62:80       SYN_SENT
  TCP    192.168.1.3:63243      207.38.110.62:80       SYN_SENT
  TCP    192.168.1.3:64161      65.54.225.168:443      ESTABLISHED

ソケットは接続のエンドポイントであるため、アドレスとポートの組み合わせを持つソケットが 2 つと、アドレスとポートの組み合わせ207.38.110.62:80を持つソケットがさらに 2 つあります54.252.94.236:80

ハグラワルの誤解は、私が「識別する」という言葉を非常に慎重に使用したことに起因すると思います。「完全に、明確に、一意に識別する」という意味です。上記のサンプルには、アドレスとポートの組み合わせを持つ 2 つのエンドポイントがあります54.252.94.236:80。アドレスとポートしかない場合、これらのソケットを区別するのに十分な情報がありません。ソケットを識別するのに十分な情報ではありません。

補遺

RFC793 のセクション 2.7 のパラグラフ 2 は言う

接続は、両端のソケットのペアによって完全に指定されます。ローカル ソケットは、さまざまな外部ソケットへの多くの接続に参加できます。

このソケットの定義は、特定の接続のエンドポイントであるソケットオブジェクトと同じではないため、プログラミングの観点からは役に立ちません。プログラマにとって、そしてこの質問の聴衆のほとんどはプログラマであり、これは重要な機能上の違いです。

@plugwash は顕著な観察を行います。

根本的な問題は、ソケットの TCP RFC 定義が、すべての主要なオペレーティング システムおよびライブラリで使用されるソケットの定義と矛盾していることです。

定義上、RFC は正しいです。ライブラリが用語を誤用しても、これは RFC に取って代わるものではありません。代わりに、そのライブラリのユーザーに、両方の解釈を理解し、言葉と文脈に注意するという責任が課せられます。RFC が一致しない場合は、最新かつ最も直接的に適用可能な RFC が優先されます。

参考文献

  1. TCP-IP Illustrated Volume 1 The Protocols、W. Richard Stevens、1994 Addison Wesley

  2. RFC793、情報科学研究所、南カリフォルニア大学 DARPA

  3. RFC147、ソケットの定義、Joel M. Winett、Lincoln Laboratory

于 2008-09-30T12:40:19.480 に答える
200

ソケットは次の 3 つで構成されます。

  1. IP アドレス
  2. トランスポート プロトコル
  3. ポート番号

ポートは、デバイスの論理ゲートを表す 1 から 65535 までの番号です。クライアントとサーバー間のすべての接続には、固有のソケットが必要です。

例えば:

  • 1030 はポートです。
  • (10.1.1.2 、 TCP 、ポート 1030) はソケットです。
于 2012-08-02T17:10:13.293 に答える
121

ソケットは、2 つのネットワーク アプリケーション間の単一の接続を表します。これら 2 つのアプリケーションは通常、異なるコンピューターで実行されますが、ソケットは単一のコンピューターでのプロセス間通信にも使用できます。アプリケーションは、相互に通信するために複数のソケットを作成できます。ソケットは双方向です。つまり、接続のどちらの側でもデータの送信と受信の両方が可能です。したがって、ソケットは、理論的には OSI モデルの 2 から任意のレベルで作成できます。間接的ではありますが、プログラマはネットワーク プログラミングでソケットを使用することがよくあります。Winsock のようなプログラミング ライブラリは、ソケット プログラミングの低レベルの詳細の多くを隠します。ソケットは 1980 年代初頭から広く使用されています。

ポートは、ネットワーク通信のエンドポイントまたは「チャネル」を表します。ポート番号を使用すると、同じコンピューター上のさまざまなアプリケーションが、互いに干渉することなくネットワーク リソースを利用できます。ポート番号は、ネットワーク プログラミング、特にソケット プログラミングで最も一般的に使用されます。ただし、ポート番号が一般ユーザーに表示される場合があります。たとえば、ユーザーがインターネットでアクセスする一部の Web サイトでは、次のような URL が使用されます。

http://www.mairie-metz.fr:8080/この例の 8080 という数字は、Web ブラウザーが Web サーバーに接続するために使用するポート番号を示しています。通常、Web サイトはポート番号 80 を使用し、この番号を URL に含める必要はありません (含めることはできます)。

IP ネットワーキングでは、ポート番号の範囲は理論的には 0 ~ 65535 です。ただし、最も一般的なネットワーク アプリケーションでは、範囲の下限のポート番号が使用されます (HTTP の場合は 80 など)。

注: ポートという用語は、ネットワーク テクノロジの他のいくつかの側面も指します。ポートは、シリアル、パラレル、USB ポートなどの周辺機器の物理接続ポイントを指す場合があります。ポートという用語は、ハブ、スイッチ、ルーターなどの特定のイーサネット接続ポイントも指します。

参照http://compnetworking.about.com/od/basicnetworkingconcepts/l/bldef_port.htm

参照http://compnetworking.about.com/od/itinformationtechnology/l/bldef_socket.htm

于 2008-09-30T10:07:47.630 に答える
106

類推して

ソケットについてはすでに多くの技術的なことが述べられていますが...念のため、IP、ポート、およびソケットの違いをまだ感じられない人がいれば、私の回答を追加したいと思います。

サーバー S を考えてみましょう

X、Y、Zがそのサーバー Sからのサービス (チャット サービスなど) を必要としているとします。

それから

IP アドレスでわかる-->誰? X、Y、Zが連絡したいチャットサーバー「S」です

わかりました、「サーバーは誰ですか」を得ました

しかし、サーバー「S」が他の人にも他のサービスを提供しているとします。たとえば、「S」が人 A、B、C にストレージ サービスを提供しているとします。

それから

ポートは--->どちらを教えてくれますか? あなた(X、Y、Z)が必要とするサービス、つまりチャットサービスであり、そのストレージサービスではありません

わかりました..、「チャットサービス」が必要なものであり、ストレージではないことをサーバーに認識させます

しかし

あなたは 3 人で、サーバーは 3 人すべてを異なる方法で識別したい場合があります。

そこにソケットが来ます

ソケットは言う- >どれですか?特定の接続

つまり、

人 X のソケット 1

Yさん用ソケット2

Z さん用のソケット 3

まだ混乱している人に役立つことを願っています:)

于 2016-06-20T09:57:32.480 に答える
49

まず最初に、A から B へのパケットの取得を構成するものを少し理解することから始めるべきだと思います。

ネットワークの一般的な定義は、ネットワークを目的に応じていくつかのレイヤーに分割するOSI モデルの使用です。重要なものがいくつかありますが、ここで取り上げます。

  • データリンク層。このレイヤーは、あるネットワーク デバイスから別のネットワーク デバイスにデータのパケットを取得する役割を担い、実際に送信を行うレイヤーのすぐ上にあります。MAC アドレスについて話し、MAC (ハードウェア) アドレスに基づいてホストを見つける方法を知っていますが、それ以上のものはありません。
  • ネットワーク層は、複数のマシン間および物理デバイスなどの物理的境界を越えてデータを転送できるようにする層です。ネットワーク層は基本的に、何らかの形で物理アドレスに関連する追加のアドレス ベースのメカニズムをサポートする必要があります。インターネット プロトコル (IPv4) を入力します。IP アドレスは、インターネット経由で A から B にパケットを取得できますが、個々のホップを通過する方法については何も知りません。これはルーティング情報に従って上位層で処理されます。
  • トランスポート層。このレイヤーは、情報が A から B に到達する方法と、その動作に関する制限、チェック、またはエラーを定義する役割を果たします。たとえば、TCP は、パケットが失われたかどうかを推測できるように、パケットに追加情報を追加します。

TCP には、特にポートの概念が含まれています。これらは事実上、インターネット ソケット ( AF_INET) がバインドできる同じ IP アドレス上の異なるデータ エンドポイントです。

たまたま、UDPやその他のトランスポート層プロトコルもそうです。技術的にはポートを備えている必要はありませんが、これらのポートは、上のレイヤーの複数のアプリケーションが同じコンピューターを使用して発信接続を受信 (および実際に作成) する方法を提供します。

これにより、TCP または UDP 接続の構造が理解できます。それぞれに、ソース ポートとアドレス、およびターゲット ポートとアドレスがあります。これは、任意のセッションで、ターゲット アプリケーションがソースからの受信だけでなく、応答できるようにするためです。

したがって、ポートは本質的に、同じアドレスを共有する複数の同時接続を許可する仕様で義務付けられた方法です。

ここで、アプリケーションの観点から外の世界への通信方法を検討する必要があります。これを行うには、お使いのオペレーティング システムに親切に問い合わせる必要があります。ほとんどの OS はバークレー ソケット方式をサポートしているため、次のようなアプリケーションからポートを含むソケットを作成できることがわかります。

int fd = socket(AF_INET, SOCK_STREAM, 0); // tcp socket
int fd = socket(AF_INET, SOCK_DGRAM, 0); // udp socket
// later we bind...

すごい!したがって、sockaddr構造体では、ポートとバムを指定します! 仕事終わり!まあ、ほとんど、例外:

int fd = socket(AF_UNIX, SOCK_STREAM, 0);

も可能です。うーん、それは作品にスパナを投げました!

わかりました、実際にはそうではありません。必要なのは、適切な定義を考え出すことだけです。

  • インターネット ソケットは、サービスがデータを提供する可能性がある IP アドレス、プロトコル、および関連するポート番号の組み合わせです。したがって、tcp ポート 80、stackoverflow.com はインターネット ソケットです。
  • UNIX ソケットは、ファイル システムで表される IPC エンドポイントです/var/run/database.sock
  • ソケット API は、アプリケーションがソケットに対してデータを読み書きできるように要求する方法です。

出来上がり!それは物事を片付けます。したがって、私たちのスキームでは、

  • ポートは、トランスポート層プロトコルの一部として、特定の要求に応答する必要があるサービス番号を識別する数値識別子です。

つまり、ポートはインターネット ソケットを形成するための要件のサブセットです。残念ながら、ソケットという言葉の意味がいくつかの異なる概念に適用されているのはたまたまです。したがって、次のプロジェクトのソケットに名前を付けることを心からお勧めします。混乱を招くだけです ;)

于 2012-04-07T20:17:03.470 に答える
43

ソケット = IP アドレス + ポート (数値アドレス)
一緒に、マシン上のネットワーク接続のエンドポイントを識別します。(ネットワーク 101 に失敗しただけですか?)

于 2008-09-30T10:05:47.213 に答える
42

一般に、多くの理論が得られますが、これら 2 つの概念を区別する最も簡単な方法の 1 つは次のとおりです。

サービスを受けるには、サービス番号が必要です。このサービス番号はポートと呼ばれます。そのような単純な。

たとえば、サービスとしての HTTP はポート 80 で実行されています。

これで、多くの人がサービスをリクエストできるようになり、クライアント サーバーからの接続が確立されます。たくさんのご縁がありますように。各接続はクライアントを表します。各接続を維持するために、サーバーはクライアントを維持するために接続ごとにソケットを作成します。

于 2013-12-13T10:09:45.317 に答える
32

これらは基本的なネットワーキングの概念であるため、簡単かつ包括的な方法で詳細に理解できるように説明します。

  • ソケットは電話のようなものです (つまり、通信用のエンド ツー エンド デバイス)。
  • IPは電話番号のようなものです (つまり、ソケットのアドレス)
  • ポートは、話したい相手のようなものです (つまり、そのアドレスから注文したいサービス)
  • ソケットは、クライアント ソケットまたはサーバー ソケットのいずれかになります (つまり、会社ではカスタマー サポートの電話はサーバーですが、自宅の電話はほとんどがクライアントです)。

したがって、ネットワークのソケットは、(ip , port) = (address , service) のペアにバインドされた仮想通信デバイスです。

ノート:

  • マシン、コンピューター、ホスト、モバイル、または PC は、複数のアドレス、複数の開いているポート、および複数のソケットを持つことができます。オフィスのように、複数の電話番号と複数の人と話す複数の電話を持つことができます。
  • 開いている/アクティブなポートが存在する場合は、ソケットをバインドする必要があります。これは、ポートにアクセスできるようにするソケットであるためです。ただし、当分の間、未使用のポートがある場合があります。
  • また、サーバーソケットでは、(ポート、マシンの特定のアドレス) または (ポート、マシンのすべてのアドレス) にバインドできることに注意してください。電話のように、多くの電話回線 (電話番号) を接続することができます。電話または特定の電話回線を電話に接続しても、これらすべての電話回線または特定の電話回線を介して人に連絡できます。
  • 通常、電話のようにソケットを 2 つのポートに関連付ける (バインドする) ことはできません。2 人が同じ電話を同時に使用できるとは限りません。
  • 高度: 同じマシン上で、同じタイプ (クライアントまたはサーバー) で同じポートと IP を持つ 2 つのソケットを持つことはできません。ただし、クライアントの場合は、2 つのソケットを使用してサーバーに対して 2 つの接続を開くことができます。これは、これらのクライアントの各ソケットのローカル ポートが異なるためです)。

疑問が解消されることを願っています

于 2019-02-19T07:17:59.970 に答える
31

ソケットを2台のPC間の接続と同一視する答えがたくさんあるようです..これは絶対に間違っていると思います。ソケットは常に 1 台の PC のエンドポイントであり、接続されている場合と接続されていない場合があります。確かに、ある時点ですべてのリスナーまたは UDP ソケットを使用したことがあります。重要な部分は、アドレス可能でアクティブであることです。1.1.1.1:1234 へのメッセージの送信は、そのエンドポイントに対して定義されたソケットがないため、機能しない可能性があります。

ソケットはプロトコル固有のものです - そのため、 TCP / IPUDP / IPの両方が使用する一意性の実装* (ipaddress:port) は、例えばIPX (ネットワーク、ノード、そして...えーと、ソケット - しかし別のもの) とは異なります。ソケットは、一般的な「ソケット」という用語が意味するものではなく、IPX ソケット番号は IP ポートに相当します)。ただし、それらはすべて固有のアドレス指定可能なエンドポイントを提供します。

IP が主要なプロトコルになったため、ポート (ネットワーク用語で) は UDP または TCP ポート番号 (ソケット アドレスの一部) と同義になりました。

  • UDP はコネクションレスです。つまり、2 つのエンドポイント間に仮想回線が作成されることはありません。ただし、引き続きUDP ソケットをエンドポイントと呼びます。API 関数は、どちらもSOCK_DGRAMUDP (メッセージを送信するだけ) とSOCK_STREAMTCP (仮想回路を作成する) の異なるタイプのソケットであることを明確にしています。

  • 技術的には、IP ヘッダーは IP アドレスを保持し、IP 上のプロトコル (UDP または TCP) はポート番号を保持します。これにより、他のプロトコルを使用できるようになります (たとえば、ポート番号を持たないが、IP アドレス情報を持つICMP )。

于 2008-09-30T13:26:46.700 に答える
22

これらは 2 つの異なるドメインからの用語です。「ポート」は TCP/IP ネットワークの概念であり、「ソケット」は API (プログラミング) の概念です。「ソケット」は、ポートとホスト名またはネットワーク アダプタを取り、それらをデータの送受信に使用できるデータ構造に結合することによって (コードで) 作成されます。

于 2008-09-30T10:08:29.703 に答える
17

賛成票を投じた優れた回答を読んだ後、ネットワークプログラミングの初心者である私にとって、次の点を強調する必要があることがわかりました。

TCP-IP接続は、あるアドレス:ポートの組み合わせを別のアドレス:ポートの組み合わせに接続する双方向の経路です。したがって、ローカルマシンからリモートサーバーのポート(www.google.com:80など)への接続を開くと、サーバーが送信できるように、マシンの新しいポート番号も接続に関連付けられます。物事はあなたに戻ってきます(例:127.0.0.1:65234)。netstatを使用して、マシンの接続を確認すると便利な場合があります。

> netstat -nWp tcp (on OS X)
Active Internet connections
Proto Recv-Q Send-Q  Local Address          Foreign Address        (state)    
tcp4       0      0  192.168.0.6.49871      17.172.232.57.5223     ESTABLISHED
...
于 2013-03-14T19:57:29.000 に答える
14

ソケットは通信エンドポイントです。ソケットは、TCP/IP プロトコル ファミリとは直接関係がなく、システムがサポートする任意のプロトコルで使用できます。C ソケット API では、最初にシステムから空のソケット オブジェクトを取得し、それをローカル ソケット アドレスにバインドできることを想定しています (コネクションレス プロトコルの受信トラフィックを直接取得するか、コネクション指向プロトコルの受信接続要求を受け入れるため)。または、リモート ソケット アドレスに接続できる (どちらの種類のプロトコルでも)。ソケットがバインドされているローカルソケットアドレスとソケットが接続されているリモートソケットアドレスの両方を制御したい場合は、両方を行うこともできます。コネクションレス プロトコルの場合、ソケットの接続は任意ですが、そうしないと、また、ソケットを介して送信するすべてのパケットで宛先アドレスを渡す必要があります。ソケットは、このデータの送信先を他にどのように知るのでしょうか? 利点は、単一のソケットを使用してパケットを異なるソケット アドレスに送信できることです。ソケットを構成し、場合によっては接続さえしたら、それを双方向通信パイプと見なします。それを使用してデータをある宛先に渡すことができ、ある宛先がそれを使用してデータを戻すことができます。ソケットに書き込んだものは送信され、受信したものは読み取ることができます。それを使用してデータをある宛先に渡すことができ、ある宛先がそれを使用してデータを戻すことができます。ソケットに書き込んだものは送信され、受信したものは読み取ることができます。それを使用してデータをある宛先に渡すことができ、ある宛先がそれを使用してデータを戻すことができます。ソケットに書き込んだものは送信され、受信したものは読み取ることができます。

一方、ポートは、TCP/IP プロトコル スタックの特定のプロトコルのみが持つものです。TCP および UDP パケットにはポートがあります。ポートは単なる番号です。送信元ポートと宛先ポートの組み合わせによって、2 つのホスト間の通信チャネルが識別されます。たとえば、単純な HTTP サーバーと単純な FTP サーバーの両方であるサーバーがあるとします。そのサーバーのアドレス宛てのパケットが到着した場合、それが HTTP サーバー宛のパケットか FTP サーバー宛のパケットかをどのように知るのでしょうか? HTTP サーバーはポート 80 で実行され、FTP サーバーはポート 21 で実行されるため、パケットが宛先ポート 80 で到着した場合、それは HTTP サーバー向けであり、FTP サーバー向けではありません。また、パケットには送信元ポートがあります。そのような送信元ポートがないと、サーバーは一度に 1 つの IP アドレスに対して 1 つの接続しか持てないからです。送信元ポートにより、サーバーは他の点では同一の接続を区別できるようになります。それらはすべて同じ宛先ポート (ポート 80 など)、同じ宛先 IP (サーバーの IP)、および同じ送信元 IP を持ちます。同じクライアントですが、送信元ポートが異なるため、サーバーはそれらを互いに区別できます。また、サーバーが返信を返すときは、リクエストが送信されたポートに返信します。これにより、クライアントは同じサーバーから受信したさまざまな返信を区別することもできます。

于 2008-09-30T10:24:16.920 に答える
13

ソケットは、プロセスがオペレーティング システムからネットワーク サービスを要求するために使用する特殊なタイプのファイル ハンドルです。ソケット アドレスは {protocol, local-address, local-process} の 3 つです。ローカル プロセスはポート番号で識別されます。

たとえば、TCP/IP スイートでは次のようになります。

{tcp、193.44.234.3、12345}

会話は、2 つのプロセス間の通信リンクであり、2 つのプロセス間の関連付けを表します。アソシエーションは、接続を構成する 2 つのプロセスを完全に指定する 5 つのタプルです: {プロトコル、ローカル アドレス、ローカル プロセス、外部アドレス、外部プロセス}

たとえば、TCP/IP スイートでは次のようになります。

{tcp、193.44.234.3、1500、193.44.234.5、21}

有効な関連付けになる可能性があります。

ハーフ アソシエーションは、{protocol, local-address, local-process} のいずれかです。

また

{プロトコル、外部アドレス、外部プロセス}

接続の各半分を指定します。

ハーフ アソシエーションは、ソケットまたはトランスポート アドレスとも呼ばれます。つまり、ソケットは、ネットワーク内で名前を付けてアドレス指定できる通信のエンドポイントです。ソケット インターフェイスは、通信プロトコルに対する複数のアプリケーション プログラミング インターフェイス (API) の 1 つです。汎用通信プログラミング インターフェイスとして設計され、4.2BSD UNIX システムで最初に導入されました。標準化はされていませんが、事実上の業界標準となっています。

于 2014-06-09T12:18:36.993 に答える
9

アプリケーションは、ネットワークを介して通信するプロセスのペア (クライアントとサーバーのペア) で構成されます。これらのプロセスは、 socketと呼ばれるソフトウェア インターフェイスを介して、ネットワークとの間でメッセージを送受信します。本「コンピュータネットワーキング:トップダウンアプローチ」で提示された類推を考慮してください。他の家と通信したい家があります。ここで、家はプロセスに、ドアはコンセントに相当します。送信プロセスは、データを宛先に転送するインフラストラクチャがドアの反対側にあることを前提としています。メッセージが反対側に到着すると、受信者のドア (ソケット) を通って家 (プロセス) に入ります。同じ本にあるこのイラストは、次のことに役立ちます。
ここに画像の説明を入力
ソケットはトランスポート層の一部であり、アプリケーションに論理通信を提供します。これは、アプリケーションの観点からは、ホスト間に多数のルーターやスイッチが存在する場合でも、両方のホストが互いに直接接続されていることを意味します。したがって、ソケットは接続自体ではなく、接続の終点です。トランスポート層プロトコルは、中間ルーターではなく、ホストにのみ実装されます。
ポートマシンへの内部アドレス指定の手段を提供します。主な目的は、他のプロセス (データ) に干渉することなく、複数のプロセスがネットワーク経由でデータを送受信できるようにすることです。すべてのソケットにはポート番号が付いています。セグメントがホストに到着すると、トランスポート層はセグメントの宛先ポート番号を調べます。次に、セグメントを対応するソケットに転送します。トランスポート層セグメントのデータを正しいソケットに配信するこのジョブは、逆多重化と呼ばれます。セグメントのデータは、ソケットに接続されたプロセスに転送されます。

于 2016-10-04T08:14:26.107 に答える
9

ポートは最も簡単な部分でした。これは、ソケットの一意の識別子にすぎません。ソケットは、プロセスが接続を確立し、相互に通信するために使用できるものです。背の高いジェフは完璧ではない素晴らしい電話アナロジーを持っていたので、私はそれを修正することにしました:

  • IP とポート ~ 電話番号
  • ソケット ~ 電話デバイス
  • 接続~電話
  • 接続を確立する ~ 番号を呼び出す
  • プロセス、リモート アプリケーション ~ 人
  • メッセージ ~ スピーチ
于 2015-10-11T22:57:28.883 に答える
7

ソケットは、ソフトウェア内の構造です。それは多かれ少なかれファイルです。読み取りや書き込みなどの操作があります。それは物理的なものではありません。これは、ソフトウェアが物理的なものを参照する方法です。

ポートはデバイスのようなものです。各ホストには 1 つ以上のネットワーク (物理ネットワーク) があります。ホストは各ネットワークにアドレスを持っています。各アドレスには、数千のポートを含めることができます。

1 つのソケットのみがアドレスのポートを使用している可能性があります。ソケットは、ファイル システム I/O 用にデバイスを割り当てるのとほぼ同じようにポートを割り当てます。ポートが割り当てられると、他のソケットはそのポートに接続できなくなります。ソケットが閉じられると、ポートは解放されます。

TCP/IP 用語集を見てください。

于 2008-09-30T10:09:33.180 に答える
7

Oracle Javaチュートリアルから:

ソケットは、ネットワーク上で実行されている 2 つのプログラム間の双方向通信リンクの 1 つのエンドポイントです。TCP 層がデータの送信先のアプリケーションを識別できるように、ソケットはポート番号にバインドされます。

于 2014-04-12T14:03:11.117 に答える
7

ポートとソケットは、銀行支店にたとえることができます。

「銀行」の建物番号は IP アドレスに似ています。銀行には、次のようなさまざまなセクションがあります。

  1. 普通預金部門
  2. 個人ローン部門
  3. 住宅ローン部門
  4. 苦情処理部門

したがって、1 (普通預金部門)、2 (個人ローン部門)、3 (住宅ローン部門)、4 (苦情部門) がポートです。

では、普通預金口座を開設するために銀行に行き(IP アドレス)、「普通預金部門」(ポート番号 1)に行き、「普通預金部門」で働く従業員の 1 人に会うとします。 "。口座開設のために彼を SAVINGACCOUNT_EMPLOYEE1 としましょう。

SAVINGACCOUNT_EMPLOYEE1 はソケット記述子であるため、SAVINGACCOUNT_EMPLOYEE1 から SAVINGACCOUNT_EMPLOYEEN まで存在する可能性があります。これらはすべてソケット記述子です。

同様に、他の部門では従業員がその下で働いており、ソケットに似ています。

于 2017-04-11T12:21:55.780 に答える
5

ポート:

ポートは、シリアル、パラレル、USB ポートなどの周辺機器の物理接続ポイントを指す場合があります。ポートという用語は、ハブ、スイッチ、ルーターなどの特定のイーサネット接続ポイントも指します。

ソケット:

ソケットは、2 つのネットワーク アプリケーション間の単一の接続を表します。これら 2 つのアプリケーションは通常、異なるコンピューターで実行されますが、ソケットは単一のコンピューターでのプロセス間通信にも使用できます。アプリケーションは、相互に通信するために複数のソケットを作成できます。ソケットは双方向です。つまり、接続のどちらの側でもデータの送信と受信の両方が可能です。

于 2008-09-30T10:23:50.773 に答える
5

私が想定している相対的なTCP / IP用語は、質問によって暗示されています。素人の言葉で:

PORT は、特定の郵便番号にある特定の家の電話番号のようなものです。町の郵便番号は、その町とその町のすべての家屋の IP アドレスと考えることができます。

一方、SOCKET は、お互いに話している 2 軒の家の電話の間で確立された電話のようなものです。これらの通話は、同じ町内の家屋間または異なる町内の 2 つの家屋間で確立できます。SOCKET とは、互いに話している電話のペア間に一時的に確立された経路です。

于 2008-09-30T12:12:06.240 に答える
4

広い意味で、ソケット - 電気、ケーブル、または電話ソケットのようなソケットです。「必要なもの」(電力、信号、情報)が出入りできるポイント。「必要なもの」の使用には必要のない、多くの詳細なものが隠されています。ソフトウェア用語では、2 つのエンティティ間の通信メカニズムを定義する一般的な方法を提供します (これらのエンティティは、2 つのアプリケーション、2 つの物理的に分離されたデバイス、OS 内のユーザーおよびカーネル空間など、何でもかまいません)。

ポートはエンドポイント識別子です。あるエンドポイントを別のエンドポイントと区別します。ネットワーク レベルでは、ネットワーク スタックが適切なアプリケーションに情報を渡すことができるように、アプリケーションを別のアプリケーションと区別します。

于 2008-12-31T07:47:21.167 に答える
4

ソケットはデータ I/O メカニズムです。ポートは、通信プロトコルの契約上の概念です。ソケットは、ポートがなくても存在できます。ポートは、特定のソケットがなくても存在できます (たとえば、同じポートで複数のソケットがアクティブな場合、これは一部のプロトコルで許可される場合があります)。

ポートは、多くのプロトコルで、受信者がパケットをルーティングする必要があるソケットを決定するために使用されますが、常に必要なわけではなく、受信ソケットの選択は他の方法で行うことができます - ポートは完全にプロトコルハンドラーによって使用されるツールですネットワークサブシステム。たとえば、プロトコルがポートを使用しない場合、パケットはすべてのリッスン ソケットまたは任意のソケットに送信できます。

于 2008-09-30T10:08:55.303 に答える
3

ソケットは、データ I/O のためにカーネルによってユーザー アプリケーションに提供される抽象化です。ソケット タイプは、処理するプロトコル、IPC 通信などによって定義されます。したがって、誰かが TCP ソケットを作成すると、単純なメソッドと TCP 変換などの下位レベルのプロトコル処理によって、ソケットへのデータの読み取りやソケットへのデータの書き込みなどの操作を行うことができます。低レベルのネットワーク プロトコルへのパケットの転送は、カーネル内の特定のソケット実装によって行われます。利点は、ユーザーがプロトコル固有のニティグリットの処理について心配する必要がなく、通常のバッファーのようにソケットに対してデータを読み書きするだけでよいことです。IPC の場合も同様で、ユーザーはデータをソケットに読み書きするだけで、カーネルは作成されたソケットのタイプに基づいてすべての下位レベルの詳細を処理します。

ポートと IP は、ソケットにアドレスを提供するようなものですが、必須ではありませんが、ネットワーク通信に役立ちます。

于 2013-10-16T10:08:44.013 に答える
3

ソケットは基本的にネットワーク通信のエンドポイントであり、少なくとも IP アドレスとポートで構成されます。Java/C# では、ソケットは双方向接続の片側の高レベルの実装です。

また、Java ドキュメントの定義。

于 2008-09-30T10:08:53.290 に答える
3

ポートは、IP ネットワーク プロトコルの TCP および UDP トランスポートの通信エンドポイントを示します。ソケットは、これらのプロトコル (ソケット API) の実装で一般的に使用される通信エンドポイントのソフトウェア抽象化です。代替の実装は、XTI/TLI API です。

以下も参照してください。

Stevens, WR 1998、UNIX Network Programming: Networking APIs: Sockets and XTI; ボリューム 1、プレンティス ホール。
Stevens, WR, 1994, TCP/IP Illustrated, Volume 1: The Protocols, Addison-Wesley.

于 2008-09-30T10:28:36.253 に答える
2

この問題には、すでに理論的な答えが与えられています。この質問に実用的な例を挙げて、ソケットとポートについての理解を深めたいと思います。

ここで見つけました

この例では、Wiley などの Web サイトに接続するプロセスについて説明します。Web ブラウザー (Mozilla Firefox など) を開き、アドレス バーに www.wiley.com と入力します。Web ブラウザーはドメイン ネーム システム (DNS) サーバーを使用して www.wiley.com という名前を検索し、その IP アドレスが何であるかを識別します。この例では、アドレスは 192.0.2.100 です。

Firefox は、192.0.2.100 アドレスと、アプリケーション層 Web サーバーが動作しているポートへの接続を確立します。Firefox は既知のポートであるため、期待するポートを認識しています。Web サーバーの既知のポートは TCP ポート 80 です。

Firefox が接続しようとする宛先ソケットは、socket:port、またはこの例では 192.0.2.100:80 として記述されます。これは接続のサーバー側ですが、サーバーは Mozilla Firefox で表示したい Web ページの送信先を知る必要があるため、接続のクライアント側にもソケットがあります。

クライアント側の接続は、192.168.1.25 などの IP アドレスと、ランダムに選択された動的ポート番号で構成されます。Firefox に関連付けられたソケットは 192.168.1.25:49175 のようになります。Web サーバーは TCP ポート 80 で動作するため、これらのソケットはどちらも TCP ソケットですが、UDP ポートで動作するサーバーに接続している場合は、サーバー ソケットとクライアント ソケットの両方が UDP ソケットになります。

于 2013-06-26T12:57:17.100 に答える
2

単一のポートには、複数のコンセントのように、異なる外部 IP に接続された 1 つ以上のソケットを含めることができます。

  TCP    192.168.100.2:9001     155.94.246.179:39255   ESTABLISHED     1312
  TCP    192.168.100.2:9001     171.25.193.9:61832     ESTABLISHED     1312
  TCP    192.168.100.2:9001     178.62.199.226:37912   ESTABLISHED     1312
  TCP    192.168.100.2:9001     188.193.64.150:40900   ESTABLISHED     1312
  TCP    192.168.100.2:9001     198.23.194.149:43970   ESTABLISHED     1312
  TCP    192.168.100.2:9001     198.49.73.11:38842     ESTABLISHED     1312
于 2015-08-31T03:43:01.800 に答える
-1

ポートは、ネットワーク プロトコルが接続されたホストにアクセスするために使用するエンティティです。ポートは、アプリケーション固有であるか、特定の通信媒体に関連している可能性があります。HTTP はポート 80 を使用し、FTP はポート 23 を使用するように、異なるプロトコルは異なるポートを使用してホストにアクセスします。アプリケーションでユーザー定義のポート番号を割り当てることができますが、それらは 1023 より大きい必要があります。

ポートは必要なホストへの接続を開き、ソケットはネットワーク間またはプロセス間通信のエンドポイントです。ソケットは、システムによって API (アプリケーション プログラミング インターフェイス) によって割り当てられます。

システムが再起動されると、ポートが存在し、ソケットが破棄されるという、より微妙な違いがあります。

于 2013-03-18T14:56:27.880 に答える
-1

できるだけ単純に、ソケットとポートの間に物理的な違いはありません。たとえば、PATA と SATA の間には違いがあります。それらは、NIC を読み書きするソフトウェアのほんの一部です。

ポートは基本的に公開ソケットであり、そのうちのいくつかはよく知られている/よく受け入れられており、通常の例は 80 で、HTTP 専用です。特定のプロトコル (この例では HTTP) を使用してトラフィックを交換したい人は誰でも、標準的にポート 80 にアクセスします。接続しようとしている人が、使用するプロトコル (非常にプライベートなものである可能性があります) を知っている限り、特定のマシンで他のプロトコルに自由に使用できます。

ソケットは本質的にプライベートポートであり、特定の目的のために確立され、接続側には知られていますが、必ずしも他の人には知られていません。基礎となるトランスポート層は通常 TCP または UDP ですが、そうである必要はありません。本質的な特徴は、どちらの側も何が起こっているかを知っているということです。

ここで重要なのは、あるポートで接続要求を受信すると、応答ハンドシェークに、特定の要求元にサービスを提供するために作成されたソケットに関する情報が含まれていることです。その後の通信は、サービスが接続要求をリッスンし続けるパブリック ポート接続ではなく、その (プライベート) ソケット接続を介して行われます。

于 2015-08-19T18:30:35.247 に答える
-2

接続ソケット (fd) は、ローカル アドレス + ローカル ポート + ピア アドレス + ピア ポートに対して提示されます。ソケット抽象を介して受信/送信データを処理します。リスニング ソケット (fd) は、ローカル アドレス + ローカル リスニング ポートに対して提示されます。プロセスは、ソケットを介して新しい接続を受け入れることができます。

于 2010-01-28T08:37:08.993 に答える
-4

ソケットは、1 台または 2 台のマシンで 2 つのアプリケーション間の通信を可能にします。実際にはドアのようなものです。ドアが開いた場合、ドアの内側とドアの外側にあるプロセスまたはアプリケーションの間に接続が存在する可能性があります。

ソケットには次の 4 種類があります。

  • ストリーム ソケット
  • データグラムソケット
  • 生のソケット
  • シーケンシャル パケット ソケット。

ソケットは主にクライアント サーバー アプリケーションで使用されます。ポートは、ネットワーク アドレス上のさまざまなエンド ポイントを識別します。数値が含まれています。全体として、ソケットはポートとネットワークアドレスの組み合わせです。

于 2015-03-05T08:57:55.320 に答える