防火牆控制了某一目標ip的那些埠可以被使用者ip訪問,然而防火牆並沒有用一條規則直接限定某一使用者ip所能訪問的目標ip及其埠,而是在配置中設定了一組訪問控制規則,這些規則中既有允許訪問的目標ip及埠範圍,又有不允許訪問的目標ip及埠範圍。就某一目標ip而言,如何才能確定使用者ip能訪問該目標ip的埠呢?解決方案其實很簡單,下面來看看具體步驟:
1.對於某一ip,假定0到65535之間的每乙個埠都不允許訪問,即可以建立乙個大小為65536的array陣列,初始時每乙個陣列元素置為0,表示防火牆預設不允許訪問該埠(注:所有埠預設不允許訪問,只有控制規則顯示說明允許時才能訪問,且按配置中的規則條目從上到下一條一條檢查訪問控制情況。如果對於某個埠,前面有一條規則是不允許,那麼就表示該埠不允許訪問,即使後面有訪問規則顯示說明允許訪問該埠,那麼該埠依然不能訪問。也就是說對於任意埠,都保持第一次匹配上的那條規則的埠訪問情況);
2.檢查當前防火牆訪問控制規則,如果針對上面ip的訪問控制規則為允許,其所允許的埠範圍為a到b(注:0 <= a <= b <= 65535),那麼檢查array陣列從下標a到下標b對應位置的元素值,對於a到b中的某一埠x,如果array[x]為0,那麼將0改成1,表示允許訪問該埠,如果array[x]為1,那麼不做處理,表示之前已經有規則允許訪問該埠,如果array[x]為-1,那麼也不做處理,表示之前已經有規則禁止訪問該埠。同樣的,如果針對上面ip的訪問控制規則為不允許,那麼對於該規則a到b中某一埠y,如果array[y]為0,那麼將0改成-1,表示不允許訪問該埠,如果array[y]為1,那麼不做處理,表示之前已經有規則允許訪問該埠,如果array[y]為-1,那麼也不做處理,表示之前已經有規則禁止訪問該埠。
3.經過上面的處理之後本來全部儲存0的array陣列,在任何乙個位置n要麼是0、要麼是1、要麼是-1,這樣一來我們就能很清晰的知道哪些埠可以訪問、哪些埠不能訪問。
埠訪問範圍解決方案其實蘊含著bitmap演算法思想,至於bitmap演算法是什麼就需要自己了解了,按理說,只要是去操作有限範圍內的資料特徵(例如上面的埠訪問重疊處理),那麼就可以借鑑bitmap演算法思想。
演算法 bitmap演算法
所謂bitmap就是用乙個bit位來標記某個元素對應的value,而key即是這個元素。由於採用bit為單位來儲存資料,因此在可以大大的節省儲存空間 32位機器上,乙個整形,比如int a 在記憶體中佔32bit,可以用對應的32個bit位來表示十進位制的0 31個數,bitmap演算法利用這種思想...
演算法 bitmap演算法
在所有具有效能優化的資料結構中,我想大家使用最多的就是hash表,是的,在具有定位查詢上具有o 1 的常量時間。但hash table需要使用巨大的記憶體空間,顯然在處理大資料時會顯得力不從心。bitmap可以有效地節省記憶體的使用,它的思想其實就是用1bit來代替乙個index 通常是乙個unsi...
bitmap演算法簡介
今天看到海量資料處理演算法 bitmap 又稱為bitset,或者bit array 有意思的演算法。c 有乙個標頭檔案是。bitmap的思想就是資料壓縮。用乙個二進位制bit 0或者1 去標記某個元素對應的value,這就是bit map啊。由於使用bit單位儲存資料,所以可大大節省記憶體空間。下...