PIM 協定的工作原理

PIM協定是網路中路由器之間傳輸多播的一組協定。 鄰居關係的建立方式與動態路由協定的情況相同。 PIMv2 每 30 秒向保留的多播位址 224.0.0.13(所有 PIM 路由器)發送 Hello 訊息。 訊息中包含 Hold Timer - 通常等於 3.5*Hello Timer,即預設 105 秒。
PIM 協定的工作原理
PIM 使用兩種主要操作模式 - 密集模式和稀疏模式。 讓我們從密集模式開始。
基於來源的分發樹。
當不同組播組的用戶端數量較多時,建議使用密集模式。 當路由器收到組播流量時,它所做的第一件事就是檢查 RPF 規則。 RPF - 此規則用於透過單播路由表檢查多重播送來源。 根據單播路由表的版本,流量必須到達該主機隱藏的介面。 這種機制解決了組播傳輸過程中出現環路的問題。
PIM 協定的工作原理
R3 將從多播訊息中識別多播來源(來源 IP),並使用其單播表檢查來自 R1 和 R2 的兩個串流。 來自表(R1 到 R3)指向的介面的流將進一步傳輸,而來自 R2 的流將被丟棄,因為為了到達組播來源,您需要透過 S0/1 發送資料包。
問題是,如果您有兩個具有相同度量的等效路由,會發生什麼情況? 此時,路由器將從這些路由中選擇下一跳。 誰的IP位址高誰就獲勝。 如果需要變更此行為,可以使用 ECMP。 更多細節 這裡.
檢查 RPF 規則後,路由器將向其所有 PIM 鄰居發送多播封包,除了收到封包的鄰居之外。 其他 PIM 路由器重複此程序。 群播資料包從來源到最終接收者所採取的路徑形成一棵樹,稱為基於來源的分發樹、最短路徑樹(SPT)、來源樹。 三個不同的名字,任選其一。
如何解決有些路由器沒有放棄某個組播流,沒有人發給他,而是上游路由器發給他的問題。 Prune機制就是為此發明的。
修剪訊息。
例如,R2 將繼續向 R3 發送多播,儘管 R3 根據 RPF 規則將其丟棄。 為什麼要加載頻道? R3 發送 PIM 修剪訊息,R2 在收到此訊息後,將從該流的傳出介面清單(應發送此流量的介面清單)中刪除介面 S0/1。

以下是 PIM Prune 訊息的更正式定義:
PIM Prune 訊息由一個路由器傳送到第二路由器,以使第二路由器刪除從特定(S,G)SPT 接收到 Prune 的連結。

R2收到剪枝訊息後,將剪枝定時器設定為3分鐘。 三分鐘後,它將再次開始發送流量,直到收到另一個 Prune 訊息。 這是 PIMv1 中的內容。
在 PIMv2 中新增了狀態刷新計時器(預設為 60 秒)。 一旦從 R3 發送了 Prune 訊息,該計時器就會在 R3 上啟動。 該計時器到期後,R3 將發送狀態刷新訊息,該訊息將重置 R3 上該群組的 2 分鐘修剪計時器。
發送 Prune 訊息的原因:

  • 當組播封包未通過RPF檢查時。
  • 當沒有本地連線的用戶端請求多播群組(IGMP 加入)且沒有可以向其發送多播流量的 PIM 鄰居(非修剪介面)時。

