Linux: TCP keepaliveの設定
LinuxではTCP keepaliveをサポートしているが、その値を任意で変更する方法がある。
使用用途
- 対向機器のdead peer検出目的(対向の機器が死んでいるか生きているかどうか。)
- ルータなどを経由すると、ルータやファイアウォールの無動作タイムアウトなどの設定でTCPのコネクションを遮断されるのを防ぐ。
現状の確認コマンド
↓はデフォルトの設定。
# cat /proc/sys/net/ipv4/tcp_keepalive_time
7200 ←7200秒経ったらkeepaliveを送る。
# cat /proc/sys/net/ipv4/tcp_keepalive_intvl
75 ←75秒後に再送する。
# cat /proc/sys/net/ipv4/tcp_keepalive_probes
9 ←9回プローブする。
変更コマンド
# echo 30 > /proc/sys/net/ipv4/tcp_keepalive_time ← 実験のため、30秒に変更。
# echo 20 > /proc/sys/net/ipv4/tcp_keepalive_intvl ←同じく20秒に変更。
パケットをみる
192.168.168.80からkeepaliveを30秒間隔で送っている。
応答側のパケットの中身は↓。Ackで返す。
参考URL
TCP Keepalive HOWTO
http://www.tldp.org/HOWTO/html_single/TCP-Keepalive-HOWTO/