路由協議與架構/組播路由
組播是將相同資訊傳輸給多個終端使用者的能力,無需強制單獨定址後者,因此無需為每個使用者複製要傳播的資訊。
組播路由負責決定和傳播在網路上透過多個互連組播路由器(mrouter)在區域網之間轉發組播資料包所需的資訊
- 確定特定區域網段是否存在接收者:如果不存在接收者,則沒有必要將這些資料包轉發到區域網→沒有接收者的網路將從樹中切斷(修剪);
- 在整個 IP 網路上傳播接收者的存在和位置:組播路由應跟蹤各種接收者的位置,建立一個稱為分發樹的“生成樹”,以便最大程度地減少成本並將資料包傳遞給每個人;
- 傳輸和轉發資料:傳送方使用特定組播目標地址生成資料包,組播路由器沿分發樹將它們轉發到接收者。
組播路由演算法使用兩種型別的分發樹
- 源特定樹(RPB、TRPB、RPM、鏈路狀態):每個傳送方都有一個樹→路徑是最優的,但更新更復雜;
- 共享樹(CBT):每個組播組都有一個樹,對所有傳送方有效→更新更簡單,但路徑不是最優的。
- 組播路由演算法
當路由器收到組播資料包時,它會將其傳送到所有其他介面,前提是從其到達的介面位於路由器與源之間最短路徑上。
- 問題
- 流量:它使網路的負載超出可接受範圍
- 沒有路由樹:如果連線到區域網的兩個路由器與源之間的最小距離相同,則在區域網上,同一個資料包的多個副本可以傳遞;
- 沒有修剪:資料包始終分佈在所有鏈路上,而不考慮可能沒有監聽器的事實;
- 對稱網路:它考慮了從路由器到源的反向路徑的成本,由於存在單向鏈路,該成本可能與從源到路由器的路徑的成本不同。
建立了基於源(根節點)的分發生成樹,資料包沿著該樹的分支到達所有目標
- 父介面:從上層接收資料包的與源之間的最小距離的介面;
- 子介面:路由器的其他介面,資料包被髮送到這些介面以到達子樹(可能接收到的資料包總是被丟棄)。
在區域網上,同一個資料包的單個副本傳遞:在擁有區域網上子介面的路由器中,與源之間的距離最短的路由器被選為該鏈路的指定路由器(如果成本相等,則使用 IP 地址最低的介面)。
- 問題
- 流量:它使網路的負載超出可接受範圍
- 沒有修剪:資料包始終分佈在所有鏈路上,而不考慮可能沒有監聽器的事實;
- 對稱網路:它考慮了從路由器到源的反向路徑的成本,由於存在單向鏈路,該成本可能與從源到路由器的路徑的成本不同。
感興趣的主機發送成員資格報告以訂閱組播組→路由器將僅向感興趣的主機發送組播資料包,並從樹中刪除沒有收到成員資格報告的分支(修剪)。
不幸的是,分發樹除了取決於源,還取決於組播組,導致報告頻寬和路由器記憶體需求按組的總數乘以可能的源的總數的順序→為了減少頻寬和記憶體需求,僅刪除沒有監聽器的葉區域網:葉區域網是沒有其他路由器用於到達組播源的網路。
如何確定某個區域網是否是葉區域網?在帶有中毒反向的分割視野中,透過傳送公告的鏈路到達的目標被設定為距離等於無窮大:如果至少一個下游路由器以無窮大的距離傳播與相關源相關的條目,則該路由器正在使用該鏈路作為到達源的最短路徑→該鏈路不是葉,然後可能存在具有監聽器的更下游葉區域網。
- 問題
無法執行整個子樹的修剪,而只能刪除葉區域網→無用的流量在樹中的內部節點上傳輸。
可以執行整個子樹的修剪
- 源傳送的第一個資料包根據 TRPB 演算法進行傳播;
- 如果第一個資料包到達僅連線到沒有該組監聽器的葉區域網的路由器,則該路由器會向其父路由器傳送非成員資格報告(NMR)訊息;
- 如果父路由器從其所有子節點收到 NMR 訊息,則它也會向其父節點生成 NMR 訊息。
NMR 訊息的有效性有限:當超時到期時,會再次採用 TRPB 演算法。當在修剪的分支中添加了該組的監聽器時,路由器會向其父節點發送成員資格報告訊息,以在不等待超時的情況下快速啟用樹的分支。
- 問題
- 週期性廣播風暴:它們是由於每次超時到期時 TRPB 演算法引起的;
- 可擴充套件性:它至關重要,因為每個路由器都應為每個(源、組)對保留大量資訊。
由於類似 LS 的(單播)路由協議構建了網路的完整地圖,因此每個路由器都能夠計算從每個源到每個潛在接收者的分發樹。
“泛洪和修剪”不再需要,但每個路由器都能夠自主地確定它是否在分發樹上
- 在沒有監聽器的葉區域網上,主機會傳達對該組的興趣;
- 連線的路由器會泛洪地傳送一個 LS 資料包,該資料包宣佈存在具有監聽器的區域網及其在網路中的位置;
- 網路中的其他節點會儲存 LS 資料包,並依次將其泛洪傳播到整個網路;
- 當第一個傳輸資料包到達路由器時,在轉發資料包之前,需要計算最短路徑樹以確定資料包是否沿著分發樹,如果是,則需要確定資料包應該在哪些鏈路上轉發。
- 對於後續的資料包,不再需要進行此計算,因為資訊將儲存在快取中。
- 問題
- 轉發第一個資料包可能需要相當長的時間:每個路由器都需要為(源,組)對計算最短路徑樹。
- 記憶體資源:每個源都有指向每個目的地的不同樹,這意味著路由表中存在每個活躍的(源,組)對的條目。
- CPU 資源:執行 Dijkstra 演算法來計算路由樹對於路由器來說是一個沉重的負擔。
多播分發樹對於整個多播組來說是唯一的,並且獨立於源(共享樹)。核心路由器是分發樹中的主要路由器。
- 樹的構建
- 主機通知其邊緣路由器(葉子路由器)它希望加入多播組(作為接收者和傳送者)。
- 邊緣路由器向核心路由器傳送加入請求訊息。
- 接收加入請求訊息的中間路由器將訊息到達的介面標記為用於轉發該組多播資料包的介面之一。
- 當核心路由器接收到加入請求訊息時,它也會將該介面標記為轉發介面,並停止訊號。
如果訊息到達一個已經屬於樹的路由器,則訊號會在到達核心路由器之前停止,並且一條新分支將新增到之前的樹中。
- 資料轉發
- 組成員只需以多播方式傳送資料包。
- 資料包首先沿著從源到核心路由器的分支轉發,然後沿著從核心路由器到其他組成員的分支轉發:每個接收資料包的路由器(包括核心路由器)都會將其傳送到屬於該多播組的所有介面上(除了資料包到達的介面),這些介面在樹構建時定義。
- 優點
- 可擴充套件性:路由器中的狀態資訊很少。
- 缺點
- 使用“硬狀態”:核心路由器是固定的,並且沒有傳送關於多播組狀態的定期重新整理訊息,因此不適合高度可變的情況。
- 核心路由器是單點故障(儘管可以選擇另一個路由器)。
- 核心路由器的位置會嚴重影響演算法效能:核心路由器可能會成為瓶頸,因為所有流量都會透過它。
- 路徑沒有最佳化:分發樹不是基於源的位置構建的,而是所有組成員都可以作為源。
域間路由需要層次化演算法:傳統演算法的複雜性(以及需要維護的狀態資訊)無法擴充套件到整個網際網路。
一般來說,路由策略會發揮作用,而“主機”會被“域”所取代。
- 非層次化路由:主機 X 想要接收組 A,B,C。
- 層次化路由:域 Y 想要接收組 A,B,C。