连接跟踪子系统之期望连接

这篇博客深入探讨了连接跟踪子系统中的期望连接,包括期望连接跟踪信息块的结构、插入方法、子模块初始化过程以及信息块的匹配策略。通过分析ftp协议的应用,解释了期望连接在连接跟踪中的作用。
摘要由CSDN通过智能技术生成

这篇笔记记录了连接跟踪子系统中期望连接相关的内容,这部分内容比较抽象,自己目前也只是基于ftp协议的使用来理解的,对于其它应用场景尚未接触过,尚不理解。期望连接相关代码文件有:

代码路径 说明
/net/netfilter/nf_conntrack_expect.c 期望连接子模块实现文件

1. 期望连接跟踪信息块

期望连接跟踪信息块用struct nf_conntrack_expect对象表示,该结构定义如下:

struct nf_conntrack_expect
{
   
	//同属一个master连接的期望连接被组织到一个链表中,见struct nf_conn_help定义
	struct hlist_node lnode;
	//用于将期望连接跟踪信息块加入到全局的哈希表中
	struct hlist_node hnode;
	//该期望连接跟踪信息块能够匹配的skb
	struct nf_conntrack_tuple tuple;
	struct nf_conntrack_tuple_mask mask;
	//当期望连接到来时,会调用该函数,该回调函数是可选的
	void (*expectfn)(struct nf_conn *new, struct nf_conntrack_expect *this);
	//指向识别出该期望连接的helper
	struct nf_conntrack_helper *helper;
	//指向master连接跟踪信息块
	struct nf_conn *master;
	//和普通的连接类似,每个期望连接也有有效定时器,定时器超时则会从系统中删除该期望连接
	struct timer_list timeout;
	//引用计数
	atomic_t use;
	/* Flags */
	unsigned int flags;
#ifdef CONFIG_NF_NAT_NEEDED
	__be32 saved_ip;
	/* This is the original per-proto part, used to map the
	 * expected connection the way the recipient expects. */
	union nf_conntrack_man_proto saved_proto;
	/* Direction relative to the master connection. */
	enum ip_conntrack_dir dir;
#endif
	struct rcu_head rcu;
};

2. 期望连接跟踪信息块的插入

当helper识别到即将要有一个期望连接到达时,就会创建一个期望连接跟踪信息块,然后将其加入到全局哈希表中,这样等真正的期望连接的skb到达时,就可以匹配该期望连接跟踪信息块,表示期望连接建立成功。

int nf_ct_expect_related(struct nf_conntrack_expect *expect)
{
   
	struct nf_conntrack_expect *i;
	struct nf_conn *master = expect->master;
	//找到master连接的help扩展
	struct nf_conn_help *master_help = nfct_help(master);
	struct hlist_node *n;
	unsigned int h;
	int ret;

	NF_CT_ASSERT(master_help);

	spin_lock_bh(&nf_conntrack_lock);
	//个人理解,这里只是一种检查,确保对应的helper存在
	if (!master_h
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值