摘 要: 工業控制網絡中大量采用“生產者-消費者”的通信模式,網絡中存在著大量的多播數據,傳統交換機對多播數據的廣播式處理方式會大大降低交換式以太網的性能。本文在對比分析交換式以太網中現有幾種多播方法的基礎上,指出了它們各自在交換式工業以太網中的使用范圍。
關鍵詞:交換式工業以太網;多播;虛擬局域網;IGM 竊聽;Cisco 多播管理協議;GARP 多播注冊協議
[align=center]
Multicast Methods in Switched Industrial Ethernet
ZHANG Qi-zhi, CAO Chun-sheng, ZHANG Wei-dong
Department of Automation, Shanghai Jiao Tong University, Shanghai, 200030, China[/align]
Abstract:Because “producer-consumer” communication mode is widely adopted in industrial control network, there is a mass of multicast data in the network,traditional switch broadcasts multicast frames to all ports, which can significantly degrade the performance of switched Ethernet. This article compares existing several multicast methods and points out their respective applicable scopes in switched industrial Ethernet.
Keywords: switched industrial Ethernet; multicast; VLAN; IGMP Snooping; CGMP; GMRP
1. 引 言
在工業控制網絡中,大量的實時數據常采用“生產者-消費者”的通信模式進行傳送,其中生產者是發送實時數據的工作站,它產生的數據可以同時被多個消費者使用。這種通信模式一方面可以保證同一實時數據在空間上的一致性,另一方面可以節省帶寬,因為每個新產生的實時數據只需要發送一次。
工業網絡中這種“一對多”的數據相應于以太網中的多播數據幀,而多播數據在傳統以太網交換機中是以廣播的方式發送,因為交換機一般是通過查看它收到的以太網數據幀的源地址來學習各端口相連工作站的MAC 地址的,而多播MAC 地址從來不會被用在一個以太網數據幀的源地址中,交換機沒有方法動態地學習它們。當網絡中存在著大量的多播數據時,由多播幀引起的廣播數據會消耗掉大量的帶寬,甚至會引起“廣播風暴”使網絡進入不穩定狀態。最容易想到的方法是為交換機的每個端口靜態地配置多播地址,這種方法是可行的,但可擴展性和動態適應性都很差。
本文的第2 到5 小節對目前交換式以太網中常采用的四種多播方式進行了介紹。第6小節對它們進行了對比分析,并指出了各自在工業以太網中的適用范圍。
2. 虛擬局域網(Virtual LAN)
VLAN 是指在交換局域網的基礎上,采用網絡管理軟件構建的可跨越不同網段、不同網絡的端到端的邏輯網絡。一個VLAN 組成一個邏輯子網,即一個邏輯廣播域,它可以覆蓋多個網絡設備,允許處于不同地理位置的網絡用戶加入到一個邏輯子網中。VLAN 的主要優點之一就是可以抑制網絡廣播風暴,一個VLAN 就是一個邏輯廣播域,通過對VLAN 的創建,隔離了廣播,縮小了廣播范圍,可以控制廣播風暴的產生[1]。
從而可以設想將屬于每個“生產者-消費者”數據組的工作站組成一個VLAN,當其中的生產者發送多播數據時,只有屬于該VLAN 的數據組成員才能接收到相應的多播數據。控制網絡中只要存在一個“生產者-消費者”數據組,就對應于一個VLAN。顯然,某個控制網絡中的應分配的VLAN 數量將與其中的“生產者-消費者”數據組個數成正比。由于位于控制層的控制器往往參與到多個控制回路中完成優化控制運算,它應該同時位于多個VLAN 中,才能與多個控制回路中的工作站交換數據。
對于小型的控制網絡,這種多播方式也許是可行的,但對于中等規模和大規模的控制網絡,為數眾多的VLAN 勢必會大大降低控制網絡的性能,并給VLAN 的管理和維護帶來極大的困難,在大型控制網絡中“生產者-消費者”數據組個數甚至會超過可用的VLAN 數量(4096 個)。
由于VLAN 的安全機制,屬于不同VLAN 的通信成員之間相互通信時必須通過路由器進行轉交。如圖1 所示,位于VLAN1 工作站A 有數據要向位于VLAN2 中B 發送時,工作站A 必須首先把自己的數據轉交給網絡中的路由器,再由路由器其轉交給工作站B。路由器的介入勢必會增大數據的傳輸延遲,對于實時報文甚至可能使其失去實時性。雖然帶有硬件路由功能的第三層交換機可以增強需要路由傳輸的數據的實時性,但會增加整個網絡的成
本,并會增加網絡管理的復雜性。
[align=center]

