亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標(biāo)題: linux-2.6.35.6 xtables&iptables&hipac [打印本頁]

作者: pywj777    時(shí)間: 2012-05-30 12:12
標(biāo)題: linux-2.6.35.6 xtables&iptables&hipac
本帖最后由 pywj777 于 2012-05-30 13:06 編輯

之前總是拜讀“獨(dú)孤九賤”兄的大作,受益匪淺,F(xiàn)也將自己的一些總結(jié)分享給大家,由于語言組織能力較差,所以多上圖,少上字。

Xtables提供的資源



struct  xt_af  xt[]結(jié)構(gòu)數(shù)組
該數(shù)組用于掛載各個(gè)協(xié)議的match和target資源。由于寫者(添加、刪除)和讀者(查找)都是在內(nèi)核空間進(jìn)程上下文執(zhí)行,所以它們只需要用xt[n].mutex信號量進(jìn)行互斥。讀者(查找)在將規(guī)則關(guān)聯(lián)上一個(gè)match或target時(shí)會增加它們所在模塊的引用計(jì)數(shù),在它釋放這個(gè)引用計(jì)數(shù)之前該模塊是不會被卸載的,所以另外一個(gè)讀者(規(guī)則匹配)在軟中斷中可以放心的使用,不需加任何鎖。


net.xt.tables[]網(wǎng)絡(luò)命名空間協(xié)議鏈表
該命名空間協(xié)議鏈表用于將不同協(xié)議的table表掛到對應(yīng)協(xié)議鏈表中。
寫者(添加、刪除)table表都在內(nèi)核空間進(jìn)程上下文執(zhí)行,又由于它需要檢查該表與注冊的target、match名字不沖突,所以他們只需要用xt[n].mutex信號。
讀者在軟中斷中通過HOOK引用這些表,所以在寫者(添加、刪除)之前一定要保證沒有讀者在操作。添加表操作一定要先通過xt_register_table()添加一個(gè)表,然后再通過xt_hook_link()使HOOK能夠引用這些表;刪除表操作一定要先通過xt_hook_unlink()去掉HOOK對表的引用,然后再通過xt_unregister_table()刪除一個(gè)表。


作者: pywj777    時(shí)間: 2012-05-30 12:26
本帖最后由 pywj777 于 2012-05-30 12:36 編輯

Iptables利用Xtable初始化filter表的結(jié)構(gòu)圖




作者: pywj777    時(shí)間: 2012-05-30 12:40
Iptables利用Xtables構(gòu)建的組織形式


作者: pywj777    時(shí)間: 2012-05-30 12:44
本帖最后由 pywj777 于 2012-05-30 12:52 編輯

Iptable下發(fā)規(guī)則的執(zhí)行流程圖



iptables內(nèi)核層與應(yīng)用層之間傳輸規(guī)則的組織形式



iptables將內(nèi)核中獲取的規(guī)則轉(zhuǎn)換為如下圖所示可管理的結(jié)構(gòu)


作者: pywj777    時(shí)間: 2012-05-30 12:56
Iptables包含以下target


Netfilter處理的返回值
NF_DROP
NF_ACCEPT
NF_STOLEN
NF_QUEUE
NF_REPEAT
NF_STOP

作者: pywj777    時(shí)間: 2012-05-30 13:03
眾所周知,iptables的一大缺點(diǎn)是線性匹配,這樣當(dāng)>1000條規(guī)則時(shí),匹配效率會明顯下降,為此,我借鑒NF-hipac的算法,將iptables轉(zhuǎn)換為樹形匹配,來加快其匹配效率,轉(zhuǎn)換后的結(jié)構(gòu)圖如下圖所示:


作者: MoWaters    時(shí)間: 2012-06-01 22:46
本帖最后由 MoWaters 于 2012-06-01 22:59 編輯

圖畫得真不錯(cuò),收藏了。



   
作者: Godbach    時(shí)間: 2012-06-05 12:44
回復(fù) 1# pywj777
感謝 LZ 分享,看到 hipac 的匯總了。
   
作者: Godbach    時(shí)間: 2012-06-05 12:51
回復(fù) 1# pywj777

LZ 能夠簡單介紹一下 xtable 和原先版本的 iptables 中主要的變化有哪些?


   
作者: pywj777    時(shí)間: 2012-06-05 16:19
本帖最后由 pywj777 于 2012-06-05 16:20 編輯

回復(fù) 9# Godbach

主要的變化就在于一個(gè)是'x'tables,一個(gè)是'ip'tables,即iptables只針對IP協(xié)議棧,而xtables是針對各種不同的協(xié)議棧,例如第一幅圖中的IPV4、IPV6、ARP、BRIDGE、DECENT等


   
作者: Godbach    時(shí)間: 2012-06-05 17:41
回復(fù) 10# pywj777
OK,明白了


   
作者: Godbach    時(shí)間: 2012-06-05 21:51
回復(fù) 6# pywj777
xt_table_info 中建立了每個(gè) CPU 都會對應(yīng)完整的規(guī)則,是不是為了加快匹配,其次,不同的 CPU 對應(yīng)的規(guī)則是不是實(shí)際上指向的同一塊內(nèi)存。


   
作者: Godbach    時(shí)間: 2012-06-05 21:57
回復(fù) 6# pywj777

對于構(gòu)建樹形規(guī)則時(shí),是每個(gè)表用一個(gè)樹,不同的鏈通過指針指向不同的地址,還是每個(gè)表下每個(gè)鏈都有一個(gè)樹?

   
作者: pywj777    時(shí)間: 2012-06-06 10:07
回復(fù) 12# Godbach

