人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

LinuxのTCP実装について質問です。

想定環境
サーバ
192.168.0.10
apache
FedoraCore 4

クライアント
192.168.0.11

上記環境にて以下のことを行います。
1.クライアントがサーバの80番ポートに接続します。
2.クライアントからHTTPデータを一切送りません。クライアントでは、以下のコマンドを実行しただけの状態。
% telnet 192.168.0.10 80


上記の状態のtcpdumpを見てみると以下のようになります。(適宜改行を入れてあります)
http://d.hatena.ne.jp/matsubobo/20070704

■質問
3-way handshakeが終了した後にサーバが一定期間ごとにSYN+ACKを送信することは
正しい実装なのでしょうか?



このようなTCP実装をしている場合、大量のソケットがオープンされてしまい、
サーバのリソースを食ってしまうことが心配事です。

SYN+ACKを再送している間、(18:39:59.729946以降の通信)
サーバのソケットはSYN_RECV状態になってしまいます。


よろしくお願いいたします。

●質問者: まつぼっくり
●カテゴリ:コンピュータ インターネット
✍キーワード:ack Apache FedoraCORE HTTP Linux
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● b-wind
●60ポイント

サーバが一定期間ごとにSYN+ACKを送信することは

正しい実装なのでしょうか?

ダンプ情報を見る限り、シーケンス番号が全て同一になっています。

つまり何らかの原因で、3-way handshake が完了せず、パケットの再送を行っているようです。

Manpage of TCPDUMP

-S コマンドで ACK パケットの本来のシーケンス番号が分かるので、きちんと返しているか確認するところからはじめてはどうでしょうか。


TELNET コマンドは色々と機能が有るのでこの目的には適していないように思います。

◎質問者からの返答

最初は私もそう思いましたが、3-way-handshakeは完了しているようです。

サーバがSYN+ACKの再送と、クライアントがそれに応答する。という繰り返し中にtelnetで文字を入力したら、サーバへ送信されます。

telnetで1文字でも入力すれば上記のような SYN+ACKのやりとりは行われません。

tcpdumpの-Sオプションありがとうございます。このオプションを使って試した結果、何か判明しましたら報告させていただきます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