Humanity

Edit the world by your favorite way

サーバにおけるTCPのチューニング (/etc/sysctl.conf)

自分には早いような気がするけどメモ。


大量の接続がやってきた!ヤァ!ヤァ!ヤァ! - 元RX-7乗りの適当な日々
こういった大量のTIME_WAITがある状況でtcp_tw_recycleを有効にするとソケットの再利用を有効にする、らしい。

tcp_tw_recycle (Boolean; default: disabled; Linux 2.4 以降)
TIME_WAIT ソケットの素早い再利用を有効にする。 このオプションを有効にすると、 NAT (ネットワークアドレス変換) を用いていると問題が生じるので、 あまり推奨しない。


F's Garage @fshin2000 :tcp_tw_recycle=1にすると、今でもソフトバンク携帯で障害が起きる。
しかしtcp_tw_recycleを有効にすると、過去モバツイsoftbank携帯で接続できない問題が起きたらしい。


どさにっき
原因は(softbank側のことは分からないけど)おそらくこの記事にある通り。

  1. NATを使っていると同じIPからのパケットのタイムスタンプが増えたり減ったりするように見える
  2. しかしtcp_tw_recycleを有効にしているとタイムスタンプの巻き戻ったパケットを捨ててしまう
  3. おまけによくわからんけどセキュリティ上の問題もある

という諸々の問題が。
この時点でそもそもTCPヘッダにタイムスタンプの項目があることすら知らなかったレベル。


TCPオプションのTSOPT(Time Stamp Option)の値の進み方 - 別館 子子子子子子(ねこのここねこ)
また、TCP timestamp optionは明確な仕様は決まっておらず、各OSのTCP実装によって動作が違う。
以上の理由からtcp_tw_recycleはあまり使わない方がいい?という結論に。(自分の中で)
もしこれでコケた時に原因究明できる自信がないとも言う。