2

私は C++ の経験豊富なソケット レベル プログラマーですが、ソケット接続が開いたままになっている場合に IP ネットワーク レベルで何が起こるかわかりません(closeコード内からソケットの関数を呼び出して閉じる場合と比べて)。

私は IP ヘッダーを調査し、ソケットを開いたままにしておくことが IP レベルで何らかの影響を与えるかどうかを理解しようとしました。

TCP レベルでは、TCP ヘッダーの「シーケンス番号」フィールドが増加し続けることを意味するため、ソケットを開いたままにしておくことは理にかなっています。ただし、これは純粋にエンドポイントベースの実装であるため、TCP パケットの通過時間を短縮することはできませんでした。接続を開いたままにしておくことは、一般に、インターネットを介したエンドポイント間のパケットの通過時間が短縮されることを意味すると理解しています。

問題は、ソケット接続を開いたままにしておくことは、IP レベルで何か意味があるのでしょうか?

私が持っている最良の推測は、ソケット接続が開いたままの場合、完全な IP ネットワーク パスに沿って介在するゲートウェイがマッピング テーブルにエントリを残そうとするため、ブロードキャストを行う必要なく、次のホップをすぐに実行できるということです。ネクストホップを決定するために、接続されているすべてのゲートウェイ。

(おそらく、DNS ルックアップのオーバーヘッドもこの方法で回避されます。)

「接続を開いたままにしておく」ことは、中間の IP ゲートウェイ (パケット転送を高速化する) にマップ エントリが残っていることに相当すると推測できますか?

4

3 に答える 3

4

直接の答え:いいえ。

あなたの質問は、2 つのホスト間でデータ ストリームを確立するという TCP の目的を完全には理解していないことを示唆しています。接続を開いたままにしておく目的は明らかです。接続を閉じると、ストリームは終了します。

TCP 接続のステータスは IP レベルでは見えません。これは TCP にのみ関連します。NAT ゲートウェイを除いて、中間ホストは通常​​、通過する TCP 接続のステータスを追跡しません。(多くの場合、そうするのは不可能です。大規模なルーターでは、追跡できるよりもはるかに多くの接続が実行されています。)

私が持っている最良の推測は、ソケット接続が開いたままの場合、完全な IP ネットワーク パスに沿って介在するゲートウェイがマッピング テーブルにエントリを残そうとするため、ブロードキャストを行う必要なく、次のホップをすぐに実行できるということです。ネクストホップを決定するために、接続されているすべてのゲートウェイ。

この推測は正しくありません。ルーターには、内部に保持されている一連のルーティング テーブルに基づいて、宛先 IP に基づいてルートを選択するためのある種のアルゴリズムがあります。これが大規模なルーターでどのように決定されるかの詳細については、BGP を参照してください小規模なルーターでは、通常、ルーティング テーブルは管理者によって定義されます。

于 2013-03-17T04:57:33.737 に答える
1

まず、誤解を解き明かしましょう。

完全なIPネットワークパスに沿って介在するゲートウェイは、マッピングテーブルにエントリを残そうとします。これにより、ネクストホップを決定するために接続されているすべてのゲートウェイにブロードキャストする必要なしに、ネクストホップをすぐに実行できます。

ルーターは、ネクストホップを決定するために「接続されているすべてのゲートウェイにブロードキャスト」することはありません。パケットが到着し、ルータがそのルーティング方法をまだ認識していない場合、パケットは単にドロップされます(おそらく、ICMPエラーメッセージが送信元に返送されます)。ルーターで実行されるルーティングプロトコルの役割は、ルーターのルーティングテーブルにピアから学習したルートを事前に入力して、パケットを受信して​​ルーティングする準備を整えることです。

また、「完全なIPネットワークパス」は明確に定義されていません。ネットワークでリンクに障害が発生したり、新しいリンクが利用可能になったりすると、ネットワークパスはいつでも変更される可能性があります。ロードバランシングによるルーティングの変更がない場合でも、あるパケットから次のパケットに変更できます。

質問に戻ります。いいえ、ソケットが閉じているかどうかはIPに影響しません。IPは、すべてのパケットが自己完結型であり、独立してルーティングされるという意味でステートレスです。

ソケットが閉じているかどうかはTCPに違いをもたらしますが、ご存知のように、それは接続のエンドポイントにある2つのノードにのみ関係します。

于 2013-03-17T04:59:36.737 に答える
1

「接続を開いたままにする」ことによる速度への影響は、TCPで接続を確立するには、ラウンドトリップが必要になることです。しかし、もっと重要なことは、接続はTCPで実行されているほとんどのプロトコルにとって意味的な意味も持っています。同じ接続で送信される2ビットのデータは、異なる接続で送信される2ビットのデータが関連していない方法で関連しています。

于 2013-03-17T05:02:08.900 に答える