路由器的搜尋域是什麼意思?CoreCode2019-04-27 11:44:21

路由器的搜尋域簡稱路由域。

一個路由項對應一個路由別名(struct fib_alias),路由別名由路由資訊再加上tos,type,scope,state等資訊組成。目的地址相同的路由項的路由別名共享一個路由節點(struct fib_node),路由節點的作用就是用於管理路由別名。下面再看看路由域struct fib_zone,下面是其定義:

fz_order和fz_mask記錄的是該路由域包含的路由節點的目的地址的長度和子網掩碼,比如子網單播路由172。16。48。0的fz_order就是24,fz_mask就是255。255。255。0,所有fz_order相同的路由節點都存放在同一個路由域中,fz_hash就是用於存放路由節點的雜湊表,雜湊表的大小由fz_divisor記錄,fz_hashmask為雜湊表掩碼,總是fz_divisor-1,fz_nent記錄該域中當前含有的路由節點的數量。

fz_divisor的初始值一般總為16,當雜湊表fz_hash不夠大時(fz_nent>fz_divisor*2),需要擴大雜湊表。因為在IP協議中,目的地址的最大長度為32,所以,需要有33個路由域(0-32),33個路由域組織在一起,組成一個路由雜湊表struct fn_hash。fn_zone_list是路由域的連結串列,把fn_zones陣列中所有的路由域按目的地址從大到小組織成連結串列放在一起。當我們需要查詢一個路由節點的時候,首先根據目的地址長度Z找到路由域fn_hash->fn_zones[Z],然後再根據雜湊演算法在路由域的fz_hash中找到一個連結串列,再遍歷這個連結串列即可找到需要的路由節點。

tb_id是路由表資訊的識別符號,id為RT_TABLE_MAIN和RT_TABLE_LOCAL的兩張路由表是核心定義的,RT_TBALE_LOCAL稱為本地路由表,本地介面地址,廣播地址,已及NAT地址都放在這個表。該路由表資訊由系統自動維護,管理員不能直接修改。RT_TABLE_MAIN稱為主路由表,如果沒有指明路由所屬的表,所有的路由都預設都放在這個表裡。

tb_data即為路由雜湊表,存放著33個路由域(大部分時間,大部分路由域都是空的)。每個路由表資訊的路由雜湊表都是獨立的,互不相干的。將由路由策略來決定某次路由查詢使用那個路由表資訊的路由雜湊表。其它是路由表資訊提供的一些操作路由雜湊表的方法,包括查詢一條路由,插入,刪除,重新整理路由等。

全域性變數fib_tables是一個路由表資訊的陣列,只存在於系統支援策略路由的情況下,共有256項,所以,系統最多可以建立256張路由表。至此,路由表,路由雜湊表,路由域,路由節點,路由別名,路由資訊的概念都已介紹完畢,要讓路由表資訊能真正工作起來,還需要路由規則來幫助決定在具體情況下使用哪一張路由表。