首页 > 代码库 > 内核参数优化之1 keepalive解析

内核参数优化之1 keepalive解析

以下信息纯属虚构,切勿相信!


 

  • tcp/ip协议中有一个keep-alive机制,即检查空连接的时效性,当一个空连接持续一段时间后,就会发送一个keep-alive探测包,来探测客户端是否还存在.
    • 如果存在,则客户端返回一个ack报文
    • 如果存在,但构建连接的应用程序已经推出,则客户端返回一个rst报文,并发送fin报文撤销连接
    • 如果存在,但构建连接的应用程序已经崩溃,则客户端返回一个fin报文,直接撤销连接
    • 如果不响应任何报文,则顾名思义,服务器就会主动撤销连接.不过在撤销连接前,服务器会发送多少个探测包,每个探测包间隔多少秒呢?就看下面的参数了
  • net.ipv4.tcp_keepalive_time
    • 意思是一个已知连接空闲了多久,默认时间是7200秒,即2小时,这个值是很大的,因为如果对方空连接攻击,就很恶心了,所以建议修改为1800秒
  • net.ipv4.tcp_keepalive_probes
    • 意思就是tcp在空闲时间结束后,发送几个探测报,默认是9个,根据情况,为了释放资源,我们应该缩短这个次数,所以建议5次以下,比如3次
  • net.ipv4.tcp_keepalive_intvl
    • 意思是每个探测报文的间隔时间,默认是75秒,这里也建议缩短,因为间隔时间是75秒*发送的报文次数=无活动连接到撤销连接所用的时间,所以建议20秒.

OK, 经过这三个参数的调整,现在的tcp/ip检测空连接的效果是
1. 每一个空连接可以保持1800秒(30分钟)
2. 当空闲时间结束后,服务器会每20秒发送一个探测报文,共计发送3个
3. 如果依然没有活动,则断开.所以空连接总占用时间为31分钟