圖1 不同VLAN 的工作站通過路由器轉發數據[/align]
3. IGMP 竊聽(IGMP Snooping)
互聯網組管理協議IGMP(Internet Group Management Protocol)定義了工作站如何向路由器注冊以便能接收到特定的IP 多播數據。當以太網交換機收到工作站和路由器之間傳遞的IGMP 報文時,通過截取并分析IGMP 報文所帶的信息,在鏈路建立和維護MAC 多播地址轉發表,以后從路由器下發的多播報文就根據該表中的“多播組-端口”對應關系進行轉發[2][3]。
3.1 通過IGMP 竊聽加入某一多播組
[align=center]

圖2 通過IGMP 竊聽加入一個多播組[/align]
當工作站是某交換組中第一個希望加入某一多播組的工作站時,如圖2 中的工作站A,加入過程如下:工作站A 先主動向路由器發送一條IGMP 成員報告,交換機通過截取分析該成員報告得知工作站希望加入的多播組,然后為其創建一個多播項目組,并把它鏈接到工作站A 所在的端口和所有的路由器端口。最后交換機把該IGMP 成員報告轉發給路由器端口,以便路由器能夠接收到該IGMP 報告,并相應地更新它的多播路由表。
當工作站希望加入一個已存在的多播組時,如圖2 中工作站B 希望加入工作站A 已經加入的多播組中。交換機只是簡單的將該工作站所在端口鏈接到已存在的多播組上,不再向路由器轉發IGMP 報告,而是使用代理報告(Proxy Reporting)機制每隔10s 向路由器為每個多播組轉發一次IGMP 報告。這種代理報告機制可以減少IGMP 竊聽多播機制消耗的帶寬[3]。
3.2 使用IGMP 竊聽離開一個多播組
當工作站想離開一個多播組時,它可以簡單的忽略周期的IGMP 詢問報文,或者發送一條IGMP Leave 報文。當交換機收到對某多播組的IGMP Leave 報文時,則會向接收該報文的端口發送所離開組的特定組查詢報文,以確認此端口相連的工作站中還有沒有該多播組的其他成員,同時啟動一個查詢響應定時器。如果在該定時器超時還沒有收到該多播組的報告報文,則將該端口從相應的MAC 多播組中移除。如果MAC 多播組在交換機的各個端口都沒有組成員時,交換機將通知多播路由器將該分支從多播樹中刪除[2]。
4. Cisco 組管理協議(Cisco Group Management Protocol)
CGMP 是Cisco 公司專有的組管理協議,它是在多播路由器和交換機之間使用的一種通信協議,主要工作方式是多播路由器通過CGMP 報文通知交換機它所得到的IGMP 信息,交換機上的CGMP 模塊會把接收到CGMP 幀中的“多播組-工作站”對應關系轉換為“多播組-端口”對,并基于此建立本地的多播地址轉發表,然后依照這個關系轉發多播數據[3][4]。
4.1 CGMP 的數據幀格式
CGMP 是目的地址為0x01-00-0C-DD-DD-DD 以太網數據幀, 它主要包含以下字段[4]:
(1) 版本號,1 或2。
(2) 報文類型,加入(Join)或離開(Leave)。
(3) 計數值,報文幀中包含的多播/單播地址對。
(4) GDA(Group Destination Address),48 位的多播MAC 地址。
(5) USA(Unicast Source Address),欲加入某一多播組的48 位的單播MAC 地址。
4.2 使用CGMP 加入一個多播組
當工作站希望加入某一多播組時,它發送一條IGMP 成員報告。路由器收到該IGMP報告后,把IGMP 幀中所聲明的多播MAC 地址拷貝到CGMP Join 數據幀的GDA 字段中,把發送站的源MAC 地址拷貝到CGMP Join 數據幀的USA 字段中,然后把構建好CGMP 數據幀發送給交換機。具有CGMP 多播功能的交換機監聽到目的地址為0x01-00-0C-DD-DD-DD 的數據幀后,它的處理器到自己的“地址-端口”表中去查找對應的USA。一旦USA 在表中被找到,交換機知道了該USA 位于哪個端口,然后它進行下列其中一項操作:
(1) 為GDA 創建一個新的多播項目組,并把USA 對應的端口和所有的路由器端口鏈接到該GDA。
(2) 如果屬于該GDA 的多播項目組已經存在,交換機只是把該USA 對應的端口加入到已有GDA 的端口列表中。
4.3 使用CGMP 離開一個多播組
當使用IGMPv1,工作站希望離開一個多播組時,不發送IGMP leave 報文, 路由器在兩次連續的IGMP 詢問沒有收到回應后,發送IGMP Leave 報文。如果仍舊有用戶對某多播組感興趣,屬于該多播組的端口就不會從多播樹上被刪除掉。當使用IGMPv2 時,工作站希望離開某一多播組時,可以發送IGMP Leave 報文。CGMPv2 借助該機制可以使工作站快速離開一個組(CGMP Fast-Leave)。
CGMP Fast-Leave 處理方式允許交換機在端口監視引擎模塊(具有IGMP 解析功能的硬件模塊)中監聽工作站發往所有路由器多播地址(224.0.0.2)的IGMPv2 Leave 報文。當它發現有Leave 報文時,就啟動一個查詢響應計時器,并發送一條查詢報文到接收到該Leave 報文的端口,以確認該端口是否還有工作站希望接收到此多播組數據。如果在定時器超時時還沒有收到CGMP Join 報文,則該端口從IGMP Leave 報文所標明的多播組的多播樹中被移除。如果它是該多播組的最后一個端口,交換機就把IGMP Leave 報文轉發到路由器端口。然后路由器通過發送一個特定組的查詢報文啟動正常的刪除過程,因為不會收到響應報文,路由器就在多播路由表中把相應的端口刪除掉。同時路由器也發送一條CGMP Leave 報文給交換機把該多播組從轉發表中刪除掉 [3]。
5. GARP 多播注冊協議(GARP Multicast Registration Protocol)
在IEEE 802.1D 標準中定義了GMRP,它使用GARP(generic attribute registration protocol)協議機制聲明和注冊工作站和交換機監聽接收多播數據的需要。
5.1 GMRP 的幀格式
GMRP 的數據幀格式如圖3 所示,其各個字段的意義如下:
(1) GMRP 應用地址,為多播地址0x01-80-C2-00-00-20。
(2) 源地址,取產生該GMRP 數據幀的設備的單播地址。
(3) 長度,標明整個GMRP 數據幀的長度。
(4) LLC 頭,所有GARP 應用都使用源地址和目的地址為0x42 的LLC 服務接入點,控制字段取值為0x03 標明為無連接服務。
(5) 協議ID,所有GARP 應用都使用值為0x0001 的協議ID,以便和其他LLC 服務(如生成樹協議)相區別。
[align=center]

