網絡中各種網絡設備對業務數據的轉發主要有二層轉發和三層轉發。二層轉發主要由交換機在同一個VLAN内實現,其轉發依據是MAC地址表。如果MAC地址表中存在目的MAC地址表項,就從對應接口發出去,否則會從所有接口都發出去尋找接收者,同時,對ARP請求等廣播幀也會從所有接口發出去。二層轉發的特點導緻可能存在環路,需要STP等協議防止二層環路。
三層轉發主要由三層交換機或路由器在不同VLAN間或不同網段間實現,其轉發依據是路由表。如果路由表中有目标網段的路由表項,就從對應接口或下一跳發出去,否則就把數據包丢棄。同時,三層轉發不會在不同網段間轉發廣播包。
那麼,是不是說三層轉發沒有環路呢?
并不是!我們在《網絡工程師(10):讓路由告訴你該去哪》一文中曾介紹了靜态路由。如果因為靜态路由配置錯誤,依然會造成環路。
如圖中,在RTA上配置靜态路由,目标網段20.0.0.0/24的下一跳為RTC,RTC上配置目标網段20.0.0.0/24的下一跳為RTB,而RTB上錯誤地配置的目标網段20.0.0.0/24的下一跳為RTA。
其實,這樣并不會有環路!不同的路由來源擁有不同的優先級。20.0.0.0/24網段是RTB的直連路由,擁有最高優先級,即使在RTB上配置了目标網段20.0.0.0/24的靜态路由,也不會選擇。
那麼,如果RTB連接PC的鍊路故障了呢?
這時,由于RTB上20.0.0.0/24的直連路由消失,所配置的靜态路由就起作用了,于是形成了環路:RTA把目的地址為20.0.0.1的數據包發給RTC,RTC發給RTB,RTB又發給RTA,RTA再發給RTC,如此循環下去!
數據包會永遠循環下去嗎?
事實上,在設計IP協議時就考慮到了這個問題。如果網絡中因為配置或其他錯誤而造成路由環路,由IP協議報文封裝中的TTL字段來解決,避免永遠循環下去。
IP封裝中的TTL字段字面意思是Time to Live包生存時間,實際上和時間沒什麼關系。路由器在轉發數據包之前,會先把TTL字段内容減去1,如果結果大于零,則正常轉發給下一跳,如果結果為零,則把數據包丢棄。
所以,三層轉發不像二層轉發,沒有專門的協議來防止路由環路。三層轉發的環路一是依靠TTL,二是依靠路由協議本身來考慮。
我們所說的路由表,通常是指IP路由表,也叫全局路由表。每台網絡設備隻有一個全局路由表,路由器轉發數據也是查找全局路由表。
但并不是說路由器隻有一個路由表,事實上,除了直連和靜态路由,每個動态路由協議都有自己的路由表,如RIP路由表、OSPF路由表、BGP路由表,等等。
所以,為了正确選擇路由,不同的路由來源擁有不同的優先級(思科叫管理距離),包括直連、靜态及各種動态路由協議。如果目标網段和掩碼都相同,會優選優先級最高的路由來源加入全局路由表;如果路由來源相同,則優選開銷最小的路由加入全局路由表;如果都相同,那麼都加入到全局路由表中,稱為多路徑等值路由或等價路由,可以實現負載分擔。
有了路由表,路由器就可以根據路由表來轉發三層數據包了。當路由器收到一個數據包,先遍曆整個全局路由表,如果沒有找到匹配項,則丢棄數據包,否則在找到的所有匹配項中選擇掩碼最長的路由表項,查看該表項的下一跳地址是否是路由器的直連路由,如果是直連,把數據包送到對應接口,封裝為幀後發給目标電腦。如果不是直連,則解析下一跳的MAC地址,封裝為幀後發給下一跳路由器。
,
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!