Linuxカーネルの「TCP_TIMEWAIT_LEN」変更は無意味?
-
kosaki55tea
- 29951
- 4
- 154
- 20

. @sonots から日本のWeb界隈ではTCP_TIMEWAIT_LEN を変更してカーネルリコンパイルがデファクトという話を聞いて軽くぐぐってみたところ、たしかに大量にそのようなページがヒットする。しかもどれ一つとして理由が書いてない。そして日本特有の現象
2015-09-09 00:03:14
軽くソースを見た感じだと、tcp_tw_reuse をセットすると1秒で TIME_WAITのsocketは再利用が始まるので、いまひとつリコンパイルの必要性が分からず。これ、ソース呼んで妥当性チェックした人がいるノウハウなのかなあ
2015-09-09 00:04:39
@kosaki55tea @sonots なにそれ・・・ こういうのって、パラメータで調整するのでは? リコンパイルとか ちょっと後のこと考えてください(死
2015-09-09 00:05:30
カーネル論理としては、TIME_WAITにかぎらずTCPは紛失したと思ってたパケットがやってくるものである。だからシーケンスナンバーおかしいやつは捨てる。だからシーケンスナンバーの初期値を十分ずらしてやれば TIME-WAITなsocketを再利用しても安全
2015-09-09 00:09:06
というのがtw_reuseの考え方に見える。わたしネットワークは素人だから間違ってるかもしれないけど。それが正しいとすると、TIME-WAITを短くすることに拘る理由はあまりない。netstatの出力が綺麗になるかどうかだけの問題
2015-09-09 00:10:14
@kosaki55tea え、ソケット開かれすぎて、time wait table がオーバーフローしてエラーになっちゃうとか書いてありません?namikawaさんの良い記事あった > d.hatena.ne.jp/rx7/touch/2013…
2015-09-09 00:12:49
私もTIME_WAITを短くする理由はないと思います。同じIPに接続する場合はtw_reuseでポート再利用されるし、そうでない場合はきちんと待つべきだと思うので。 twitter.com/kosaki55tea/st…
2015-09-09 00:14:03
@kosaki55tea d.hatena.ne.jp/rx7/20120329/p1 この辺を見ると、tcp_tw_reuse=1にしてもTIME_WAITが減らなかった、となっていますね
2015-09-09 00:14:41
@kosaki55tea むしろ tcp_tw_reuse を使えばいいから、 TCP_TIMEWAIT_LEN を設定不可能にしてますね。
2015-09-09 00:16:06
@smbd TIME_WAIT中のやつをreuseするオプションなので減らないのは当然で、その結果port不足が発生するかどうかが検証されてないように見えます。なんか間違ってる?
2015-09-09 00:16:23
@kosaki55tea こういうエラーが出る認識です > Mar 29 18:08:02 hostname kernel: TCP: time wait bucket table overflow cf. d.hatena.ne.jp/rx7/touch/2012…
2015-09-09 00:16:27
@smbd @kosaki55tea TIME_WAIT なソケットを管理するコストすら気にする競技向けの設定なのかもしれないけど、ベンチマークは見た事無いですね。
2015-09-09 00:16:54
@sonots tcp_tw_reuseのところ、TIME_WAITが減らなかった、としか書いてなくて、検証になってないよ。
2015-09-09 00:17:57
@kosaki55tea d.hatena.ne.jp/hirose31/20071… たしかに、こちらではtw_reuse=1にすると接続エラーにならないとなってますね
2015-09-09 00:18:15
TIME_WAIT が本当に要らないと分かってる環境なら、 FIN じゃなくて RST を送れば TIME_WAIT なくせるという Tips
2015-09-09 00:18:57
@kosaki55tea @smbd 空きがあるうちは普通に増えて、足りなくなって初めてreuseされる、だから、よほどの負荷を掛けた試験をしない限りはTIMEWAIT状態のものは減ったようには見えない…で認識良いですかね?
2015-09-09 00:20:52
@methane それ、tcp flow が汚れて(汚れたように見えて)やなんですよねー。アプリケーションでの対応がいるし。
2015-09-09 00:20:57
developerweb.net/viewtopic.php?… The TIME_WAIT state is there for a reason; it's your friend and it's there to help you :-)
2015-09-09 00:21:05
@fripper1214 @smbd じゃなくて、TIME_WAITのsocketのうち、reuseしても安全なものはreuseするというオプションなので減らす効果はまったくない。TIME_WAITのsocketが増えるとreuse条件に合致しやすくなるのでなかなか溢れないだけ
2015-09-09 00:26:20