关于iptables中ip_conntrack_max和hash表的关系及调整

豆豆网   技术应用频道   2007年03月12日  【字号: 收藏本文

本文详细介绍关于iptables中ip_conntrack_max和hash表的关系及调整

  在i386架构上,HASHSIZE = CONNTRACK_MAX / 8 =

  RAMSIZE (以bytes记) / 131072 = RAMSIZE (以MegaBytes记) * 8。

  举例来说,一个32位、带512M内存的PC可以存储512*1024^2/128/1024 =

  512*8 = 4096 个桶(链接表)

  但是真正的公式是:

  HASHSIZE = CONNTRACK_MAX / 8 = RAMSIZE (以bytes记) / 131072 / (x / 32)

  这里x是指针的bit数,(例如,32或者64bit)

  请注意:

  -默认HASHSIZE的值不会小于16

  -对于带有超过1G内存的系统,HASHSIZE的默认值会被限制在8192(但是可以手工设置成更大的值)

  读取CONNTRACK_MAX和HASHSIZE

  ==================================

  现在通过/proc文件系统我们可以在运行时读取CONNTRACK_MAX的值。

  在Linux kernel 2.4.23版本前,使用:

  # cat /proc/sys/net/ipv4/ip_conntrack_max

  在Linux kernel 2.4.23版本后,使用:

  # cat /proc/sys/net/ipv4/netfilter/ip_conntrack_max

  (旧的 /proc/sys/net/ipv4/ip_conntrack_max是不建议使用的!)

  当前的HASHSIZE总是可以在syslog信息中找到(对任何一个内核版本),桶(也就是HASHSIZE)的数目是在ip_conntrack初始化的时候显示出来的。

  对于linux内核2.4.24以后,当前的HASHSIZE值可以在运行时使用下面的命令读取:

  # cat /proc/sys/net/ipv4/netfilter/ip_conntrack_buckets

  修改CONNTRACK_MAX和HASHSIZE

  ====================================

  默认的CONNTRACK_MAX和HASHSIZE的值都会因主机的不同而不同,但你可以在只做防火墙的高负载的系统上增加他们。

责编:豆豆技术应用

正在加载评论...