Linux的雜湊查詢演算法

2022-08-19 08:42:09 字數 786 閱讀 2952

這是linux作業系統的經典的路由查詢演算法,直到現在還是預設的路由查詢演算法。然而它很簡單。由於它的簡單性,核心(kernel)開發組一直很推崇它,雖然它有這樣那樣的侷限性,但由於linux核心的哲學就是「夠用即可」,因為linux幾乎從來不被用於專業的核心網路路由系統,因此雜湊查詢法一直都是預設的選擇。

查詢過程:

為了實現最長字首匹配,從最長的掩碼開始匹配,每乙個掩碼都有乙個雜湊表,目的ip位址雜湊到這些雜湊表的特定的桶中,然後遍歷其衝突鍊錶得到最終結果。

注意,雜湊查詢演算法是基於掩碼的遍歷來實現嚴格的最長字首匹配的,也就是說如果一條最終將要通過預設閘道器發出的資料報,它起碼要匹配32次才能得到結果。 這種方式十分類似於傳統的netfilter的filter表的過濾方式-乙個乙個嘗試匹配,而不像hipac的過濾方式,是基於查詢的。高效能的路由器在查詢路由的時候使用的都是基於查詢型資料結構的方式,最常用的就是查詢樹了。

關於預設路由:

通過預設路由,路由表裡任何乙個位址都可以與之匹配,預設路由一般標記為0.0.0.0 /0,但是這裡的0.0.0.0 /0 不是說ip是0.0.0.0 ,而是掩碼是0(0.0.0.0),掩碼為0也對應了雜湊查詢中按掩碼順序查詢的方法,有的路由器也可以配置為default來避免誤以為ip是0.0.0.0 ,不然ip若真的是0.0.0.0 掩碼應該是/32了

查詢演算法 雜湊演算法,雜湊表查詢

那麼問題來了,如果集合s中同時存在值k 16和值k 27,我們該如何將兩個位址一樣的值存入雜湊表呢?常用的雜湊函式 處理衝突的方法 2.連位址法 雜湊表涉及的是一種對映關係,可以根據某個值查詢到關鍵字的位址,這樣的做法省去了比較的時間,優化了演算法。雜湊表是把值 關鍵字 存到跟它具有 唯一 對映的格...

演算法 查詢 雜湊表查詢

查詢除了線性表的查詢 順序 二分 分塊 樹上查詢 bst b 樹 還有一種雜湊查詢。相比於前兩種查詢,雜湊表的查詢效率驚人的高o 1 它採用的直接定址技術,基本上就是實現了精準打擊,達到一擊而中的效果。所謂的直接定址技術,說白了,就是儲存記錄時,通過雜湊函式計算出乙個雜湊位址 讀取記錄時,通過同樣的...

查詢演算法(II)雜湊查詢 雜湊表 Hash

雜湊 hash 同順序 鏈結和索引一樣,是儲存集合的又一種方法。不同的是,雜湊表 雜湊表 在元素的儲存位置和它的關鍵字之間建立了乙個對應關係。雜湊儲存的基本思想是 以每個元素的關鍵字k為自變數,通過乙個函式 稱為雜湊函式或雜湊函式 計算出函式值,把這個值 雜湊位址或雜湊位址 解釋為一塊連續儲存空間 ...