一。前言:
防環機制就是在這樣乙個大背景下產生的。
環路出現在網際網路的各個層面,不同環路的出現原因與解決方法也不同。通常網路環路分為第二層環路和第三層環路,所有環路的形成都是由目的路徑不明確導致混亂而造成的。二層環路主要就是交換機廣播流的惡性迴圈。
三層環路就複雜多了,通常由各種網路故障導致!!!也是本文研究的重點。筆者將三層環路分成三類:單鏈路環路、跨結點環路、區域/as間環路。
二。交換層廣播流與生成樹:
眾所周知,交換網路是乙個小型的本地接入網(lan),所以二層交換機預設允許**廣播流(路由器則預設丟棄)。除了廣播流,交換機查詢mac位址表無果時會將資料幀從除接收介面外的所有介面傳送出去。
所以最初,當三個交換機兩兩相連時,乙個資料幀會在其中無限迴圈。生成樹就是為了讓交換網路中防環而出現的。由於具體的生成樹工作原理過於複雜需另成文,在此只做介紹不做詳解。
生成樹最原始的版本是802.1d,也就是stp(spanning tree protocol),但這個版本的標準是所有vlan共用乙個生成樹,所以也叫cst(common spanning tree)思科在此基礎上增強了一下,發布了pvst+(per vlan spanning tree)。
802.1d的下乙個版本是802.1w,也就是rstp(rapid stp),但還是共用生成樹,搞不懂ieee不長點記性。於是思科又搞了一下,發布了pvrst+。
ieee又基於思科的mistp的方案,發布了802.1s(mstp),這個就比較強了,但凡是大一點的交換網路都用mstp,也是現在的主流。
三。rip的5種防環機制:
rip作為乙個古老的路由協議,雖然正逐漸被淘汰,還是有必要了解一番以理解路由協議的進化史。
rip的侷限性造致它有5種防環機制,且5種機制預設同時工作!!!
先談乙個易理解的的程式設計師邏輯,即路由器接從f0介面收到的某個路由條目a不應該從f0反發出去(水平分割),但是距離向量路由協議的路由更新要向外傳送完整的路由表,因此從f0發出之前將a路由的度量值改為15,這樣對方收到的a的度量值為16不可達(計數最大跳&毒性逆轉)。
當路由器r1檢測到某網段的網路故障(比如收到icmp報錯),它將要做兩件事,第一,告訴其他路由器:"你們無法從我這裡到達這個子網",第二,尋找其他路徑到達這個子網。此時r1將抑制定時器,即在規定時間內不接收鄰居發來的關於該子網的路由。試想若沒有抑制定時器,這時鄰居正好傳送該子網的路由,而這條路徑恰好經過r1,那麼後果將不堪設想。
在抑制時間內r1在做什麼呢?當然是等待rip網路中所有路由器都收到這條16跳的路由後更正自己的路由表,因此需要觸發更新,不必等時間到期再發路由表。此外當某介面的度量值被改動了也會觸發更新,防環原理相同。
可以看出rip的5個防環機制中,設定最大跳才是終極**,它配合抑制定時器,不僅能解決"單鏈路環路",更能防止"跨結點環路"。
四。eigrp與dual演算法:
視角:周圍可視/區域性視角。
eigrp的進步之處在於多了兩張表:鄰居表與拓撲表。
鄰居表的建立直接避免了單鏈路環路:當在收到的路由更新中看到下一跳是自己,那沒得說了,這條更新定是**於我的,拒收。
eigrp的核心演算法叫dual(瀰散更新),其中有一條公式專門用來防止跨結點環路:當鄰居通向乙個網路的報告距離(rd)比本地路由器通向同乙個目的網路的可行距離(fd)短時,即符合了可行性條件(fc),該路徑被寫進拓撲表。但這樣的演算法可想而知也是有缺陷的,即很多高開銷的可行備份路徑也會被當做"環路"而拒絕收錄。
!有乙個特例:手動彙總導致的環路。
其實彙總本身是有"缺陷"的,當路由器把彙總的主類網路由更新傳給對端時就相當於讓對端生成了一些關於那些"不存在"的子類網路由指向自己。這樣就不合理了,如果該路由器有乙個預設路由指向對端的話,環路就形成了,乙個以不存在的子網ip為目的位址的惡意資料報就會在兩個路由器之間無限迴圈,直到跳數壽命終結。
解決方法(預設開啟)是利用null0介面。本地生成的彙總路由指向這個邏輯空介面,這裡要提一下路由查詢的先後順序:收到資料報先檢視普通的單播路由條目,再檢視本地彙總路由條目,最後才看預設路由。如圖,這樣就可以識別出那些資料報是惡意資料報,並且從null0口丟棄。
五。link state路由協議與spf演算法:
!視角:全域性(整個區域)視角/上帝視角。
除了擁有鄰居表,ospf有一張很強悍的表,叫lsdb(鏈路狀態資料庫)(同is-is)。在每個ospf區域中,通過互發lsa(跨網段傳輸的鏈路通告),每個路由器都能夠獲悉所在的整個區域的拓撲和鏈路狀態。這樣一來在區域內選路就可以從全域性的視角鎖定最佳路徑,並且百分百無環路,無論是單鏈路環路還是跨結點環路都可避免,這是鏈路狀態路由協議的創新之處。
ospf區域間路由環路的避免又是通過哪種方式實現的?答案是:分層結構的拓撲實現。ospf規定所有常規區域都要鏈結到骨幹層,即使物理上與骨幹層分隔,也要有條邏輯鏈路(虛鏈路)連線到骨幹區域。這種樹形結構從根本上就摒棄了環路。因此ospf也是天然無環的。
與ospf相似的is-is,則不要求l1層必須連線到l2層,因而有兩個獨特的防環機制:第一,非l2區域的通訊都要通告l2區域**;第二,l2區域路由預設不會進入l1(除了路由洩露)。因而實現了防環。附圖:spf樹。
六。bgp的高層防環機制:
談到bgp就要有關as自治系統,bgp的防環主要分為as內防環與as間防環(可以模擬ospf的區域內和區域間)。
as間:路由更新的as-path欄位包含所經過的所有as號,當bgp路由器看到路由更新中有自己的as號就會果斷放棄這條更新(但在特殊情況下可以用命令取消這個特性)。這就是距離向量與距離向量之間的區別:距離向量路由協議(如rip)只記錄到達目的地經過多少步,而距離向量路由器則記錄了途中經過的路徑。看來學好思科還得咬文嚼字啊。
ibgp的水平分割原則是:從
ibgp
鄰居所收到的路由資訊,不會傳遞給其它的
ibgp
鄰居,但可以傳遞給
ebgp
鄰居。注意這和
rip的水平分割不大一樣。水平分割是為了防止
3個及以上的
ibgp peer
圍繞成環,造成自治系統內部的跨結點環路。
除了網路故障帶來的路由環路,網路的不合理規劃也會造成環路。比如在
bgp中如果讓
ibgp
間的中轉路徑路由器處於另乙個
as內的話就會造成環路。當然這只是其中乙個例子,意在說明人為的環路是很難避免的,但思科想的還真周到,提供了
next-hop-unchange
這條命令來處理上面那個環路。
注意,通常使用路由反射器(
rr)來解決水平分割帶來的路由不學習的問題,但搞笑之處在於,水平分割用來防環,路由反射器用來防水平分割,因而反射器又產生了環。後來
rr經過改進,增加了乙個特性叫插入簇
id與起源
id。預設情況下
rr會在路由更新中加入自己的
router-id
以及路由更新的起源路由器的
router-id
,這也是一種路徑向量的機制。
附言: 有一句古話叫"存在即合理"。路由協議中有一些機制或者說小的細節特性,雖然看似很多餘且無用,但卻始終存在著。
據我多年的學習經驗,
我想這有兩種原因:一,從直覺上感覺它"合情合理",比如
bgp宣告路由發更新時打上自己的
rid以標註起源資訊;二,它的開銷很小,比如
rr傳送更新包中攜帶乙個短訊息告訴鄰居自己是
rr,這與複雜的資料頭部和各種週期訊息比起來根本微不足道。
03 路由原理
二 路由原理 路由 routing 是指路由器從乙個介面上收到資料報,根據資料報的目的位址進行定向並 到另乙個介面的過程。路由 routing 是指分組從源到目的地時,決定端到端路徑的網路範圍的程序。以上是教科書給出的定義,所謂的路由,就是路由器對資料報從源位址到目標位址選擇路徑的過程。s 192....
1062 路由選擇
時間限制 1 s 空間限制 128000 kb 題目等級 鑽石 diamond 題解在網路通訊中,經常需要求最短路徑。但完全用最短路徑傳輸有這樣乙個問題 如果最終在兩個終端節點之間給出的最短路徑只有一條。則在該路徑中的任乙個節點或鏈路出現故障時,訊號傳輸將面臨中斷的危險。因此,對網路路由選擇作了以下...
3 路由配置
一 路由配置 path path 函式 匯入 from django.urls import path 語法 path route,views,name none 引數 1.route 字串型別,匹配的請求路徑 2.views 指定路徑所對應的檢視處理函式的名稱 3.name 為位址起別名,在模版中...