4.2. conntrack
记录
我们先来看看怎样阅读
/proc/net/ip_conntrack
里的
conntrack
记录。这些记
录表示的是当前被跟踪的连接。如果安装了
ip_conntrack
模块?/p>
cat
/proc/net/ip_conntrack
的显示类似:
tcp 6 117 SYN_SENT src=192.168.1.6 dst=192.168.1.9 sport=32775 \
dport=22 [UNREPLIED] src=192.168.1.9 dst=192.168.1.6 sport=22 \
dport=32775 use=2
conntrack
模块维护的所有信息都包含在这个例子中了,
通过它们就可以知道某
个特定的连接处于什么状
态。首先显示的是协议,这里?/p>
tcp
,接着是十进制
?/p>
6
(译者注?/p>
tcp
的协议类型代码是
6
)。之后的
117
?/p>
这条
conntrack
记录
的生存时间,它会有规律地被消耗,直到收到这个连接的更多的包。那时,这个
值就?/p>
被设为当时那个状态的缺省值。接下来的是这个连接在当前时间点的状
态?/p>
上面的例子说明这个包处在状?/p>
SYN_SENT
?/p>
这个值是
iptables
显示的,
?/p>
便我们好理解,而内部用的值稍有不同?/p>
SYN_SENT
说明我们正在?/p>
察的这个?/p>
接只在一个方向发送了一
TCP
SYN
包。再下面是源地址、目的地址、源端口和目
的端口。其
中有个特殊的?/p>
UNREPLIED
,说明这个连接还没有收到任何回应?/p>
最后,是希望接收的应答包的信息,他?/p>
的地址和端口和前面是相反的?/p>
连接跟踪记录的信息依?/p>
IP
所包含的协议不同而不同,所有相应的值都是在?/p>
文件
linux/include/netfilter-ipv4/ip_conntrack*.h
中定义的?/p>
IP
?/p>
TCP
?/p>
UDP
?/p>
ICMP
?/p>
议的缺省值是?/p>
linux/include/netfilter-ipv4/ip_conntrack.h
里定
义的。具
体的值可以查看相应的协议,但我们这里用不到它们,因为它们大都
只在
conntrack
内部使用。随着状态的
改变,生存时间也会改变?/p>
最?/p>
patch-o-matic
里有一个新的补丁,可以把上面提到的超时时间?/p>
作为系统变量,这样我们就
能够在系统空闲时改变它们的值。以后,?/p>
们就不必为了改变这些值而重编译内核了?/p>
这些可通过
/proc/sys/net/ipv4/netfilter
下的一些特殊的系统调用
来改变?/p>
仔细看看
/proc/sys/net/ipv4/netfilter/ip_ct_*
里的变量吧?/p>
当一个连接在两个方向上都有传输时?/p>
conntrack
记录就删?/p>
[UNREPLIED]
标志?
然后重置?/p>
在末尾有
[ASSURED]
的记录说明两个方向已没有流量?/p>
这样的记录是
确定的,
在连接跟踪表满时?/p>
是不会被删除的,
没有
[ASSURED]
的记录就要被?/p>
除。连接跟踪表能容纳多少记录是被一个变量控制的,它可由内核中的
ip-
sysctl
函数设置。默认值取决于你的内存大小?/p>
128MB
可以包含
8192
条目录,
256MB
?/p>
16376
条?/p>
你也可以?/p>
/proc/sys/net/ipv4/ip_conntrack_max
里查看?/p>
设置?/p>