圖3 GMRP 幀協議格式[/align]
(6) GMRP 屬性類別, GMRP 數據幀可以包含多個GMRP 信息字段,用值0x00 標明GMRP信息的結束。GMRP 信息具有兩種屬性類別:當屬性類型為0x01 時表明后面是組成員屬性列表,用來聲明接收特定多播數據的需要;當屬性類型為0x02 時是為了保證兼容不支持GARP 的設備。
(7) GMRP 屬性列表,屬性列表可以包含多個屬性值,每個屬性值包含三個元素:屬性長度;屬性事件,標明對屬性值要采取的行為,加入或離開一個多播組;屬性值,當屬性類別取組成員屬性時為48 位的MAC 多播地址[5][6]。
5.2 GMRP 的多播原則
GMRP 的實現基于GARP 工作機制,用于維護交換機中的動態多播注冊信息。所有支持GMRP 特性的交換機都能夠接收來自其他交換機的多播注冊信息,并動態更新本地的多播注冊信息,同時也能將本地的多播注冊信息向其他交換機傳播,以便使同一交換網內所有支持GMRP 特性的設備的多播信息達成一致。GMRP 依據下面的原則進行操作[5]:
(1) 設備通過Join 命令聲明它們加入某多播組的愿望,該聲明可以通過Leave 命令撤銷。
(2) 當同一網段的已有設備聲明對某一多播組感興趣時,如果另外一個對該多播組感興趣的設備監聽到了該聲明,它無需再明確提出聲明。
(3) 交換機在某一端口監聽到對某一多播組的聲明時,它在該端口為該多播組添加一個注冊信息。當聲明某一多播組服務的所有設備都離開后,交換機將向其他交換機注銷掉對該多播組的聲明。
(4) 交換機會把一個端口的注冊信息向其他端口廣播,同時多播注冊信息將沿生成樹進行廣播。
6. 四種多播方式的對比分析
在表1 中對上述四種多播通信方式進行了對比。除VLAN 外,其他幾種多播方式都是針對多播通信特點設計的多播解決方案,它們本質上都是通過某種方法來構建二層的多播樹,并減少網絡上不必要的數據傳輸。雖然在控制領域有不少學者提出用VLAN 來解決交換式工業以太網中的多播問題,但通過第2 小節的分析可知,VLAN 并不是多播通信的理想解決辦法。它只適合具有較少“生產者-消費者”數據組成員個數的控制網絡,而且不同VLAN 之間的通信應限制在一定流量內,因為它們必須通過路由器轉發,當不同VLAN 之間的通信流量較大時,路由器就會成為控制網絡中的通信瓶頸。因此用VLAN 來實現多播的應限制在小型的控制網絡中。
[align=center]

