[過去ログ] ネットワークプログラミング相談室 Port4 (1001レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
61(3): デフォルトの名無しさん [sage] 02/10/18 09:38 AAS
>>55
「相手が落ちた(接続が落ちた)」の定義にもよる。
相手が単純にソケットをクローズしただけなら、TCP レベルで FIN を受信
するから、recv() が 0 return する。
相手が RST を飛ばしてきたら(強制切断) recv() が -1 return で
エラーコードは ECONNRESET (WinSock の場合表現が違うかもしれない)。
相手のマシン自体がホントに落ちた(panic とか) だったら、何も
おこらない。recv() でブロックしたまま。
質問する時は、どういう状況について質問するのか、できるだけ、
具体的にしよう。
とりあえず、ソケットプログラミングの一般論として
http://www.kt.rim.or.jp/~ksk/sock-faq/unix-socket-faq-ja-2.html#ss2.1
に目を通しとけ。
62(2): デフォルトの名無しさん [sage] 02/10/18 10:22 AAS
>>61
> 相手のマシン自体がホントに落ちた(panic とか) だったら、何も
> おこらない。recv() でブロックしたまま。
ある程度時間がたったらETIMEOUTで戻ってこない?
65(2): 61 [sage] 02/10/18 10:58 AAS
>>62
何が TIMEOUT するのさ?
何も送信してなければ、TIMEOUT も存在しえないよ。
もし、データを送信して、TCP レベルでまだ ACK を受信していない段階で
相手がオチた(無応答になった)のなら、TCP の再送タイムアウトが発生
するので、recv() が -1 return して ETIMEDOUT エラーになるけど。
もっとも、もし、相手がオチた後にリブートして来たケースを考えると、
TCP の再送を受信した段階で相手が RST 応答するから、そこでコネクション
が切れる。アプリケーションは recv() のエラーでそれを検出するから、
再送タイムアウトよりは、早いタイミングで検出できるだろう。
SO_KEEPAVLIE オプションを有効にしてれば、データを送信していなくても、
無通信状態が続いたら相手の生存確認をするから、そのうち TIMEOUT を
検出するけど、普通は 2 時間ぐらいかかるし(Windows の事情はよくわから
ないのでデフォルト値がどのぐらいか知らない)。
90(2): デフォルトの名無しさん [age] 02/10/18 20:20 AAS
なんか、盛り上がってますね。
話のきっかけは、recv() で物理的な回線断、相手のクラッシュが検出できるか?
ってことに関しては、判断不可能ってのが正解だと思います。
そういう状態になったら、recv() は永久に戻ってきません。
そのために、わざわざアプリで定周期にパケットをやり取りして相手の生死の
確認をするんだと思います。
その後のやり取りについても、 >>61 , >>71 , >>81 , >>84 の説明のほうが
筋が通ってて、正しいように思います。
私は、TCPの内部のソースはまだ読めないので、一部の説明は理解不能ですが。
それと、
>じゃあどうしてSYN floodのような攻撃が可能なのですか?
についてですが、大抵のサーバは、コネクション毎にプロセスやスレッドを
作りますから、それらに割くリソースがシステムのリソースを食いつぶしていって、
最後にはサーバーが動けなくなる(メモリが足りなくてプロセス、スレッドがもう
作成できないとか)や、ものすごい勢いでコネクションの確立要求がくるとそれの
対応にカーネルが追われてしまって、本来のサーバーの仕事が出来ないくらいCPU
パワーを使ってしまい、結果、サーバーとしての機能停止って感じじゃないのかな?
よって、サーバー側のコネクション数に限界がなくても、SYN flood攻撃は成り立つ
と思います。
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.037s