Linuxインターネットドメインソケット、トランスポートプロトコル(TCP / UDP)ソケットとポート

Linuxインターネットドメインソケット、トランスポートプロトコル(TCP / UDP)ソケットとポート

私は長い間、いくつかの混乱した問題に苦しんでいます。

  • Linuxが提供するインターネットドメインソケット、
  • トランスポートプロトコル(TCP / UDP)ソケットと
  • 転送プロトコル(TCP/UDP)のポートです。

SOの一部の関連投稿に対する回答には、あいまいさと不一致が多く、さらに混乱しています。

  1. Linuxとトランスポートプロトコル(TCP / UDP)の両方に「ソケット」という概念があります。これら2つの概念はどう違いますか?はいLinuxが提供するインターネットドメインソケット(ファイルとして表示?)(誠実に)施行する転送プロトコルのソケット(TCP/UDP)? (そうだと思います。それが真であれば、2つの用語を入れ替えて使用できます。)

  2. 概念的にこの考えは正しいですか?トランスポートプロトコル(TCP / UDP)でタプル(IPアドレス、トランスポートプロトコル、ポート番号)またはポート番号のみを使用しますか? (私はポートがタプル(IPアドレス、トランスポートプロトコル、ポート番号)だと思います。なぜなら、異なるIPアドレスまたは異なるトランスポートプロトコルを持つ同じポート番号が異なるポートを表すと何度も学んだからです。 ポートそして ソケット(トランスポートプロトコルで)同じ概念のようです。 ) 設定された名前「ポート」は単に「ポート番号」を意味するようです。不要な混乱を避けるために、以下の「ポート番号」を明示的に使用します。

  3. 間の関係は何ですか?ソケット(トランスポートプロトコルで)そしてタプル(IPアドレス、トランスポートプロトコル、ポート番号)?ソケットセットとタプルセット(IPアドレス、トランスポートプロトコル、ポート番号)の間にチラシマッピングはありますか?タプル(IPアドレス、トランスポート、ポート番号)ごとに少なくとも1つのソケットがあり、ソケットごとに少なくとも1つのタプル(IPアドレス、トランスポート、ポート番号)が必要ですか? 2つのソケットが同じタプル(IPアドレス、トランスポートプロトコル、ポート番号)を共有できますか? 2つのタプル(IPアドレス、トランスポートプロトコル、ポート番号)が同じソケットを共有できますか?

  4. 私は聞いた両方のプロセスが同じソケットを共有できる(私が理解したのは、Linuxインターネットドメインソケットとトランスポートプロトコル(TCP / UDP)ソケットを交換して使用できるという仮定のもと、2つのプロセスがファイルを共有できるということです。)プロセス同じことを共有するタプル(IPアドレス、トランスポートプロトコル、ポート番号)

  5. 私は聞いた両方の接続が同じソケットを共有できません。(Linuxインターネットドメインソケットとトランスポートプロトコル(TCP / UDP)ソケットを入れ替えて使用できると仮定します。)2つも可能つながる同じことを共有するタプル(IPアドレス、トランスポートプロトコル、ポート番号)

ありがとうございます。

ベストアンサー1

  1. ソケットはオペレーティングシステムのAPIです。このAPIを使用すると、同じまたは異なるシステム上のアプリケーションがTCPおよびUDP(他のプロトコルのうち)プロトコルを介して通信できます。 UNIXドメインソケット(インターネットユーザーが作成するドメインソケット)は、同じシステム上のアプリケーションと通信するための同様の機能を提供します。コンセプトは似ています。 APIは、ソケットの作成、バインディング、受信+承認と接続、ソケットの読み取りと書き込み、ソケットを閉じるためのメソッドを提供します。読み取りおよび書き込みに関しては、通常のファイル、名前付きパイプ、匿名パイプなどに関連する他のファイル記述子と一致しますが、ファイル記述子は異なる方法で生成され、より多くの操作が実行されます。
  2. TCP と UDP のポート番号は 1 ~ 65535 の整数です。 「ポート」という言葉は「ポート番号」の略です。 IPアドレス、ポート番号、およびプロトコルのタプルはエンドポイントアドレスを記述します。これを「ポート」と呼ぶと、他の文献を読むときに混乱を引き起こす可能性があります。
  3. 接続されていないがバインドされたソケットは、単一のエンドポイント(ip、ポート、プロトコル)のみを表します。接続ソケットは、ローカルエンドポイントとは別の(ローカルまたはリモート)エンドポイントである接続を表します。同じ接続に対して複数のカーネルソケットを持つことはできませんが、同じカーネルソケットに対して複数のファイル記述子を持つことができます。接続されている複数のソケットで同じエンドポイントを持つことはできますが、同じ接続内では持つことはできません。つまり、接続の他のエンドポイントは異なる必要があります。実際、同じエンドポイントを表す複数の接続されていないソケットがあるかもしれませんが、これは非常にまれです。
  4. ソケットはファイル記述子であり、ファイル記述子を共有できるため、プロセス間でソケットを共有できます。共有は通常、親が一部のファイルまたはソケットを開き、子がそれを継承するブランチを介して行われます。ただし、あるプロセスから別のプロセスにファイル記述子/ソケットを送信する方法もあります。共有とは、書き込みと読み取りの両方が可能ですが、データが複製されないことを意味します。つまり、親が一部のデータを読み取ると、ソケットからそのデータを取得し、子も読み取れなくなります。ただし、プロセスが同じシステム上の既存のソケットとまったく同じ接続を表す新しいソケットを作成することはできません(既存のソケットを共有せず)。
  5. 2つのソケット/接続は1つのエンドポイントで同じポートを共有できますが、両方のエンドポイントは共有できません。つまり、送信元IP、送信元ポート、宛先IP、宛先ポート、またはプロトコルの1つ以上が異なる必要があります。

おすすめ記事