瞿 輝,蔣元兵,康宗緒,王亞昕
(重慶金美通信有限責任公司,重慶 400030)
組播的研究起源于斯坦福大學的博士生Steve Deering,他于1989年提出了IP組播規范[1],并在1992年建立了IP組播實驗室網。1999年以后,出現了組播路由協議如PIM-SM[2]、PIM-SSM[3]、PIM-DM[4],IP組播的技術和應用開始得到快速發展并沿用至今。
傳統組播技術(PIM)需要依賴事先創建的組播樹來轉發數據流,每個流均需維護組播樹和流狀態,這使得網絡節點的組播表、組播狀態等的增長,成為組播網絡中最復雜、不可控的部分。因此BIER(Bit Index Explicit Replication),即基于比特位的顯式復制技術被提出并得到了廣泛的關注。BIER技術于2015年在IETF成立了專門的工作組來推進標準化工作,眾多設備廠商、芯片廠商和運營商關注并參與了標準的討論,已形成了多篇工作組文稿,包括架構、轉發面封裝、流量工程、OAM等多方面的技術內容,并推出了RFC標準文檔[5]。
PIM域內一定會部署應用終端,但是后來者BIER,是為了解決路由交換節點的組播傳遞,其域內可以不部署應用終端。因此BIER作為核心域,其內部無終端接收組播流,僅承接PIM路由器的組播流,并建立隧道發送到相應的PIM路由器是常用的應用場景。
IETF研究組于2018年2月頒布了第00版的《PIM Signaling Through BIER Core》草案,并于2021年更新為第12版[6]。該草案的主要內容如下。
(1)PIM信令穿越BIER域的過程:定義了PIM域和BIER的邊界節點及其功能,定義了邊界節點PIM組播轉發表的接口,定義了BIER隧道的建立及頭部格式各個字段的值及用法。
(2)組播數據流穿越BIER域的過程:定義了組播數據流到達域邊界的處理(從PIM域進入BIER域、從BIER域出到PIM域)。
(3)根據組播源(或者RP)的IP地址,獲取外出邊界路由器的BIER節點號。
該草案在實現PIM穿越BIER域的描述中,著重PIM的JOIN消息如何處理,但未包括以下幾點。
(1)PIM鄰居維護(Hello),邊界路由器收到對方PIM路由器的鄰居維護消息的處理。
(2)BSR選舉(Bootstrap),BSR消息采用泛洪機制,被BIER隔離的PIM域如何完成BSR選舉。
(3)CRP匯報給BSR,由候選RP路由器發送單播IP消息給BSR,即PIM路由器發送候選RP消息給BSR時,如何穿越BIER域。
(4)BSR發布RP集合,同BSR選舉。
(5)斷言(Assert),斷言消息的處理。
(6)嫁接(Graft),嫁接消息穿越BIER域傳遞。
BIER路由器識別到PIM的鄰居維護報文后,需要進行2個操作。
(1)標識自己為邊界路由器(BBR),并將身份信息進行BIER域內的擴散,BIER域內每個路由器均需明確BBR的節點號(BBR-id)。同時識別維護報文Hold-Time選項字段(OptionType=1,OptionLength=2),以HoldTime為超時值啟動定時器(每次接收維護報文刷新該值),超時后標識自己不再是邊界路由器(BBR)。
(2)啟動鄰居維護定時器,超時值為HoldTime的1/3,超時后發送PIM鄰居維護報文給對方,讓PIM路由器認為自己也是一個PIM路由器(真正身份是BBR)。
通過鄰居維護的處理,所有連接在BIER域上的PIM路由器將識別直連的BBR為鄰居。
BSR發送的消息需要在整個PIM域內進行泛洪,因此邊界路由器(BBR)收到此報文后將加入BIER比特前綴,BitString填寫所有邊界路由器(BBR)的ID bit值,并執行BIER轉發。BBR收到此報文后,去除BIER比特前綴,并轉發給連接的PIM路由器。
通過BSR選舉報文的處理,PIM域內將選舉出IP地址最大的路由器作為BSR(BIER路由器不參與BSR的選舉),在任何一個PIM路由器上可觀察到BSR的存在。
CRP收集報文由候選RP(CRP)以單播形式發送給BSR,在BIER域內執行IP單播轉發即可。BSR收到CRP集合后,能夠顯示CRP的集合。
CRP通告報文是BSR報文的一種,采用組播地址泛洪發送。
報文處理同BSR選舉。所有PIM路由器接收到RP通告后,可以顯示域內的所有候選RP信息。
PIM處理“加入/剪枝”消息是以鄰居為單位,即向同一個鄰居可發送不同源、不同組、(*,G)和(S,G)混合的“加入/剪枝”消息。在PIM域內鄰居關系是確定的,該混合消息的處理比較簡單。但是進入BIER域內,需要確定RP和S的位置,如果多個組的源不一致或者既存在共享樹又存在最短路徑樹,而且RP和源不在同一位置,那么BIER域內需要分別處理,把到不同邊界路由器(BBR)的“加入/剪枝”消息歸類分別進行發送。
如圖1所示,2.0.0.3的PIM路由器將向鄰居3.0.0.3發送“加入/剪枝”消息,包含的內容為發向RP2.0.0.2的(*,G)加入和發向16.0.100.1的(S,G)加入消息。(*,G)加入消息應該發向BBR3.0.0.2,而(S,G)加入消息應該發向BBR3.0.0.1,如果發送的BBR錯誤,接收的PIM路由器建立的組播樹將包含不必要的出接口,并且執行組播流轉發時非最優路徑。

