欢迎光临散文网 会员登陆 & 注册

讲解netfilter连接跟踪主要数据结构

2022-12-08 16:49 作者:补给站Linux内核  | 我要投稿

linux协议栈中netfiler框架对数据包做过滤处理基本上都是基于连接跟踪来做的,比如snat、dnat等,连接跟踪就是记录数据流在协议栈中的两个方向,不同的协议有不同的特征,tcp/udp就是五元组(源ip、目的Ip、源端口、目的端口、协议号),icmp协议就是ip、id、type、code。

1、struct nf_conn

struct nf_conn结构体是连接跟踪的抽象结构,其中最重要的元素是struct nf_conntrack_tuple_hash tuplehash[IP_CT_DIR_MAX]记录了条连接的特征信息,根据这个结构中的信息可以确定唯一的一条连接,还有是连接的状态unsigned long status,各元素的详解如下。


【文章福利】小编推荐自己的Linux内核技术交流群:【749907784】整理了一些个人觉得比较好的学习书籍、视频资料共享在群文件里面,有需要的可以自行添加哦!!!(含视频教程、电子书、实战项目及代码)   


数据包的连接状态定义在枚举变量ip_conntrack_info中

3、连接跟踪状态

4、struct nf_conntrack_tuple_hash

hnnode是一个链表,主要是struct nf_conntrack_tuple

struct nf_conntrack_tuple这个结构保存了连接不同协议的特征信息,u是一个联合体,不同协议有不同特征,tcp/udp协议的五元组,icmp协议的type、code、id

struct nf_conntrack_man主要保存三层ip和四层端口

5、 struct nf_conntrack_l3proto

struct nf_conntrack_l2proto主要定义了一些三层Ip协议的操作函数,获取tuple结构三层协议相关的特征(源ip、目的ip),nfnetlink格式和tuple格式的源ip、目的ip转换。

struct nf_conntrack_l3proto结构实例如下

6、struct nf_conntrack_l4proto

struct nf_conntrack_l4proto结构主要是四层协议和tuple相关的操作函数,获取tuple结构四层协议相关的特征,tcp/udp协议就是源端口、目的端口,icmp协议是id、type、code,nfnetlink格式和tuple格式四层特性元素转换。

6.1 、nf_conntrack_l4proto_tcp4

tcp协议struct nf_conntrack_l4proto实例化是nf_conntrack_l4_proto_tcp4

6.2 、nf_conntrack_l4proto_udp4

udp协议struct nf_conntrack_l4proto实例如下

6.3、nf_conntrack_l4proto_icmp

imcp协议的struct nf_conntrack_l4proto的实例如下


原文作者:TCH_ world



讲解netfilter连接跟踪主要数据结构的评论 (共 条)

分享到微博请遵守国家法律