嫁接訊息。
讓我們假設 R3 不需要來自 R2 的流量,發送 Prune 並接收來自 R1 的多重播放。 但突然間,R1-R3 之間的頻道斷開,R3 不再進行組播。 您可以等待 3 分鐘,直到 R2 上的修剪計時器到期。 3分鐘是一個漫長的等待,為了不等待,你需要發送一條訊息,立即使R0的這個S1/2介面脫離剪枝狀態。 該訊息將是移植訊息。 R2收到Graft訊息後,會回覆Graft-ACK。
修剪覆蓋。
PIM 協定的工作原理
讓我們來看看這張圖。 R1 將多播廣播到具有兩個路由器的網段。 R3 接收並廣播流量,R2 接收,但沒有人向其廣播流量。 它會向該段落中的 R1 發送修剪訊息。 R1應該從清單中刪除Fa0/0並停止該段的廣播,但是R3會發生什麼情況呢? 而R3在同一網段,也收到了Prune發來的這則訊息,明白了狀況的慘烈。 R1在停止廣播之前,設定了一個3秒的計時器,3秒後將停止廣播。 3 秒 - 這正是 R3 所擁有的時間,以免失去其多播。 因此,R3盡快發送該組的Pim Join訊息,R1不再考慮停止廣播。 關於下面的加入訊息。
斷言訊息。
PIM 協定的工作原理
讓我們想像一下這種情況:兩台路由器同時向一個網路廣播。 它們從來源接收相同的串流,並將其廣播到介面 e0 後面的相同網路。 因此,他們需要確定誰將成為該網路的唯一廣播商。 斷言訊息用於此目的。 當 R2 和 R3 偵測到多重播送流量重複時,即 R2 和 R3 收到它們自己廣播的多重播放時,路由器就會知道這裡出了問題。 在這種情況下,路由器發送斷言訊息,其中包括管理距離和到達組播來源的路由度量 - 10.1.1.10。 獲勝者確定如下:

  1. AD較低的那一個。
  2. 如果 AD 相等,那麼誰的指標就較低。
  3. 如果這裡存在平等,則在廣播此多播的網路中具有較高 IP 的人。

這次投票的獲勝者將成為指定路由器。 Pim Hello 也用於選擇 DR。 在文章的開頭,顯示了 PIM Hello 訊息,您可以看到那裡的 DR 欄位。 此連結上 IP 位址最高的一方獲勝。
有用的標誌:
PIM 協定的工作原理
MROUTE 表。
在初步了解 PIM 協定的工作原理後,我們需要了解如何使用組播路由表。 mroute 資料表儲存有關從客戶端請求哪些流以及哪些流從多播伺服器流出的資訊。
例如,當某個介面上收到 IGMP 成員報告或 PIM 加入時,類型 ( *, G ) 的記錄將會加入到路由表中:
PIM 協定的工作原理
此條目表示收到位址為 238.38.38.38 的流量請求。 DC 標誌表示組播將在密集模式下運行,C 表示接收者直接連接到路由器,即路由器收到 IGMP 成員報告和 PIM 加入。
如果有類型 (S,G) 的記錄,則表示我們有一個多播流:
PIM 協定的工作原理
在S字段- 192.168.1.11中,我們註冊了組播來源的IP位址,RPF規則將檢查該位址。 如果出現問題,您需要做的第一件事是檢查單播表中到來源的路由。 Incoming Interface 欄位表示接收組播的介面。 在單播路由表中,到來源的路由必須引用此處指定的介面。 傳出介面指定多播將重新導向到的位置。 如果為空,則路由器尚未收到對此流量的任何要求。 有關所有標誌的更多資訊可以找到 這裡.
PIM 稀疏模式。
稀疏模式的策略與密集模式相反。 當稀疏模式接收多播流量時,它只會透過請求該流量的介面來傳送流量,例如請求該流量的 Pim Join 或 IGMP Report 訊息。
SM 和 DM 的相似元素:

  • 鄰域關係的建構方式與 PIM DM 中的建構方式相同。
  • RPF 規則有效。
  • DR選擇類似。
  • Prune Overrides 和 Assert 訊息的機制類似。

