web-dev-qa-db-ja.com

TCP接続/セッションとポート

ポートとセッションについていくつかの基本的な質問があります。これらはすべて関連した単純な質問なので、一緒に質問しました。

  1. 接続を作成するには、クライアントとサーバーの両方にソケット(ip + port)が必要であることを理解しています。したがって、1つの接続が確立された場合、それらのポートは他の接続には使用されません。ただし、HTTP(80)またはSSH(22)は、複数のクライアントがそのポートにアクセスすることを許可しています。どうやって?

  2. マシンで使用できるポートの数(〜65536)には制限があることを読みました。それ以上のものが必要な場合(たとえば、クライアントが多いFacebookやGmail)、サーバーは何をする必要がありますか?

  3. TCPセッションを作成する前に、ハンドシェイクがどのように発生するかを読み取ることはできますが、接続をどのように維持するかはわかりません。たとえば、イーサネットケーブルを抜くと、サーバーはクライアントをどのように認識しますか。この接続が失われましたか?TCP接続で一定の間隔を置いてクライアントとサーバー間でプーリングメカニズムが実行されていますか?

1
  1. サーバーは、自身のポートとIPを使用するだけで「接続」を追跡するのではなく、クライアントも追跡します。したがって、2つのクライアントがサーバー上の同じ宛先IPとポートに接続している可能性がありますが、クライアントは異なる送信元IP /ポートの組み合わせから来ており、サーバーはそれを使用してそれらを分離します。

  2. 最初の回答で述べたように、複数の接続は「接続」を行うためにサーバー側で複数のポートを使用する必要はありません(回答1を参照)。したがって、スペースが不足する唯一の方法は、65536をホストしている場合ですさまざまなプログラム1 すべてが同時にインターネット接続を必要とすると同時にサーバー上で。

  3. 接続を確立したソフトウェアは「タイムアウト」を設定できるため、事前に設定された時間が経過した後に接続が切断された場合(プラグを抜く例のように)、ソフトウェアがもう一方の端から新しいパケットを受け取らなかった場合、プログラムはもう一方の端を想定します接続を失い、接続の自身の側を閉じます。

TCPの仕組みについて詳しくは、インターネットの仕組みに関する Security Now! エピソードをお勧めします。

リスナーのフィードバックエピソードも聞きたいと思うかもしれません。彼らは人々が書いたものを明確にし、もっと説明が欲しいと言ったからです。


1:接続のもう一方の端が異なるIP /ポートの組み合わせを持っている限り、同じプログラムからの複数の接続は同じポートを使用できます

4