質問: LinuxのTCP実装について質問です。 想定環境 サーバ 192.168.0.10 apache FedoraCore 4 クライアント 192.168.0.11 上記環境にて以下のことを行います。 1.クライアントがサーバの80番ポートに接続します。 2.クライアントからHTTPデータを一切送りません。クライアントでは、以下のコマンドを実行しただけの状態。 % telnet 192.168.0.10 80 上記の状態のtcpdumpを見てみると以下のようになります。(適宜改行を入れてあります) ■質問 3-way handshakeが終了した後にサーバが一定期間ごとにSYN+ACKを送信することは 正しい実装なのでしょうか? このようなTCP実装をしている場合、大量のソケットがオープンされてしまい、 サーバのリソースを食ってしまうことが心配事です。 SYN+ACKを再送している間、(18:39:59.729946以降の通信) サーバのソケットはSYN_RECV状態になってしまいます。 よろしくお願いいたします。
回答: > > サーバが一定期間ごとにSYN+ACKを送信することは > > > 正しい実装なのでしょうか? > > > ダンプ情報を見る限り、シーケンス番号が全て同一になっています。 つまり何らかの原因で、3-way handshake が完了せず、パケットの再送を行っているようです。 Manpage of TCPDUMP -S コマンドで ACK パケットの本来のシーケンス番号が分かるので、きちんと返しているか確認するところからはじめてはどうでしょうか。 TELNET コマンドは色々と機能が有るのでこの目的には適していないように思います。