???? 在一張路由表中,當存在多個路由項可同時匹配目的IP地址時,路由查找進程會選擇掩碼最長的路由項用于轉發,即最長匹配原則。因為掩碼越長,所處的網段范圍就越小,網段的范圍越小,就越能快速的定位到PC機的具體位置,從而加快轉發效率。
例子1:在運行了RIP 的MSR 路由器上看到如下路由信息: <MSR>display ip routing-table 6.6.6.6 Routing Table: Public Summary Count: 2 Destination/Mask Proto Pre Cost? NextHop? Interface 6.6.6.0/24?????? RIP?? 100?? 1? 100.1.1.1? GE0/0 6.0.0.0/8?????? Static 60??? 0? 100.1.1.1? GE0/0 此時路由器收到一個目的地址為6.6.6.6 的數據包,那么? A? A. 該數據包將優先匹配路由表中的RIP 路由,因為其掩碼最長 B. 該數據包將優先匹配路由表中RIP 路由,因為其優先級高 C. 該數據包將優先匹配路由表中的靜態路由,因為其花費Cost 小 D. 該數據包將優先匹配路由表中的靜態路由,因為其掩碼最短 |
???? 盡管如此,路由表中路由項數量越多,所需查找及匹配的次數就越多,其轉發效率就會降低。為了實現控制平面與轉發平面完全分離,就需要系統構建一張專注于數據報文轉發的表,即FIB表。全稱為Forwarding Information Base,稱為轉發表。
???? FIB表的生成有2種方式,一種是源于路由表項,另外一種是通過ARP解析獲得。
???? 第一種方式,當開始計算路由信息的時候,因為在一個網絡拓撲結構中,可能會運行多個路由協議,而不同路由協議所計算出的路徑可能會不同。當出現這種情況時,路由器會選擇較高路由優先級的路由協議所發現的路由作為最優路由,即比較路由的優先級將其選出,再置為Active(活躍)狀態;而其他路由作為備份路由,置為Inactive(非活躍)狀態。系統會再把Active狀態的路由表項導入至FIB表中,作為系統轉發的依據。
???? 第二種方式,通過ARP解析,得到MAC地址與IP地址的映射關系,再得到本地網段內的主機路由信息,最后添加至FIB表中。
???? 在FIB表生成過程中,需要注意的一點是,FIB表與路由表是同步更新的。系統的控制平面會發現新的路由信息,根據路由信息更新到自己的路由表中,生成新的Active狀態的路由表項,再更新至FIB表。路由表屬于控制平面,FIB表屬于轉發平面,這樣便做到了控制平面與轉發平面的分離。如果原路由表中處于Active狀態的路由表項失效,系統也會刪除相關FIB表項。
???? 由于FIB表全是處于Active狀態的路由,所以FIB表項的數量遠遠小于路由表項。基于這種特性,在設計的時候,系統可以將FIB表項加載到硬件中,從而加快數據轉發速度。例如,在某些高端交換機啟動后,FIB表被系統加載到接口業務板的硬件中,數據報文再通過硬件轉發,不需要再通過CPU轉發,可以大大降低轉發時延。
???? 通過輸入"display fib"命令,即可查看到相關FIB表項。
???? Flag字段的含義:
U | 可用路由 |
G | 網關路由 |
H | 主機路由 |
B | 黑洞路由 |
?D | 動態路由 |
S | 靜態路由 |
R | 迭代路由 |
F | 快速重路由 |
????
???? 路由器常規轉發報文的流程:路由器接收到一個報文后,將它從接口存儲器拷貝至CPU中,CPU會根據報文的目的地址尋找FIB表中與之匹配的轉發項,最終確定一條最佳的路徑。與此同時,再將報文按照數據鏈路層上使用的協議進行封裝,最后,封裝后的鏈路層幀通過DMA(Direct Memory Access,直接內存訪問)拷貝至輸出隊列中進行報文轉發。這一個過程經過了2次系統總線,每一個報文都要重復這個過程。
???? 衡量路由器性能因素之一是報文的轉發效率,報文的轉發效率越高,性能就越強。所以需要再用到快速轉發表來進行轉發,快速轉發表采用高速緩存來處理報文,使用基于數據流的技術來處理。
???? 什么是基于數據流,數據流是指在計算機系統中,數據在各個組件(如程序、模塊、子系統等)之間傳輸和處理的過程。在數據流中,數據經過一系列處理后,輸出到下一個組件或者最終輸出到終端用戶。例如,訪問HTTP服務的一次操作。
???? 在計算機網絡中,一般用一個5元組來描述一個數據流,源IP地址、源端口號、目的IP地址、目的端口號、協議號。當一個數據流的第一個報文通過查找FIB表轉發后,在高速緩存中生成相應的轉發信息,該數據流后續報文的轉發就可以通過直接查找高速緩存來實現。
???? 例如,當一個主機需要訪問服務器時,主機發出的第一個報文到達路由器的接口后,路由器會查找快速轉發表實現快速轉發。但由于這個報文是第一個報文,快速轉發表中并沒有這條數據流的轉發信息高速緩存,所以系統無法進行快速轉發。便會退而求其次,將報文移交至普通的FIB表,由CPU負責在FIB表中查找相關轉發項,然后進行封裝,再從接口轉發出去。與此同時,系統記錄報文中的5元組信息,再高速緩存中會生成相應的快速轉發信息。
???? 系統會根據5元組信息生成相應的快速轉發信息緩存的同時也會記錄轉發時的封裝信息及接口信息。在當后續報文來到后,系統會查看報文中的5元組,如果命中了快速轉發緩存,則會根據緩存中的封裝信息直接進行二層數據幀的封裝。然后在中斷中直接送到出接口發送,這樣,就不需要上報CPU進行查表操作,也不需要內存訪問操作,更不用占用系統總線資源。
???? 快速轉發技術就在很大程度上縮減了IP報文的排隊流程,也減少了報文的轉發時間。
【本文章技術支持:武漢科云信息技術有限公司】