• 締切済み

windowsでSYN/ACKを返すプログラム

以下の現象が発生して、大変困っております。 <現象> クライアントからhttpsアクセスをしようとして、 ブラウザに「ページが表示できません」エラーとなることがある。 <調査状況> クライアント、OS上でWireSharkを仕掛けて、TCPの通信をキャッチしたところ、 問題が発生した通信は「SYN」がOSまでは来ているが、 「SYN/ACK」が返ってきていない。 <環境> サーバ:windows2003server,Apache クライアントOS:WindowsXP <質問内容> クライアントからの「SYN」要求に対して、「SYN/ACK」を返すのは、具体的に何が返しているのでしょうか。 (windowsのソケットプログラム?) また、その調査方法があれば教えて頂けないでしょうか。 よろしくお願い致します。

みんなの回答

  • Lchan0211
  • ベストアンサー率64% (239/371)
回答No.5

SYN/ACKは、OSのTCPプロトコル処理プログラムが返送します。 SYNパケットを受信したTCP処理プログラムは、対象ポートを listenしているアプリケーションがいればSYN/ACKを返却し、 誰もlistenしていなければRST/ACKを返却します。 SYN/ACKもRST/ACKも返却されていない場合、Windowsファイアウォールや 市販のパーソナルファイアウォールソフトがパケットを破棄している 可能性が高いと思います。 SYN/ACKの替わりにRST/ACKが返却されているのであれば、 アプリ(Apache)が指定ポートをListenしていない可能性が高いです。 いずれの場合も、OSのネットワーク処理レベルの話であり、 Apacheに着信は通知されません。 Apacheの着信処理が動作する前になんらかの異常が発生している と思います。)、

grapecana
質問者

補足

回答ありがとうございます。 Windowsファイアウォールは切っていますが、 市販のウィルス対策ソフトは入っております。 ただ、ウィルス対策ソフトオフにした状態で、現象が再現したので、 関連性は少ないと思っております。 今の時点では、RST/ACKが返却されている状況は確認できておりません。 となると、Apacheの可能性は低いということですね。。。

  • Toshi0230
  • ベストアンサー率51% (836/1635)
回答No.4

> 問題のある通信の時だけ、サーバ側でポートが閉じているのかどうか、 > 調査することはできるのでしょうか。 ポートが待ち受け状態になっているかどうかは、コマンドラインから"netstat -a"を実行すればわかります。 ただ、ファイアウォール機能を使っている場合はそちらの影響も考える必要があります。 > といったことがあるのかどうか、疑っているのはいるのですが、 実装については素人なので外しているかもですが、基本的にTCPセッションの確立まではOSの仕事です。 Apacheは確立したセッション上でデータの送受信をやっているだけのはずです。

grapecana
質問者

補足

回答ありがとうございます。 なるほど、netstatですね。 再現テストはできるので、その間のnetstatの状態をログで出力させるようにしてみます。

  • Toshi0230
  • ベストアンサー率51% (836/1635)
回答No.3

サーバ側にSYNが届いていてかつサーバがSYN/ACKを返していないのであれば、問題はサーバ側にあると見て良いでしょう。 ポートが閉じているのかはたまた別の問題なのか、今提示されている情報だけでは何ともいえませんが… > その通信が、Apache上のアクセスログには出ていないという状況です。 そもそもTCPのセッションが確立していないので、Apacheのログには何も出力されないと思います。

grapecana
質問者

補足

回答ありがとうございます。 おっしゃるとおり、サーバ側に問題があると思っております。 問題のある通信の時だけ、サーバ側でポートが閉じているのかどうか、 調査することはできるのでしょうか。 >> その通信が、Apache上のアクセスログには出ていないという状況です。 > >そもそもTCPのセッションが確立していないので、Apacheのログには何も出力されないと思います。 OSのソケットをオープンするのは、Apacheのプロセスだと思うので、 OSまで"SYN"は届いていて、Apacheのプロセスに渡せなかったから ソケットをオープンできず、"SYN/ACK"が返らなかった。 といったことがあるのかどうか、疑っているのはいるのですが、 その辺りの調査方法がわからず、暗礁に乗り上げております。。。。

  • kuroizell
  • ベストアンサー率55% (95/170)
回答No.2

Apacheのアクセスログより、エラーログを調べるべきかと思います。 > httpsアクセスをしようとして、 Windows2003側のポート443開放と、SSLの設定は出来てますか?

grapecana
質問者

補足

ご回答ありがとうございます。 説明不足で申し訳ございません。 error.log、ssl_request.logは調査しておりますが、エラーは検知できておりません。 Windows2003側のポート443開放と、SSLの設定は出来ております。 通常、https通信が出来ておりますが、 1回/1時間程度、「ページが表示されません」と出てしまうことがあります。

  • Toshi0230
  • ベストアンサー率51% (836/1635)
回答No.1

"SYN"に対して"SYN/ACK"を返すのは、"SYN"を受信したホストです。 クライアントが"SYN"を送っているのに"SYN/ACK"が返ってこないのであれば、 (1) SYNがサーバに届いているのか (2) サーバはSYN/ACKを返しているのか をまず調べないと始まりません。 サーバ側にWiresharkを仕込むなり「ネットワークモニタ」(2003に標準付属)を追加インストールするなりして調べるのが良いでしょう。 あとは、どこで通信がブロックされているかをしらみつぶしに調べていくことになります。

grapecana
質問者

補足

回答ありがとうございます。 説明不足で申し訳ございません。 サーバ側にWireSharkを仕掛けた結果、 サーバ側のNickまでは"SYN"が届いていることは確認できております。 その通信が、Apache上のアクセスログには出ていないという状況です。

関連するQ&A