為了控制網路上需要誰、在哪裡以及何種類型的多播流量,需要一個公共資訊中心。 我們的中心將是集合點(RP)。 任何想要某種群播流量的人或某人開始從來源接收群播流量,然後將其傳送到 RP。
當 RP 接收到多播流量時,它會將其傳送到先前請求此流量的路由器。
PIM 協定的工作原理
讓我們想像一個拓撲,其中 RP 是 R3。 一旦 R1 收到來自 S1 的流量,它就會將此多播封包封裝到單播 PIM 註冊訊息中並將其傳送到 RP。 他怎麼知道RP是誰? 這種情況下是靜態配置的,後面我們會講動態RP配置。

ip pim rp 位址 3.3.3.3

RP 將查看 - 是否有來自想要接收此流量的人的資訊? 我們假設事實並非如此。 然後RP會向R1發送PIM Register-Stop訊息,表示沒有人需要這個組播,註冊就被拒絕。 R1 將不會發送多播。 但組播來源主機會發送該訊息,這樣R1收到Register-Stop後,就會啟動一個60秒的Register-Suppression定時器。 在該計時器到期前 5 秒,R1 將向 RP 發送帶有 Null-Register 位元(即不封裝組播封包)的空 Register 訊息。 RP 反過來又會這樣:

  • 如果沒有收件人,則它將以「註冊停止」訊息回應。
  • 如果收件人出現,他不會以任何方式回應。 R1 在 5 秒內沒有收到拒絕註冊的訊息,將會很高興並向 RP 發送帶有封裝的多播的註冊訊息。

我們似乎已經弄清楚了組播是如何到達RP的,現在讓我們嘗試回答RP如何將流量傳遞給接收者的問題。 這裡有必要引入一個新的概念-根路徑樹(RPT)。 RPT 是一棵以 RP 為根、向接收者生長、在每個 PIM-SM 路由器上分支的樹。 RP 透過接收 PIM Join 訊息來建立它,並在樹中新增一個分支。 因此,每個下游路由器都會這麼做。 一般規則如下:

  • 當 PIM-SM 路由器在隱藏 RP 的介面之外的任何介面上收到 PIM Join 訊息時,它會向樹添加一個新分支。
  • 當 PIM-SM 路由器從直接連接的主機收到 IGMP 成員報告時,也會新增分支。

假設我們在 R5 路由器上有一個群組 228.8.8.8 的多重播送客戶端。 一旦 R5 收到來自主機的 IGMP 成員報告,R5 就會向 RP 方向發送 PIM 加入,並且本身將一個介面加入到檢視主機的樹中。 接下來,R4 接收來自 R5 的 PIM Join,將介面 Gi0/1 加入樹中,並向 RP 方向發送 PIM Join。 最後,RP(R3)接收PIM Join並將Gi0/0加入樹。 這樣,多播接收者就被註冊了。 我們正在建造一棵樹,其根為 R3-Gi0/0 → R4-Gi0/1 → R5-Gi0/0。
此後,PIM 加入將被傳送到 R1,R1 將開始發送多播流量。 需要注意的是,如果主機在多播廣播開始之前請求流量,則 RP 將不會發送 PIM Join,也不會向 R1 發送任何內容。
如果在組播發送過程中,主機突然不再想要接收它,那麼一旦 RP 在 Gi0/0 介面上收到 PIM Prune,它會立即直接向 R1 發送 PIM Register-Stop,然後再發送 PIM Prune通過Gi0 /1 介面發送訊息。 PIM 暫存器停止透過單播傳送到 PIM 暫存器來自的位址。
正如我們之前所說,一旦路由器將 PIM Join 傳送到另一個路由器(例如 R5 到 R4),那麼一筆記錄就會加入 R4:
PIM 協定的工作原理
並且啟動一個計時器,R5必須不斷重置這個計時器PIM Join訊息,否則R4將被排除在外出清單之外。 R5 將每 60 個 PIM 加入訊息發送一次。
最短路徑樹切換。
我們將在 R1 和 R5 之間添加一個接口,並查看流量如何在此拓撲中流動。
PIM 協定的工作原理
假設流量依照舊方案R1-R2-R3-R4-R5發送和接收,這裡我們連接並設定R1和R5之間的介面。
首先,我們必須在 R5 上重建單播路由表,現在可以透過 R192.168.1.0 Gi24/5 介面到達網路 0/2。 現在,R5 在介面 Gi0/1 上接收多播,了解不符合 RPF 規則,並且在 Gi0/2 上接收多播會更合乎邏輯。 它應該與 RPT 斷開連接並建立一個較短的樹,稱為最短路徑樹 (SPT)。 為此,他透過 Gi0/2 向 R1 發送 PIM Join,而 R1 也開始透過 Gi0/2 發送多播。 現在R5需要取消訂閱RPT,以免收到兩份副本。 為此,他向 Prune 發送一條訊息,指示來源 IP 位址並插入一個特殊位元 - RPT 位元。 這意味著你不需要給我發送流量,我這裡有更好的樹。 RP 也會向 R1 發送 PIM Prune 訊息,但不發送 Register-Stop 訊息。 另一個功能:R5 現在將連續向 RP 發送 PIM Prune,因為 R1 繼續每分鐘向 RP 發送 PIM Register。 直到沒有新人想要這個流量,RP才會拒絕。 R5 通知 RP 它繼續透過 SPT 接收組播。
動態RP搜尋。
自動RP。