不同CPU對應(yīng)的規(guī)則是指向不同的內(nèi)存,為每個(gè) CPU 建立對應(yīng)完整的規(guī)則目的是為了做到無鎖操作,從而提高匹配效率。


   
作者: pywj777    時(shí)間: 2012-06-06 10:16
回復(fù) 13# Godbach

每個(gè)表下的每個(gè)鏈都是一顆樹,自建鏈也會形成一個(gè)單獨(dú)的樹。


   
作者: Godbach    時(shí)間: 2012-06-06 11:39
回復(fù) 14# pywj777

但是規(guī)則應(yīng)該是全局的吧。每個(gè) CPU 各 copy 一份嗎?

那修改規(guī)則的時(shí)候,怎么保證同步到各個(gè) CPU,以及修改和匹配之間是怎么實(shí)現(xiàn)同步的?

   
作者: pywj777    時(shí)間: 2012-06-11 11:41
本帖最后由 pywj777 于 2013-05-21 12:06 編輯

回復(fù) 16# Godbach

xt_table_info是全局的,每個(gè)CPU所訪問的規(guī)則集是各個(gè)CPU獨(dú)有的(各COPY一份),由xt_table_info->entries[cpu_n]指向各自私有的規(guī)則集。

規(guī)則的修改每次都是全局替換,即替換一個(gè)新構(gòu)建好的xt_table_info結(jié)構(gòu)(這個(gè)新構(gòu)建的xt_table_info已為各個(gè)CPU構(gòu)建好了規(guī)則集)。修改和匹配之間如何保證同步,參考本帖2樓第7條do_replace()函數(shù),和4樓第一個(gè)流程圖,放大一下看:wink:
   
作者: kitiz    時(shí)間: 2012-06-14 22:47
請問一下LZ,這圖是什么工具畫的,一直找不到一個(gè)好的畫圖工具,多謝了
作者: kitiz    時(shí)間: 2012-06-14 22:50
請問lz是用什么工具畫的圖,多謝了
作者: ckf513728912    時(shí)間: 2012-06-15 11:52
圖畫得不錯(cuò)   謝謝分享
作者: pywj777    時(shí)間: 2012-06-17 18:01
回復(fù) 19# kitiz

Microsoft Office Visio


   
作者: heritrix    時(shí)間: 2013-03-01 20:37
謝謝樓主分享,已經(jīng)收藏了
作者: daniel_11    時(shí)間: 2013-03-11 16:39
感謝lz分享,這真要花功夫才總結(jié)的出來,學(xué)習(xí)了~
作者: 瀚海書香    時(shí)間: 2013-03-12 12:48
這么好的帖子怎么才看到呢?罪過啊
想了半天,終于想明白了,當(dāng)時(shí)正在換工作,處在休假期
作者: 251300891    時(shí)間: 2013-03-15 16:25
回復(fù) 21# pywj777

畫得太好了


   
作者: pywj777    時(shí)間: 2013-05-20 21:53
本帖最后由 pywj777 于 2013-05-21 12:05 編輯

在使用狀態(tài)檢查和fast patch時(shí)hipac在吞吐方面沒有什么優(yōu)勢。但在新建方面還是有明顯優(yōu)勢的,當(dāng)規(guī)則達(dá)到3000條時(shí),性能可提高10倍。
作者: remaper    時(shí)間: 2013-06-26 15:11
pywj777如果你在上海我一定請你吃飯
作者: pywj777    時(shí)間: 2013-06-26 22:00
回復(fù) 27# remaper

先謝過了,去上海的話一定聯(lián)系你
   
作者: Godbach    時(shí)間: 2013-06-26 22:56
回復(fù) 27# remaper

是不是這篇帖子解答了你長久以來的困惑。

   
作者: jxth152913    時(shí)間: 2014-01-03 17:00
請問 為什么 一個(gè)讀者(規(guī)則匹配)在軟中斷中可以放心的使用,不需加任何鎖。 這個(gè)沒有看懂。
作者: gudong1920    時(shí)間: 2014-01-24 17:11
mark一下,學(xué)習(xí)了
作者: huqiong316    時(shí)間: 2015-08-26 19:39
mark一下~學(xué)習(xí)~
作者: 天空空2009    時(shí)間: 2015-11-19 14:32
多謝樓主奉獻(xiàn),受益匪淺!
作者: wangwq_1989_06_    時(shí)間: 2017-03-06 15:21
你好,你的文章太好了,話不在多在而在精,跪服的同時(shí)有個(gè)問題我懷疑下:關(guān)于iptables如何組織規(guī)則與內(nèi)核通信,個(gè)人覺得這幅圖有問題。我的理由:

(1)用戶自定義的鏈和用戶自定義鏈的規(guī)則在內(nèi)建鏈之后
(2)forward鏈之后是LOCAL_OUT
所以我覺得這張圖有問題,LOCAL_OUT沒有畫出來???
作者: wangwq_1989_06_    時(shí)間: 2017-03-06 15:23
你好,你的文章太好了,話不在多在而在精,跪服的同時(shí)有個(gè)問題我懷疑下:關(guān)于iptables如何組織規(guī)則與內(nèi)核通信,個(gè)人覺得這幅圖有問題。我的理由:

(1)用戶自定義的鏈和用戶自定義鏈的規(guī)則在內(nèi)建鏈之后
(2)forward鏈之后是LOCAL_OUT
所以我覺得這張圖有問題,LOCAL_OUT沒有畫出來,個(gè)人感覺應(yīng)該用戶自定義鏈在LOCAL_OUT之后,可是這幅圖卻在FORWARD之后




歡迎光臨 Chinaunix (http://72891.cn/) Powered by Discuz! X3.2