0

http ヘッダー:Connection: Keep-Alive

これについてたくさん読んだ後、私はまだその仕組みを理解できません。

ウィキ:

キープアライブ信号を使用して、接続を維持する必要があることをインターネット インフラストラクチャに示すこともできます。キープアライブ信号がないと、中間の NAT 対応ルーターがタイムアウト後に接続をドロップする可能性があります。

私は理解していません:

サーバーは 1,000,000 の現在の接続を持つことができます。

ジョンはサーバーにリクエストを送信します。

ポールのコンピュータは、ポールの近くの同じ LAN 上にあります。ポールも同じサーバーにリクエストを送信します。

ジョンとポールの組織はルーターの背後にあります。

ここに画像の説明を入力

サーバーは、ポールとジョンの両方の接続を維持する方法をどのように知っているのでしょうか?

また、ジョンが 2 回目にリクエストを送信すると、「新しい接続が開かれません」ので、キープアライブはここでどのように適用されますか?

4

1 に答える 1

3

まず、TCP/IP 接続は、2 台のコンピューターを一時的に接続する細い線ではありません。結局のところ、TCP/IP と UDP はどちらも単なる一連のパケットです。IP パケットを正しい順序に戻すことで、接続が確立されているふりをするのはオペレーティング システムです。

あなたの質問に戻りましょう。問題は実際には HTTP 固有のものではないことに注意してください。これらはすべて TCP/IP レイヤーで機能します。ポール192.168.0.100とジョンには192.168.0.101内部 IP アドレスがあり、NAT にはパブリック1.2.3.4アドレスがあるとします。Paul がサーバーに接続するとき、彼の OS は192.168.0.100:54321アドレスを使用します (ポートは OS によってランダムに選択されます)。このリクエストは、そのアドレスを記憶し、リクエストを外部サーバーに転送する NAT にヒットします。外部サーバーは、ユーザーがNAT 1.2.3.4:4321の背後にいるため (別のポートに注意してください)、内部 IP が表示されないことを確認します。

外部サーバー (Web サーバーとする) が応答を送信すると、それを に送信し1.2.3.4:4321ます。一方、NAT は、4321ポートを 192.168.0.100:54321 に転送する必要があることを記憶しています。

ここで、John が同じサーバーにリクエストを送信したとします。この TCP/IP 接続は、からの要求が行われたことを記憶する NAT を介してルーティングさ192.168.0.101:32123れます。次に、このリクエストは public を使用して転送され1.2.3.4:4322ます (別のポートに注意してください)。応答が到着すると、NAT はポートをチェックし、(John)4322にルーティングします。192.168.0.101:32123それ以外の場合 (ポートで4321)、ポールは応答を受け取ります。

注:クライアントのエフェメラル ポートとサーバー ポート (デフォルトでは HTTP の 80) を混同しないでください。

于 2012-09-23T09:09:09.397 に答える