网络协议栈名词解释


简介

正文

1. KeepAlive

  • 说明:

TCP的KeepAlive机制是一种保活机制,就是为了保证连接的有效性,探测连接的对端是否存活的作用,在间隔一定的时间发探测包,根据回复来确认该连接是否有效。此外,KeepAlive机制还可以解决大量无用连接无法回收、占用资源的问题了(在TCP通信中客户端和服务器若长时间无数据交互情况下,若一方出现异常情况关闭连接,抑或是连接中间路由出于某种机制断开连接,而此时另一方不知道对方状态而一直维护连接,浪费系统资源的同时,也会引起下次数据交互时出错)。,都实现了KeepAlive功能。

PS:

KeepAlive并不是TCP协议规范的一部分,但在几乎所有的TCP/IP协议栈(不管是Linux还是Windows)中,具体请看rfc1122

  • 处理:

1. 在Linux内核设置

KeepAlive默认不是开启的,如果想使用KeepAlive,需要在你的应用中设置SO_KEEPALIVE才可以生效,Linux内核提供了通过sysctl命令查看和配置Linux内核参数的方法。

# 查看当前内核TCP KeepAlive参数
sysctl -a | grep keepalive
# 返回内容如下:
    net.ipv4.tcp_keepalive_intvl = 75
    net.ipv4.tcp_keepalive_probes = 9
    net.ipv4.tcp_keepalive_time = 7200
# 修改参数
# 永久修改方式是写入文件
cat <<EOF > /etc/sysctl.d/keepalive.conf
net.ipv4.tcp_keepalive_time = 3600
EOF
#立即应用sysctl参数
sysctl --system

# 临时修改则直接使用命令
sysctl net.ipv4.tcp_keepalive_time=3600

PS:

  • tcp_keepalive_time,在TCP保活打开的情况下,最后一次数据交换到TCP发送第一个保活探测包的间隔,即允许的持续空闲时长,或者说每次正常发送心跳的周期,默认值为7200s(2h)。
  • tcp_keepalive_probes 在tcp_keepalive_time之后,没有接收到对方确认,继续发送保活探测包次数,默认值为9(次)
  • tcp_keepalive_intvl,在tcp_keepalive_time之后,没有接收到对方确认,继续发送保活探测包的发送频率,默认值为75s。

结束