對數據的轉發操作
路由器轉發IP報文的依據是路由表,通過匹配路由表裡的路由項來實現對IP報文的轉發。
如圖1所示,當路由器收到一個IP報文的時候,將報文中的目的IP地址提取出來,然後與路由表中路由表項包含的目的地址進行比較。如果與某路由項中的目的地址相同,則認為與此路由項匹配;如果沒有路由項能夠匹配,則丟棄該IP報文。
圖1 路由器多跳轉發流程圖
IP報文中的目的IP地址往往是主機地址,而路由表中的目的地址往往為網絡地址,怎麼讓二者匹配呢?這裡面有個底層的操作:首先將IP報文中的目的地址和路由表項中的子網掩碼進行"邏輯與"操作,得到一個網絡地址,然後拿此網絡地址與路由項中的網絡地址做比較,如果一致就認為匹配,否則認為不匹配。
如果路由項匹配,則路由器查看所匹配的路由項的下一跳地址是否在直連的鏈路上。如果在直連的鏈路上,則根據此下一跳轉發;如果不在直連的鏈路上,則需要在路由表中再次查找此下一跳地址所匹配的路由項。
確定了下一跳地址後,路由器將此報文送往對應的接口,接口進行相應的地址解析,解析出對應的鏈路層地址後,對IP報文進行數據封裝並轉發。
1. 路由最長匹配原則
當路由表中存在多個路由項可以同時匹配目的IP地址時,路由查找進程會選擇其中掩碼最長的路由項進行轉發,掩碼越長表明其代表的網絡范圍越小,匹配的程度就越精確。這就是所謂的最長匹配原則。
如圖2所示,路由器接收到目的地址為30.0.0.1的IP報文後,經查找整個路由表,發現與路由項30.0.0.0/24和30.0.0.0/8都能匹配。但根據最長匹配的原則,路由器會選擇路由項30.0.0.0/24,根據該路由項轉發數據包。
圖2 最長匹配原則
由以上的過程可知,路由表中路由項數量越多,所需查找及匹配的次數就越多,所以很多路由器都會有相應的算法來優化查找速度,加快轉發。
2. 路由迭代查找
如果所匹配的路由項的下一跳地址不在直連鏈路上,路由器還需要對路由表進行迭代查找,找出最終的下一跳。路由迭代的過程就是通過路由的下一跳信息來找到直連出接口的過程。
如圖3所示,路由器接收到目的地址為50.0.0.2的報文後,經查找路由表,發現與路由表中的路由項50.0.0.0/24匹配,但此路由項的下一跳40.0.0.2並不在此路由器的直連鏈路上,所以路由器還需要在路由表中以40.0.0.2為目的地址查找下一跳;經查找,到達40.0.0.2的下一跳是20.0.0.2,此地址在該路由器的直連鏈路上,則路由器將按照該路由項轉發數據包。
圖3 路由迭代查找
在眾多協議中:對於BGP路由(直連EBGP路由除外)、靜態路由(配置了下一跳)以及多跳RIP路由而言,其所攜帶的下一跳信息可能並不是直接可達,從指導轉發的角度而言,它需要通過路由迭代找到到達下一跳的直連出接口。而對於OSPF和IS-IS等鏈路狀態路由協議而言,其下一跳是直接在路由計算的時候得到,因此不需要進行路由迭代。
3. 缺省路由匹配
如果在路由表中沒有路由項能夠匹配IP報文的目的IP地址,則丟棄該IP報文。但是如果在路由表中有缺省路由存在,則路由器將按照缺省路由來轉發IP報文。缺省路由又稱為默認路由,其目的地址和子網掩碼均為0.0.0.0。
如圖4所示,路由器收到目的地址為30.0.0.2的IP報文後,查找路由表,發現沒有子網或主機路由匹配此地址,所以按照缺省路由轉發。
圖4 缺省路由轉發
因0.0.0.0與任何IP地址"邏輯與"得到的結果均為0.0.0.0,所以缺省路由能匹配所有的IP地址,但因為它的掩碼長度最短(為0),根據路由的最長匹配原則,只有在沒有其他任何路由匹配IP報文的情況下,才會按照缺省路由轉發。
缺省路由可以通過手工配置得到,也可以通過某些路由協議(如OSPF的STUB區域和NSSA區域)動態生成。缺省路由可以減少路由表的規模,從某種程度上講可以提高路由查找的速度。在因特網中,大約99%的路由器上都會存在一條缺省路由。