Netfilter 之 连接跟踪相关数据结构

 

Netfilter通过连接跟踪来记录和跟踪连接的状态,为状态防火墙和NAT提供基础支持;

钩子点与钩子函数

下图为钩子点和钩子函数的关系图(点击图片查看原图),其中ipv4_conntrack_defrag、ipv4_conntrack_in、ipv4_helper、ipv4_confirm为连接跟踪相关的钩子函数,其作用的钩子点为PRE_ROUTING、LOCAL_IN、LOCAL_OUT、POST_ROUTING:

 

钩子函数的调用流程

通过上图,可以得到连接跟踪的流程:

输入本地:

ipv4_conntrack_defrag–>ipv4_conntrack_in–>ipv4_helper–>ipv4_confirm

【<————-PRE_ROUTING————>】    【<—— LOCAL_IN——>】

 

转发:

ipv4_conntrack_defrag–>ipv4_conntrack_in–>ipv4_helper–>ipv4_confirm

【<————-PRE_ROUTING————>】    【<—— LOCAL_IN——>】

 

本地输出:

ipv4_conntrack_defrag–>ipv4_conntrack_local–>ipv4_helper–>ipv4_confirm

【<————–LOCAL_OUT—————–>】  【<—-POST_ROUTING—>】

 

连接跟踪的状态

ip_conntrack_info用来描述连接跟踪的状态,如下:

 

数据结构图

本文中涉及的数据结构之间的关系图如下(点击图片查看原图):

源码分析

nf_conn是对连接跟踪抽象的基础结构,其中tuplehash为连接跟踪nf_conntrack_tuple的hash,分两个方向;

 

nf_conntrack_tuple_hash的定义如下:

 

nf_ct_ext用于实现对连接跟踪的扩展;

 

nf_conntrack_tuple是用来区分一条连接的信息,定义如下:

 

上面结构中的源方向信息使用了nf_conntrack_man结构,其中包括了三层识别信息,四层识别信息,以及三层协议号;

 

nf_conn中的proto成员用来存储协议特有的用来表示连接跟踪的信息,其联合体nf_conntack_proto定义如下:

 

下面是TCP的一些必要信息;

 

本文链接:Netfilter 之 连接跟踪相关数据结构

转载声明:转载请注明来源:Linux TCP/IP Stack,谢谢!


发表评论

电子邮件地址不会被公开。 必填项已用*标注