ip_conntrack内置于Linux协议栈的Netfilter框架,其实现比较复杂,然而其逻辑却很简单。ip_conntrack追踪每一个流,一个流由五元组来定义,五元组这个网络基本术语就不解释了。因此ip_conntrack必然能对“哪里是一个流的开始”做出判断,虽然这种判断不总是精确的,详见《linux之ip_conntrack容易混淆的问题点滴》。
  ip_conntrack会为每一个到来的包绑定一个流,如果找不到遵照五元组可以绑定的流,则会认为这是个流头,那么就会根据该包所携带的五元组信息创建一个新的流,整个场景可以由下面的流程图展示出来:

有了一个基本的认识,再遇到问题的时候就可以用知道的知识来解决了,比如《iptables和策略路由实现×××感兴趣流的截获》一文中的问题,要截获一个特定的流,然而由于拓扑复杂,还要支持任意点到任意点的互通,仅仅根据IP层的信息就很难分辨出一个双向的数据流是由哪里发起的,因此就必然要使用ip_conntrack。ip_conntrack有一个match,那就是ctdir,它可以分辨出方向信息,然而它是如何做到的呢?通过上图就可以看出,ip_conntrack保存了一个哈希表,其中的表项内容就是一个五元组,然而两个方向的五元组信息是分开存放的,这就便于根据单独的五元组进行查找,虽然它们分开存放,属于同一个流的双向两个五元组又由同一个nf_conn结构(不同内核版本名字可能不同)统一了起来。如此一来就很容易辨别方向了。流量截获的mangle规则如下图所示:

以下是策略路由规则:

上述的流量截获方法其实就是使用ip_conntrack机制为IP数据报增加了方向的特征,然后你可以很方便的根据方向信息区分不同的流量,最终使用策略路由将数据包导向特定的目的地。
        ip_conntrack虽然功能强大,然而却也带来不少争议,幸运的是关于这些争议的不好的方面都是有解决办法的。

转载于:https://blog.51cto.com/dog250/1269001

Linux的ip_conntrack半景相关推荐

  1. linux ip_conntrack_max,解?Linux NAT ip_conntrack: table full的方法

    解?Linux NAT ip_conntrack: table full的方法 发布时间:2007-09-07 00:28:48来源:红联作者:DominSer 原本Linux NAT用得好好的,没想 ...

  2. 如何扩展Linux的ip_conntrack

    Linux中有一个基于Netfilter的连接跟踪机制,即ip_conntrack,每一个conntrack表示的就是一个流,该流里面保存了大量的信息字段,这些字段本地有效,指导着数据包的转发策略,但 ...

  3. linux mysql主从半同步_centos下安装mysql主从架构(半同步/多实例)

    centos下安装mysql主从架构(半同步/多实例) [toc] 简介 本教程会进行mysql一机多实例的安装.mysql主从同步配置.半同步配置 环境 OS: CentOS Linux relea ...

  4. linux服务器 版本 比例,Linux比例近半 服务器操作系统混战开始

    一项为期半年的虚拟化调查表明,企业普遍存在多种服务器操作系统混用的情况:受IT投资环境的影响,IT经理们现在更加重视服务器资源利用率. 据了解,根据不同应用的特点,大多数企业都在数据中心中同时使用了多 ...

  5. Linux系统mysql半同步复制

    接上一博客(主从复制)在同一操作环境下 在主master: mysql -uroot -pQwer+1234df mysql> install plugin rpl_semi_sync_mast ...

  6. Linux的NAT如何处理ICMP这类带外信息

    清远鸡,不好吃.         关于Linux的nf_conntrack的详细细节,我不再赘述,由于我之前写的文章几乎没有编排目录,我也只能通过谷歌baidu搜索几篇相关列如下,以后我也会注意自己文 ...

  7. Linux Bridge的IP NAT细节探析-填补又一坑的过程

    前序 近日温州皮鞋厂老板正在忙着学习Linux Bridge以及诸多虚拟网卡相关的东西,老湿给了一些指导,但最根本的还要靠温州老板自己.就好像有仙灵在聆听心声,我正因为温州老板的缘故一而再再而三地怀念 ...

  8. linux 增加 ip_conntrack_max 造成 内核内存问题

    1.由ip_conntrack引出的Linux内存映射 有很多文章在讨论关于ip_conntrack表爆满之后丢弃数据包的问题,对此研究深入一些的知道Linux有个内核参数ip_conntrack_m ...

  9. 开发日记-20190615 关键词 读书笔记《鸟哥的Linux私房菜-基础学习篇》

    Preface 我从来没有像今天一样对于Linux系统有着半步踏入大门的感觉. 阅读的进度已经到达了17.5章,对于Linux的理解也在逐渐深入,现在我真的感觉,我以前读的书到底都在读些什么,未免也太 ...

  10. Linux HOOK

    0 - 前言 1 - 绪论 2 - 介绍 2.1 - 什么是中断(interrupt)? 2.2 - 中断和异常(exception) 2.3 - 中断向量 2.4 - 什么是IDT? 3 - 异常 ...

最新文章

  1. 七招制胜ASP.NET应用程序开发
  2. Qt元对象QMetaObject的indexOfSlot等函数获取类方法注意问题
  3. select查询语句执行顺序
  4. 计算机程序设计艺术+第3卷:排序与查找(第二版)pdf
  5. python3 gui协程_Python3进阶-协程
  6. Linux下如何查看JDK安装路径
  7. VC++6.0安装番茄助手Visual Assist X和VC6LineNumberAddin的方法
  8. 1000套精选微信小程序源码
  9. php js轮播图片代码,html中用JS实现图片轮播的实例代码
  10. 信息系统的风险评估过程与评估方法
  11. ILSVRC2015-VID数据集结构一览图
  12. 美爆!《自然》公布2018年19张最震撼的科学图片
  13. 【7gyy】高手分享辨别电脑病毒技巧
  14. java 基础运算_Java 基础 运算符
  15. 微信小程序开发者问题集锦
  16. 总成绩和平均分计算------C语言
  17. ebay的api的开发技术笔记
  18. Python0基础(上)——期末不挂科
  19. DELPHI BULK INSERT
  20. plsql相同变量高亮显示

热门文章

  1. paip.AJAX回调函数不起作用的解决
  2. 《长安十二时辰》带来的启示:行走江湖,数据泄露怎能不防?
  3. Rust:Programming Rust:所有权
  4. 新型肺炎数据,可以用Excel绘制成3维地图
  5. 【扩频通信】基于matlab扩频通信系统仿真【含Matlab源码 968期】
  6. 【图像处理】基于matlab分形插值算法调换图片【含Matlab源码 197期】
  7. python爬虫下一页_Python爬虫怎么获取下一页的URL和网页内容?
  8. 使用nginx负载均衡的webservice wsdl访问不到_Nginx 反向代理、负载均衡图文教程,写得太好了!...
  9. 优先体验重播matlab_如何为深度Q网络实施优先体验重播
  10. tplink连接服务器失败_TPLINK无线路由WDS(桥接)设置方法图解教程 距离远增强wifi信号...