トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

Linux:OSのtcpタイムアウトのデフォルト値について のバックアップソース(No.1)

*Linux:OSのtcpタイムアウトのデフォルト値について [#x997895a]

例えば、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秒経過)

-[[http://linux.blog.kaone.net/Entry/11/:LINUX忘却録]]