這項技術是思科專有的,並不是特別流行,但仍然存在。 Auto-RP 操作包括兩個主要階段:
1) RP 將 RP-Announce 訊息傳送到保留位址 - 224.0.1.39,宣告自己為所有人或特定群組的 RP。 此訊息每分鐘發送一次。
2) 需要一個 RP 映射代理,它將發送 RP-Discovery 訊息,指示應針對哪些群組監聽哪些 RP。 常規 PIM 路由器將從該訊息中確定自己的 RP。 映射代理可以是 RP 路由器本身,也可以是單獨的 PIM 路由器。 RP-Discovery 被傳送到位址 224.0.1.40,計時器為一分鐘。
讓我們更詳細地看看這個過程:
讓我們將 R3 配置為 RP:

ip pim send-rp-announce 環回 0 範圍 10

R2作為映射劑:

ip pim send-rp-discovery 環回 0 範圍 10

在所有其他方面,我們將期望透過 Auto-RP 獲得 RP:

ip pim autorp 監聽器

一旦我們配置了 R3,它將開始發送 RP-Announce:
PIM 協定的工作原理
R2建立映射代理後,將開始等待RP-Announce訊息。 只有當它找到至少一個 RP 時才會開始發送 RP-Discovery:
PIM 協定的工作原理
這樣,一旦常規路由器(PIM RP 偵聽器)收到此訊息,它們就會知道到哪裡尋找 RP。
Auto-RP 的主要問題之一是,為了接收 RP-Announce 和 RP-Discovery 訊息,您需要將 PIM Join 傳送到位址 224.0.1.39-40,而為了傳送,您需要知道RP 位於。 經典的先有雞還是先有蛋的問題。 為了解決這個問題,PIM稀疏密集模式被發明。 如果路由器不知道 RP,則它以密集模式運作;如果知道,則以稀疏模式運作。 當在常規路由器的介面上設定 PIM 稀疏模式和 ip pim autorp Listener 命令時,路由器將在密集模式下運行,僅用於直接從 Auto-RP 協定 (224.0.1.39-40) 進行組播。
引導路由器 (BSR)。
此功能的工作原理與 Auto-RP 類似。 每個 RP 都會向映射代理發送一條訊息,映射代理收集映射訊息,然後通知所有其他路由器。 讓我們來描述一下與 Auto-RP 類似的過程:
1) 一旦我們將 R3 配置為 RP 的候選者,請使用以下命令:

ip pim rp-候選環回 0

那麼R3就不會做任何事;為了開始發送特殊訊息,他首先需要找到一個映射代理。 因此,我們進入第二步。
2) 配置R2作為映射代理:

ip pim bsr-候選環回 0

R2 開始傳送 PIM Bootstrap 訊息,表示自己是映射代理:
PIM 協定的工作原理
該訊息被傳送到位址 224.0.013,PIM 協定也將其用於其他訊息。 它將它們發送到各個方向,因此不存在像 Auto-RP 那樣的先有雞還是先有蛋的問題。
3)RP一旦收到BSR路由器發送的訊息,就會立即傳送單播訊息到BSR路由器位址:
PIM 協定的工作原理
之後,BSR收到有關RP的資訊後,將透過多點傳播方式將其傳送至位址224.0.0.13,所有PIM路由器都會偵聽該位址。 因此,命令的類似物 ip pim autorp 監聽器 對於不在 BSR 中的常規路由器。
具有組播來源發現協定 (MSDP) 的 Anycast RP。
Auto-RP 和 BSR 允許我們以以下方式在 RP 上分配負載: 每個組播組只有一個活動 RP。 將一個多播組的負載分佈到多個 RP 是不可能的。 MSDP 透過向 RP 路由器頒發相同的 IP 位址(遮罩為 255.255.255.255)來實現此目的。 MSDP 使用以下方法之一學習資訊:靜態、Auto-RP 或 BSR。
PIM 協定的工作原理
在圖中,我們有一個帶有 MSDP 的 Auto-RP 配置。 兩個 RP 在 Loopback 172.16.1.1 介面上配置了 IP 位址 32/1,並用於所有群組。 使用 RP-Announce,兩個路由器都會引用該位址來通告自己。 Auto-RP映射代理收到該訊息後,發送有關位址為172.16.1.1/32的RP的RP-Discovery。 我們使用 IGP 告訴路由器有關網路 172.16.1.1/32 的信息,並進行相應的處理。 因此,PIM 路由器從指定為網路 172.16.1.1/32 的路由上的下一跳的 RP 請求或註冊流。 MSDP 協定本身是為RP 本身交換有關組播資訊的訊息而設計的。
考慮這個拓撲:
PIM 協定的工作原理
Switch6 將流量廣播到位址 238.38.38.38,到目前為止只有 RP-R1 知道它。 Switch7 和 Switch8 請求了該群組。 路由器 R5 和 R4 將分別向 R1 和 R3 發送 PIM Join。 為什麼? R13.13.13.13 到 5 的路由將使用 IGP 度量來引用 R1,就像 R4 一樣。
RP-R1 知道該串流並將開始向 R5 廣播它,但 R4 對此一無所知,因為 R1 不會簡單地發送它。 因此MSDP是必要的。 我們在R1和R5上配置:

R3.3.3.3 上的 ip msdp Peer 1 connect-source Loopback1

R1.1.1.1 上的 ip msdp Peer 3 connect-source Loopback3

他們將在彼此之間發起會話,並且當收到任何串流時,他們會將其報告給他們的 RP 鄰居。
一旦 RP-R1 收到來自 Switch6 的串流,它就會立即發送單播 MSDP Source-Active 訊息,該訊息將包含 (S, G) 等有關組播來源和目的地的資訊。 現在,RP-R3 知道諸如 Switch6 之類的來源,當從 R4 接收到對此流的請求時,它將在路由表的引導下向 Switch6 發送 PIM Join。 因此,收到此類 PIM 加入的 R1 將開始向 RP-R3 發送流量。
MSDP 運行在 TCP 之上,RP 會相互發送 keepalive 訊息來檢查活動性。 計時器為 60 秒。
將 MSDP 對等體劃分為不同域的功能仍不清楚,因為 Keepalive 和 SA 訊息並未指示任何網域中的成員資格。 此外,在此拓撲中,我們測試了指示不同域的配置 - 效能沒有差異。
如果有人可以澄清,我很樂意在評論中閱讀。

來源: www.habr.com

添加評論