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
9ls -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
3tcp_keepalive_time = 7200 (seconds)
tcp_keepalive_intvl = 75 (seconds)
tcp_keepalive_probes = 9 (number of probes)
- tcp keepalive 将会 socket 的活动后, 等待 7200 秒, 才会发送第一个 keepalive 探测.
- 然后它每隔 75 秒发一次探测. 只要 TCP/IP socket 正常交流并且活跃, 就不需要 keepalive 包.
- 只到9次检测都失败, 将会设为失败
4. 如何设置
- 编辑 /ect/sysclt.conf 文件
1
vi /etc/sysctl.conf
- 编辑 /ect/sysclt.conf 文件
- 编辑或添加配置
1
2
3net.ipv4.tcp_keepalive_time = 60
net.ipv4.tcp_keepalive_intvl = 10
net.ipv4.tcp_keepalive_probes = 6
- 编辑或添加配置
- 加载配置使之生效
1
sysctl -p
- 加载配置使之生效