- PR -

TCPのセッション維持時間

1
投稿者投稿内容
Keroichi
会議室デビュー日: 2006/06/20
投稿数: 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/05/22
投稿数: 34
投稿日時: 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/

引用:
Internet Explorer が、(Connection: Keep-Alive ヘッダを使用して) Web サーバーに永続的な HTTP 接続を確立した場合、Internet Explorer は、最初の要求の受信に使用したソケットと同一の TCP/IP ソケットを、そのソケットが 1 分間アイドルになるまで再使用します。接続が 1 分間アイドルだった場合、Internet Explorer はその接続をリセットします。その後の要求受信には新しい TCP/IP ソケットが使用されます。Internet Explorer の HTTP KeepAlive タイムアウト値は変更することができます。

クライアント ブラウザ (Internet Explorer) または Web サーバーのどちらかで、より小さい KeepAlive 値が設定されている場合、その値が制限の要因になります。たとえば、クライアントのタイムアウトが 2 分で、Web サーバーのタイムアウトが 1 分の場合、最大タイムアウトは 1 分です。クライアントまたはサーバーのどちらもが制限の要因になります。



サンプルコードは要点のみのようですが、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

スキルアップ/キャリアアップ(JOB@IT)