Linux:OSのtcpタイムアウトのデフォルト値について のバックアップ(No.1)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- Linux:OSのtcpタイムアウトのデフォルト値について へ行く。
- 1 (2012-01-31 (火) 22:48:29)
Linux:OSのtcpタイムアウトのデフォルト値について †
例えば、curlを使用して、タイムアウト値を300秒に指定し、タイムアウトさせるよう無いことをしても、実際180秒を超えたくらいでタイムアウトする事象が発生していました。
これが、curlだけじゃなくて、例えばapacheのmod_proxy_balancerのバックエンドサーバへのタイムアウトについても、タイムアウト値を300秒とかでせっていしても、実際は180秒ちょいでタイムアウトしてしまっていました。
これについて、ちょっと調べたところどうもLinuxのOSとして持っているTCPのタイムアウト値が効いているようだ、ということがわかりました。
ここを見ると分かります。
#cat /proc/sys/net/ipv4/tcp_syn_retries 5
これはtcpのsynを送信するリトライ回数みたいで、以下のロジックでリトライをされるようです。
3*2^(N-1)秒の間隔(NはN回目のSYN)を空けてSYNパケットが送信される
詳しくはこちらのサイトで解説されています。
※一部引用
最初のSYN送信 (0秒経過)
3秒経過してACKが、戻らないとき、SYN(1)を再送します。 (3秒経過)
また、6秒経過してACKが、戻らないとき、SYN(2)を再送します。 (9秒経過)
また、12秒経過してACKが、戻らないとき、SYN(3)を再送します。 (21秒経過)
また、24秒経過してACKが、戻らないとき、SYN(4)を再送します。 (45秒経過)
また、48秒経過してACKが、戻らないとき、SYN(5)を再送します。 (93秒経過)
また、96秒経過してACKが、戻らないとき、ここでタイムアウトが発生します (189秒経過)