為什麼X86防火牆小包效能不足的論述

2021-06-02 20:20:22 字數 2103 閱讀 5925

目前,很多x86的防火牆廠商都宣稱,64bytes小包線速**,94%……,呵呵,讓我們來看看kola關於這個的經典論述《部份地方稍有修改》:

一. 線速

線速**是對乙個網路中轉裝置的理想要求。但平時大多數人都關注著裝置的bps(bitsper second,每秒資料的位數),很少人會想到fps(frame per second,每秒資料的幀數)實際上更考驗裝置的**能力。

簡單的說,bps是指每秒鐘有多少位元組的資料經過,fps是每秒鐘有多少個資料報經過。

以10mb的網路來說,線速時bps為10m,fps最大值為14880。

那麼這個14880是怎麼計算出來的呢?

首先我們要知道幾個規定:

1. 乙太網內最小的資料報的大小為64位元組,它包括4位元組的crc,2位元組的乙太網型別(或長度),6位元組的源mac位址,6位元組的目的mac位址以及46位元組的負荷.

2. 乙太網幀與幀之間至少要有96位(12位元組)的幀間隙(ifp,inter frame gap)以確保區分兩個資料報。

3. 每個資料幀開始之間必須要有8位元組的mac位址前導位(mac preamble)以確保傳送方接收方同步資料位。

因此,乙太網內最小的資料報實際上是64+12+8=84位元組=672位。

於是,10m網路環境下fps的最大值就是

10m位每秒 / 672 位每幀 = 14480 幀每秒。

同理,我們可以算出10m網路環境下fps的最大值為

10m位每秒 / ( ( 1518+12+8 ) * 8 ) 位每幀 = 812 幀每秒,

而100m網路環境下這兩個值分別為148809和8127。

二. 處理能力

我們已經知道了線速情況下最大的fps值,現在我們看看要達到線速所需要的處理能力。

假設市面上某防火牆的是x86架構的cii 900mhz 的cpu,即每秒鐘可以分成900m個時鐘週期。於是,在100m的網路環境下,處理乙個資料幀所允許的最大時鐘週期為:900m 時鐘週期每秒 / 148809 幀每秒 = 6048 時鐘週期每幀也就是說,要達到線速**,900mhz的cpu平均要在6048個時鐘週期內完成對乙個資料報的處理。這只是理想情況,基於x86架構的系統裡cpu還要負責各類中斷(如系統時鐘)的處理,次中斷時都要儲存當前的執行狀態,切換到中斷處理程式,等中斷處理完後,再恢復當前狀態,切換回原來的處理流程。光是這個切換過程至少都要費上500個時鐘週期,還不包括中斷處理程式所用的時鐘週期。好在這類中斷還」不算「頻繁,扣除系統這部分開銷後,真正分攤到每個資料報的處理時間平均大約還有5500個時鐘週期。雖然intel p3以上級的cpu如cii在設計指令集時已經將大量常用的指令(如兩個暫存器相加/減)優化到可以在乙個時鐘週期內完成,但做為防火牆,更常用的是讀/寫記憶體資料(比如要比較源位址,計算ip的校驗和等)這類多時鐘週期的指令,所以5500個時鐘週期內大約只能執行2000條指令。

對乙個資料報的處理,從為這個資料報分配記憶體起,依次要檢查以太網路協議(如果是rfc1042格式的資料報還要跳過llc頭找真正的以太網路協議),檢查ip頭、校驗和(如果是tcp/udp協議還要計算對應的校驗和),dos防禦,狀態檢測,nat規則,安全/統計規則,更新arp/路由表,選擇**網絡卡,直到最終把這個資料報新增到傳送佇列中才算完成。你認為2000條x86的指令能完成這一切嗎?

三. 現實資料

2000條指令看起來很多,實際上並不多,舉個例子,要完成最簡單的 a = a + b 這個算式最優化的指令也要用上兩條:

mov eax, [val_b]

add [val_a], eax

未優化的會用上四條:

mov eax, [val_a]

mov ebx, [val_b]

add eax, ebx

mov [val_a], eax

目前的防火牆的開發大多是在unix/linux上完成的,以gcc編譯器為例,它的優化效果比商業的編譯器如vc/bc差了大概20%,也就是說同一段c**,用商業編譯器能編譯成100條指令的話,gcc最好的情況下只能編譯成120條指令。實際上,在沒有任何包過濾規則或其它配置的情況下,完整的處理乙個資料報需要大約14000條指令。

所以,根據上面的計算,目前許多x86架構防火牆(piii 800)在100m網路環境下的結果是64byte的情況下達到42%的線速**能力,即62000fps的處理能力。至於100%,95%,90%以上……

為什麼需要防火牆?

1.所謂的防火牆是一種位於內部與外部網路之間的安全防護系統,其次依照特定的規則允許或限制傳輸的資料通過,來確保內部網路不受遭受惡意攻擊。2.軟體防火牆安裝在電腦作業系統內的防護程式,而硬體防火牆指的是採用狀態檢測機制,整合vpn,支援vpn,支援橋 路由 nat等工作模式的作用在2 4層訪問控制裝置...

為什麼32位系統又叫x86系統呢?

網路資料 x86指的是一種cpu的架構 因為intel的8086,286,386 586而得名 amd開發的大部分cpu也是基於x86架構的 x86架構的特點是cpu的暫存器是32位的,因此也叫32位cpu 基於32位cpu開發的作業系統就叫32位作業系統,因為目前x86架構在32位cpu的知名度,...

為什麼基於x86的硬體是物聯網邊緣計算的關鍵要素?

雖然物聯網在全球範圍內實現跨越式發展,但基於arm處理器的裝置似乎已成為中心舞台,主要是因為它們面向移動裝置 由於其低功耗和低成本 適用於物聯網裝置為一些基本應用而構建,這使得它們更為普及。他們將資料直接傳送到雲端,例如溫度或濕度感測器,能源監控等等。然而,隨著時間的推移,出現了其他型別的物聯網架構...