- - PR -
TCPのセッション維持時間
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-06-20 23:57
お世話になります。
HTTP/1.1のKeep-Aliveの動作の確認をしています。 以下のようにプログラムし、Etherealでデータの流れを見てみました。 socket(); connect(); send(); ←1回目 recv(); send(); ←2回目 recv(); shutdown(); ここで、1回目と2回目の間にスリープを入れて、 サーバ側でKeepAliveのタイムアウトを起こさせました。 タイムアウト秒は30秒に設定してあります。 スリープの秒数を30秒〜1分30秒の間にした場合は、 2回目のsend()でデータをサーバに送りました。 (但し、サーバからはRSTが返ってきます。) しかし、スリープが1分30秒以上の場合は、データを送っていません。 以上のことより、サーバ側で切断されてもクライアント(WinXP)では 1分間はTCPがセッションを維持しているのでは?と思ったのですが、 確証がありません。 調べてみたのですが、はっきりとしたものは見つかりませんでした。 これらのことが明記されている資料(本やホームページ)を ご存知の方がおられましたら、ご教示ください。 できれば1分間という時間を変更する方法も知りたいです。 宜しくお願いいたします。 | ||||
|
投稿日時: 2006-06-21 03:00
こんばんは。
私の知識不足で Keroichi さんの質問のポイントが十分につかみ取れていないのですが、回答してみます。 Windows XP においてデフォルトでは TCP の KeepAlive は無効 (送信しない) と思っていました。仮に setsockopt() を使って KeepAlive を有効にしても、デフォルトでは TimeOut が 2 時間になっていたと思います。 Windows XP での TCP/IP と NBT の構成パラメータ http://support.microsoft.com/kb/314053/ とは言え、IE には次のような仕様があるそうです。 Internet Explorer のデフォルトの Keep-Alive タイムアウト値を変更する方法 http://support.microsoft.com/kb/813827/
サンプルコードは要点のみのようですが、C から WinSock を使い、Socket を初期化し、Web サーバへリクエストを送信しているのかなぁ?と思いました。この場合も上記の KB が該当するのか、まったく自信がありません。上述の KB は「IE で」という話ですが、自分で Socket を作成して、、、という場合も該当するのか、私には全くワカリマセン。プログラミングはド素人なので、間違っていたらゴメンなさい。先に謝っておきます。 Windows における TCP/IP の実装は Windows 2000 テクニカルリファレンス TCP/IP プロトコル&サービスガイドが詳しいと思います。ただ、Windows 2000 ベースの聊か古い本であること、HTTP1.1 のようなアプリケーションに踏み込んだ内容は薄いこと、といった特徴があるように思います。 MS のサイトにホワイトペーパーもあります。次のリンクは Windows 2000 版の情報ですが、探せば Windows XP 版もあるのかもしれません。 Microsoft Windows 2000 TCP/IP 実装の詳細 http://www.microsoft.com/japan/windows2000/techinfo/howitworks/communications/networkbasics/tcpip_implement.asp ダラダラ書いたわりに、中身が薄くてスイマセン。 ではでは、おやすみなさい。うえだ、でした。 |
1