Linux下如何设置 TCP KeepAlive

1. 什么是 TCP KeepAlive

TCP KeepAlive 是一种机制, 检测 TCP 连接的另一端是否已经停止响应了

2. 怎么检测

TCP 在空闲一段时间之后, 将来发送包含null数据的检测包到另一端. 如果另一端没有响应, socket 就会自动关闭.

3. 如何设置

TCP 的 KeepAlive 可以提高带宽的使用率. 那么在 Linux 下怎么设置呢?
Linux 系统可以通过 /ect/sysctl.conf 来进行设置.

如果想查看当前系统使用的设置是什么, 可以通过以下命令:

1
2
3
4
5
6
7
8
9
ls -l /proc/sys/net/ipv4/tcp_keepalive*
-rw-r--r-- 1 root root 0 Jul 24 13:56 /proc/sys/net/ipv4/tcp_keepalive_intvl
-rw-r--r-- 1 root root 0 Jul 24 13:56 /proc/sys/net/ipv4/tcp_keepalive_probes
-rw-r--r-- 1 root root 0 Jul 24 13:56 /proc/sys/net/ipv4/tcp_keepalive_time

cat /proc/sys/net/ipv4/tcp_keepalive*
75
9
7200

他们都代表什么意思呢?

1
2
3
tcp_keepalive_time = 7200 (seconds)
tcp_keepalive_intvl = 75 (seconds)
tcp_keepalive_probes = 9 (number of probes)

    1. tcp keepalive 将会 socket 的活动后, 等待 7200 秒, 才会发送第一个 keepalive 探测.
    1. 然后它每隔 75 秒发一次探测. 只要 TCP/IP socket 正常交流并且活跃, 就不需要 keepalive 包.
    1. 只到9次检测都失败, 将会设为失败

4. 如何设置

    1. 编辑 /ect/sysclt.conf 文件
      1
      vi /etc/sysctl.conf
    1. 编辑或添加配置
      1
      2
      3
      net.ipv4.tcp_keepalive_time = 60
      net.ipv4.tcp_keepalive_intvl = 10
      net.ipv4.tcp_keepalive_probes = 6
    1. 加载配置使之生效
      1
      sysctl -p