圖1 一條“加入/剪枝”消息面向不同的BBR
面向(S,G)的轉發表建立,端到端的組播流基本建立成功。
共享樹建立后,組播發送源所在的PIM路由器將通過注冊消息將組播流發送到RP,此報文為單播報文執行IP單播轉發流程,BIER域僅執行IP單播的轉發。
從第二個注冊報文開始,RP將朝著發送源的方向發送“加入/剪枝”消息,如果該消息要穿越BIER域其處理方法見3.5。當RP到源的組播轉發狀態建立好后,RP以IP單播方式向源發送“注冊停止”消息,BIER域僅執行IP單播的轉發。
如圖2所示,邊界路由器(bfir)對斷言報文不處理,邊界路由器(bfer)主動發起斷言消息以確定3.0.0.2還是3.0.0.4作為轉發路由器。

圖2 bfir和bfer的斷言處理
bfer發送斷言的準則:當路由器通過外出接口列表中的一個接口收到組播信息包,它將通過該接口發送斷言消息,以確定哪臺路由器繼續轉發該組播流。
斷言消息的內容是到源的度量值,具有最佳度量值的路由器可以轉發組播流,如果度量相同,則選擇具有最大IP地址的路由器轉發組播流。未被選擇到的路由器剪枝掉該出接口。
通過斷言的處理,僅一份組播流在網絡內傳遞。
嫁接報文和嫁接確認報文是密集模式(DM)特有的報文,其報文格式同“加入/剪枝”消息,處理方法也同“加入/剪枝”的處理。
通過嫁接的處理,其上級路由節點該接口立刻由剪枝狀態變為轉發狀態。
PIM路由器配置時需要確定接口是稀疏模式(SM)還是密集模式(DM),兩種模式下路由器的處理方式不一致,而且從報文類型上無法區分是SM還是DM。
因此,使用BIER隧道模式同樣需要配置SM或者DM模式。DM模式下由組播流直接建立轉發表,組播流轉發到所有的邊界路由器(BBR),由葉子節點發起“剪枝”消息以刪除不必要的組播流。SM模式下BIER路由器必須依靠組播轉發表轉發組播流,否則觸發注冊過程,而不是直接向所有邊界路由器轉發該組播流。