加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

Linux内核分析 - 网络[十七]:NetFilter之连接跟踪

发布时间:2016-01-23 17:21:43 所属栏目:Linux 来源:网络整理
导读:内核版本:2.6.34 前面章节介绍过Netfilter的框架,地址见: http://blog.csdn.net/qy532846454/article/details/6605592,本章节介绍的连接跟踪就是在Netfilte
副标题[/!--empirenews.page--]

内核版本:2.6.34

前面章节介绍过Netfilter的框架,地址见: http://blog.csdn.net/qy532846454/article/details/6605592,本章节介绍的连接跟踪就是在Netfilter的框架上实现的,连 接跟踪是实现DNAT,SNAT还有有状态的防火墙的基础。它的本质就是记录一条连接,具体来说只要满足一来一回两个过程的都可 以算作连接,因此TCP是,UDP是,部分IGMP/ICMP也是,记录连接的作用需要结合它的相关应用(NAT等)来理解,不是本文的重点 ,本文主要分析连接跟踪是如何实现的。

回想Netfilter框架中的hook点(下文称为勾子),这些勾子相当于报文进出协议栈的 关口,报文会在这里被拦截,然后执行勾子结点的函数,连接跟踪利用了其中几个勾子,分别对应于报文在接收、发送和转发中 ,如下图所示:

Linux内核分析 - 网络[十七]:NetFilter之连接跟踪

连接跟踪正是在上述勾子上注册了相应函数(在nf_conntrack_l3proto_ipv4_init中被注册),勾子为ipv4_conntrack_ops, 具体如下:

static struct nf_hook_ops ipv4_conntrack_ops[] __read_mostly = {     
 {
  .hook  = ipv4_conntrack_in,     
  .owner  = THIS_MODULE,     
  .pf  = NFPROTO_IPV4,     
  .hooknum = NF_INET_PRE_ROUTING,     
  .priority = NF_IP_PRI_CONNTRACK,     
 },     
 {     
  .hook  = ipv4_conntrack_local,     
  .owner  = THIS_MODULE,     
  .pf  = NFPROTO_IPV4,     
  .hooknum = NF_INET_LOCAL_OUT,     
  .priority = NF_IP_PRI_CONNTRACK,     
 },     
 {     
  .hook  = ipv4_confirm,     
  .owner  = THIS_MODULE,     
  .pf  = NFPROTO_IPV4,     
  .hooknum = NF_INET_POST_ROUTING,     
  .priority = NF_IP_PRI_CONNTRACK_CONFIRM,     
 },     
 {     
  .hook  = ipv4_confirm,     
  .owner  = THIS_MODULE,     
  .pf  = NFPROTO_IPV4,     
  .hooknum = NF_INET_LOCAL_IN,     
  .priority = NF_IP_PRI_CONNTRACK_CONFIRM,     
 },     
};

从下面的表格中可以看得更清楚:

Linux内核分析 - 网络[十七]:NetFilter之连接跟踪

开头说过,连接跟踪的目的是记录一条连接的信息,对应的数据结构就是tuple,它分为正向(tuple)和反向(repl_tuple), 无论TCP还是UDP都是连接跟踪的目标,当A向B发送一个报文,A收到B的报文时,我们称一个连接建立,在连接跟踪中为 ESTABLISHED状态。特别要注意的是一条连接的信息对双方是相同的,无论谁是发起方,两边的连接信息都保持一致,以方向为 例,A发送报文给B,对A来说,它先发送报文,因此A->B是正向,B->A是反向;对B来说,它先收到报文,但同样A->B 是正向,B->A是反向。

弄清楚这一点后,每条连接都会有下面的信息相对应

tuple    [sip sport tip tport proto]

UDP的过程

UDP的连接跟踪的建立实际是TCP的简化版本,没有了三次握手过程,只要收到+发送完成,连 接跟踪也随之完成。

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读