私は C++ の経験豊富なソケット レベル プログラマーですが、ソケット接続が開いたままになっている場合に IP ネットワーク レベルで何が起こるかわかりません(close
コード内からソケットの関数を呼び出して閉じる場合と比べて)。
私は IP ヘッダーを調査し、ソケットを開いたままにしておくことが IP レベルで何らかの影響を与えるかどうかを理解しようとしました。
TCP レベルでは、TCP ヘッダーの「シーケンス番号」フィールドが増加し続けることを意味するため、ソケットを開いたままにしておくことは理にかなっています。ただし、これは純粋にエンドポイントベースの実装であるため、TCP パケットの通過時間を短縮することはできませんでした。接続を開いたままにしておくことは、一般に、インターネットを介したエンドポイント間のパケットの通過時間が短縮されることを意味すると理解しています。
問題は、ソケット接続を開いたままにしておくことは、IP レベルで何か意味があるのでしょうか?
私が持っている最良の推測は、ソケット接続が開いたままの場合、完全な IP ネットワーク パスに沿って介在するゲートウェイがマッピング テーブルにエントリを残そうとするため、ブロードキャストを行う必要なく、次のホップをすぐに実行できるということです。ネクストホップを決定するために、接続されているすべてのゲートウェイ。
(おそらく、DNS ルックアップのオーバーヘッドもこの方法で回避されます。)
「接続を開いたままにしておく」ことは、中間の IP ゲートウェイ (パケット転送を高速化する) にマップ エントリが残っていることに相当すると推測できますか?