表1 四種多播方式的對比[/align]
使用CGMP 協議時,由路由器根據接收到的IGMP 報文構建CGMP 報文然后再發送給交換機進行二層多播配置,因此在使用CGMP 協議時,多播路由器是必須的設備。當使用IP 竊聽時,由于交換機可以代替多播路由器來解析IGMP 信息,通過適當的配置,進行多播配置時可以不需要路由器的介入,而由交換機代理路由器的相關功能。IGMP 竊聽方法和CGMP 協議的提出都是源于互聯網上多媒體通信快速增長的需要,它們在構建二層的多播樹時都利用了三層網絡上的IGMP 報文信息,二層的多播地址是由三層的IP 多播地址轉換得到的,因此參加二層多播的工作站也必須配置三層的IP 多播地址。另一方面,CGMP 和IP 竊聽都是專有的多播解決方案,其中CGMP 只被Cisco 的交換機和路由器支持,相比之下,IP 竊聽方法有多個交換機廠商支持,但其實現方法并沒有一個統一的標準。
GMRP 的提出一方面是源于互聯網上多媒體多播通信快速增長的需要,另一方面也是交換式以太網普遍采用提出的要求(在共享式以太網中不存在多播通信消耗大量帶寬的情況)。CMRP 是純二層的協議,它所使用的GARP 注冊協議也同時被VLAN 采用來注冊各個工作站的VLAN 屬性(GVRP,GARP VLAN Registration Protocol),因此在以太網交換機中,CMRP 會獲得越來越廣泛的支持。在使用GMRP 時,工作站的網絡接口卡和協議棧也必須提供對GMRP 的支持,但現有設備和系統的協議棧對GMRP 的支持并不充分。
因此在工業交換式以太網中,目前可考慮采用CGMP 或IP 竊聽來解決實時數據的多播問題,待工作站的接口卡和系統的協議棧對GMRP 做出相應改進后,逐漸過渡到使用GMRP來解決二層控制網絡中的多播問題。
7. 總結
本文分析了工業控制網絡中的數據通信特點:即存在大量多播數據,并介紹了目前交換式以太網中比較常用的四種多播方法:VLAN,IGMP 竊聽,CGMP,GMRP,對它們的特點進行了對比分析,指出了各自的使用范圍。另一方面,由于交換機的學習注冊過程需要一定時間,如果在這段時間內傳送數據,對于未知的多播地址,交換機仍然以廣播的方式發送數據,依然會導致廣播風暴,引起控制網絡的不穩定性。因此在各工作站正式通信前,有必要引入一個學習期,使各個站點有足夠的時間進行多播地址的注冊,在這段時間內,交換機也可以學習各個工作站的單播地址,從而在正式傳送控制數據時盡可能地減少網絡上的廣播數據。
參考文獻
[1] IEEE Std 802.1Q. IEEE Standards for Local and Metropolitan Area Networks: Virtual Bridged Local Area Network[S]. 1999
[2] 王軍,吳志美. 交換式以太網上的多播協議[J]. 軟件學報,2003,14(3): 496-502
[3] Cisco Systems Inc. Multicast in a Campus Network: CGMP and IGMP Snooping [J/OL]. URL:http://www.cisco.com/. 2003
[4] Kennedy C. and Kevin H. Cisco LAN Switching [M]. Cisco Press, 1999, 773-598
[5] IEEE Std 802.1D, 1998 Edition. Media Access Control (MAC) Bridges [S]
[6] Rich Seifert. The Switch Book [M]. Wiley Computer Publishing, 2000, 422-429