路由是指路由器從一個介面上收到資料包,根據資料包的目的地址進行定向并轉發到另一個介面的程序,
從下面的動圖可以明顯看出,進行從源到目標的資料管理不是一件容易的事情,

讓我們試著通過一個類比來理解路由,想象一個場景,你下班后正準備從公司開車回家,此時路上塞滿了車輛,你將在手機地圖上查找道路和交通狀況,根據路況,你將選擇最通暢的那條路回家,

類似地,在路由中,有關資料包移動的決策是根據網路的狀態做出的,路由器負責做出這些邏輯資料決策,
設定路由器的主要目的是找到資料包從源到目的地的最有效路徑,使用非常復雜的演算法,路由器決定當前資料包必須通過哪個路由器或設備發送,重復此程序,直到資料包最終到達目的地,
路由可以分為兩類:靜態路由和動態路由,在靜態路由中,所有路由都是在一個路由器中手動設定的,因此,如果網路有任何變化,路由也不會有任何變化,除非有人手動更正它,
在動態路由中,路由是由軟體根據網路的當前狀態來設定的,
網路變化,如鏈路故障、流量變化等,將在每一個離散時間步更新,根據這些資訊,將在每個時間步長確定新路線,動態路由優于靜態路由,因為路由器會根據網路中的變化進行實時更新,
下面介紹一下最流行的動態路由演算法之一,鏈接狀態演算法,
鏈路狀態演算法分為 Reliable Flooding和Dijkstra最短路徑演算法,
這個演算法是由著名的荷蘭計算機科學家Edsger Wybe Dijkstra(1930-2002)在1956年開發的,下面的網路中標記出了每個節點之間的成本,挑戰在于找出從一個節點到另一個節點的最短路徑,Dijkstra演算法生成一個表作為它的輸出,利用這個表我們可以確定網路中的最短路徑,

這個表是為頂點A生成的,使用這個表,你可以預測到任何其他點的最短路徑,如果你想要到點I的最短路徑,只要檢查之前的頂點即可,從這個頂點開始,檢查它之前的頂點,以此類推,直到到達點A,這個表是使用迭代方法生成的,其中最短距離的初始值為無窮大,
下面的動圖簡單演示了這個程序,


現在我們再來看鏈路狀態演算法的第一部分,Reliable Flooding,
您可能已經注意到,為了完美地執行Dijkstra演算法,每個路由器應該具有整個拓撲的資訊,這是鏈路狀態路由的第一步,路由器的鄰域資訊稱為它的鏈路狀態,這些資訊可以是相鄰路由器的IP地址、相鄰鏈路的成本等,包含此鄰域資訊的小資料包稱為鏈路狀態資料包,我們應該準確地用拓撲中所有其他路由器的鏈接狀態填充每個路由器,

在網路中,最初每個路由器都知道自己的鏈路狀態,對于下面的小網路,A將它的鏈路狀態包傳遞給它的鄰居,B將這個包傳遞給它的鄰居,以此類推,這樣,所有節點都將擁有拓撲的完整鏈接狀態資訊,利用這個資料包資訊,所有節點都創建或更新一個路由表,并應用Dijkstra的最短路徑演算法來發送資訊包,然而,Flooding并不是那么簡單,

考慮一個場景,其中三個節點A、B和C相互連接,節點A向B和C發送鏈路狀態資訊,類似地,C將資訊發送給B,B再次將資訊發送給C,這個程序在一個回圈中繼續,這個問題稱為回圈,

因此,在理想的情況下,你希望節點只接收此資訊一次,
那么如何克服回圈問題呢?
每個包被分配一個唯一的ID,當B從A和C收到這個唯一ID的資料包時,它不發送給C,

Flooding操作后,每個節點獨立運行Dijkstra最短路徑演算法,以確定從自身到網路中其他節點的最短路徑,我們所看到的演算法是在網路協議的幫助下實作的,
將Flooding操作應用到整個全球網路幾乎是不可能完成的任務,
鏈路狀態路由演算法的協議稱為OSPF,
在OSPF中,整個網路被分成幾個區域區域,還創建了一個主干區域,它共享來自本地區域的至少一個路由器,這樣就創建了一些邊界路由器,你可以看到所有的本地區域都通過這些邊界路由器連接到主干區域,在OSPF中,Flooding操作發生在區域區域,而不是全域,

如果一個區域區域的資料包需要傳送到另一個區域區域,它們必須經過主干區域,比如資料包從區域二流向區域三,它們必須通過主干區域,而不是直接通過,這種型別的結構通過減少路由表的大小來降低操作的復雜性,還有助于提高網路的可伸縮性,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/302437.html
標籤:其他
上一篇:XSS、CSRF、SSRF
下一篇:攻防世界新手WEB
