[mew-win32 04334] Re: [mew-dist 26688] Re: フォールバック実験

Kyotaro HORIGUCHI horiguti at example.com
2005年 12月 1日 (木) 00:29:59 JST


ICMP3.3 を返してくるところが多いようだと少なくとも Windows マシン
は connect のタイムアウトに20秒は覚悟しなくてはならないという感じ
ですね.

# どちらかがつながって一定時間以上もう一方がつながらなかったらそち
# らは強制切断とかいう感じなんですかねぇ.


 以下ここでする話でもないような気もしますが^^;

ki> > 新しい接続要求があると、再転送タイマは 3 秒 (または、アダプタ別のレ
ki> > ジストリ パラメータ "TcpInitialRtt" で構成した値) に初期化され、
ki> > "TcpMaxConnectRetransmissions" で指定された回数 (Windows Server 2003 
ki> > の既定値は 2 回) まで要求 (SYN) が再送信されます。
ki> 
ki> なので、3+6+12=21秒でタイムアウト、になります。

 いや. 確かにこの記述どおりなのですが, 明示的な否定応答を受け取っ
ているのに再転送(というか再接続)を試みるというのは仕様としてどうな
んでしょうかね..  RFC1122的にも

|    Destination Unreachable -- codes 2-4
|     These are hard error conditions, so TCP SHOULD abort
|     the connection.

|     A transport protocol that has its own mechanism for
|     notifying the sender that a port is unreachable (e.g., TCP,
|     which sends RST segments) MUST nevertheless accept an ICMP
|     Port Unreachable for the same purpose.

 ですよね. まぁFreeBSDも以前は同様の動作をしていたようだし, なにか
歴史的な経緯があるんですかね. 昔は(今でも?)ちょっと何かあるとすぐ
に ICMP3.3 が返ってきてたのでこうしないと使い物にならなかったとか.

ki> > 最後に FireWall マシン(FreeBSD)からISPのサーバに向かってtelnetした
ki> > ときのパケットキャプチャ結果です.
ki> > 
ki> > 11/29-08:33:33.330701 fw:54945 -> server:587
ki> > TCP TTL:64 TOS:0x10 ID:44679 IpLen:20 DgmLen:64 DF
ki> > ******S* Seq: 0x1C8AF6BE  Ack: 0x0  Win: 0xFFFF  TcpLen: 44
ki> > =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
ki> > 11/29-08:33:33.355462 server -> fw
ki> > ICMP TTL:60 TOS:0x0 ID:16489 IpLen:20 DgmLen:68
ki> > Type:3  Code:3  DESTINATION UNREACHABLE: PORT UNREACHABLE
ki> > 
ki> >  これ一発で 'Connection refused' を返してきます.
ki> 
ki> これは net.inet.tcp.icmp_may_rst で制御されるみたいです。

 おお. 0 にしたら Windows と同じような動きになりました. ずっと早い
けど.

 natd が ICMP3.3 を RST に置き換えてくれるのでもいいのかな :-p

ki> # RFC1122, Sections 3.2.2.1 and 4.2.3.9.、らしい。

-- 
ほりぐちきょうたろう




Mew-win32 メーリングリストの案内