IGMP Snooping簡介
IGMP是Internet Group Management Protocol Snooping(互聯網組管理協議窺探)的簡稱,它是運行在二層設備上的組播約束機制,用於管理和控制組播組。
IGMP Snooping原理
運行IGMP Snooping的二層設備通過對收到的IGMP報文進行分析,爲端口和MAC組播地址建立起映射關係,並根據這樣的映射關係轉發組播數據。
如圖 1所示,當二層設備沒有運行IGMP Snooping時,組播數據在二層被廣播;當二層設備運行了IGMP Snooping後,已知組播組的組播數據不會在二層被廣播,而在二層被組播給指定的接收者。
圖1二層設備運行IGMP Snooping後的對比
IGMP Snooping通過二層組播將信息只轉發給有需要的接收者,可以帶來以下好處:
l 減少了二層網絡中的廣播報文,節約了網絡帶寬;
l 增強了組播信息的安全性;
l 爲實現對每臺主機的單獨計費帶來了方便。
IGMP Snooping基本概念
1. IGMP Snooping相關端口
如圖 2所示,Router A連接組播源,在Switch A和Switch B上分別運行IGMP Snooping,Host A和Host C爲接收者主機(即組播組成員)。
圖2 IGMP Snooping相關端口
結合圖 2,介紹一下IGMP Snooping相關的端口概念:
l 路由器端口(Router Port):交換機上朝向三層組播設備(DR或IGMP查詢器)一側的端口,如Switch A和Switch B各自的Ethernet1/1端口。交換機將本設備上的所有路由器端口都記錄在路由器端口列表中。
l 成員端口(Member Port):又稱組播組成員端口,表示交換機上朝向組播組成員一側的端口,如Switch A的Ethernet1/2和Ethernet1/3端口,以及Switch B的Ethernet1/2端口。交換機將本設備上的所有成員端口都記錄在IGMP Snooping轉發表中。
l 本文中提到的路由器端口都是指交換機上朝向組播路由器的端口,而不是指路由器上的端口。
l 如不特別指明,本文中提到的路由器/成員端口均包括動態和靜態端口。
l 在運行了IGMP Snooping的交換機上,所有收到源地址不爲0.0.0.0的IGMP普遍組查詢報文或PIM Hello報文的端口都將被視爲動態路由器端口。
2. IGMP Snooping動態端口老化定時器
表 1IGMP Snooping動態端口老化定時器
定時器 |
說明 |
超時前應收到的報文 |
超時後交換機的動作 |
動態路由器端口老化定時器 |
交換機爲其每個動態路由器端口都啓動一個定時器,其超時時間就是動態路由器端口老化時間 |
源地址不爲0.0.0.0的IGMP普遍組查詢報文或PIM Hello報文 |
將該端口從路由器端口列表中刪除 |
動態成員端口老化定時器 |
當一個端口動態加入某組播組時,交換機爲該端口啓動一個定時器,其超時時間就是動態成員端口老化時間 |
IGMP成員關係報告報文 |
將該端口從IGMP Snooping轉發表中刪除 |
IGMP Snooping端口老化機制只針對動態端口,靜態端口永不老化。
IGMP Snooping工作機制
運行了IGMP Snooping的交換機對不同IGMP動作的具體處理方式如下:
本節中所描述的增刪端口動作均只針對動態端口,靜態端口只能通過相應的配置進行增刪。
1. 普遍組查詢
IGMP查詢器定期向本地網段內的所有主機與路由器(224.0.0.1)發送IGMP普遍組查詢報文,以查詢該網段有哪些組播組的成員。
在收到IGMP普遍組查詢報文時,交換機將其通過VLAN內除接收端口以外的其它所有端口轉發出去,並對該報文的接收端口做如下處理:
l 如果在路由器端口列表中已包含該動態路由器端口,則重置其老化定時器。
l 如果在路由器端口列表中尚未包含該動態路由器端口,則將其添加到路由器端口列表中,並啓動其老化定時器。
2. 報告成員關係
以下情況,主機會向IGMP查詢器發送IGMP成員關係報告報文:
l 當組播組的成員主機收到IGMP查詢報文後,會回覆IGMP成員關係報告報文。
l 如果主機要加入某個組播組,它會主動向IGMP查詢器發送IGMP成員關係報告報文以聲明加入該組播組。
在收到IGMP成員關係報告報文時,交換機將其通過VLAN內的所有路由器端口轉發出去,從該報文中解析出主機要加入的組播組地址,並對該報文的接收端口做如下處理:
l 如果不存在該組播組所對應的轉發表項,則創建轉發表項,將該端口作爲動態成員端口添加到出端口列表中,並啓動其老化定時器;
l 如果已存在該組播組所對應的轉發表項,但其出端口列表中不包含該端口,則將該端口作爲動態成員端口添加到出端口列表中,並啓動其老化定時器;
l 如果已存在該組播組所對應的轉發表項,且其出端口列表中已包含該動態成員端口,則重置其老化定時器。
交換機不會將IGMP成員關係報告報文通過非路由器端口轉發出去,因爲根據主機上的IGMP成員關係報告抑制機制,如果非路由器端口下還有該組播組的成員主機,則這些主機在收到該報告報文後便抑制了自身的報告,從而使交換機無法獲知這些端口下還有該組播組的成員主機。
3. 離開組播組
運行IGMPv1的主機離開組播組時不會發送IGMP離開組報文,因此交換機無法立即獲知主機離開的信息。但是,由於主機離開組播組後不會再發送IGMP成員關係報告報文,因此當其對應的動態成員端口的老化定時器超時後,交換機就會將該端口對應的轉發表項從轉發表中刪除。
運行IGMPv2或IGMPv3的主機離開組播組時,會通過發送IGMP離開組報文,以通知組播路由器自己離開了某個組播組。當交換機從某動態成員端口上收到IGMP離開組報文時,首先判斷要離開的組播組所對應的轉發表項是否存在,以及該組播組所對應轉發表項的出端口列表中是否包含該接收端口:
l 如果不存在該組播組對應的轉發表項,或者該組播組對應轉發表項的出端口列表中不包含該端口,交換機不會向任何端口轉發該報文,而將其直接丟棄;
l 如果存在該組播組對應的轉發表項,且該組播組對應轉發表項的出端口列表中包含該端口,交換機會將該報文通過VLAN內的所有路由器端口轉發出去。同時,由於並不知道該接收端口下是否還有該組播組的其它成員,所以交換機不會立刻把該端口從該組播組所對應轉發表項的出端口列表中刪除,而是重置其老化定時器。
當IGMP查詢器收到IGMP離開組報文後,從中解析出主機要離開的組播組的地址,並通過接收端口向該組播組發送IGMP特定組查詢報文。交換機在收到IGMP特定組查詢報文後,將其通過VLAN內的所有路由器端口和該組播組的所有成員端口轉發出去。對於IGMP離開組報文的接收端口(假定爲動態成員端口),交換機在其老化時間內:
l 如果從該端口收到了主機響應該特定組查詢的IGMP成員關係報告報文,則表示該端口下還有該組播組的成員,於是重置其老化定時器;
l 如果沒有從該端口收到主機響應特定組查詢的IGMP成員關係報告報文,則表示該端口下已沒有該組播組的成員,則在其老化時間超時後,將其從該組播組所對應轉發表項的出端口列表中刪除。
IGMP Snooping Proxying
通過在邊緣設備上配置IGMP Snooping Proxying(IGMP Snooping代理)功能,可以減少其上游設備收到的IGMP報告報文和離開報文的數量,有效提高其上游設備的整體性能。配置了IGMP Snooping Proxying功能的設備(稱爲IGMP Snooping代理設備),在其上游設備看來,相當於一臺主機;而在其下游主機看來,則相當於一臺查詢器。
儘管在其上游設備看來,IGMP Snooping代理設備相當於一臺主機,但主機上的IGMP成員關係報告抑制機制在IGMP Snooping代理設備上並不會生效。
圖3 IGMP Snooping Proxying組網圖
如圖 3所示,作爲IGMP Snooping代理設備的Switch A,對其上游設備Router A來說是一臺主機,代理下游主機向Router A發送報告報文和離開報文;而對其下游的主機來說則是一臺查詢器,代理Router A向下遊主機發送普遍組查詢報文和特定組查詢報文,維護組成員關係。
IGMP Snooping代理設備對IGMP報文的處理方式如表2所示。
表2 IGMP Snooping代理設備對IGMP報文的處理方式
IGMP報文類型 |
處理方式 |
普遍組查詢報文 |
收到普遍組查詢報文後,向本VLAN內除接收端口以外的所有端口轉發;同時根據本地維護的組成員關係生成報告報文,並向所有路由器端口發送 |
特定組查詢報文 |
收到針對某組播組的特定組查詢報文時,若該組對應的轉發表項中還有成員端口,則向所有路由器端口回覆該組的報告報文 |
報告報文 |
從某端口收到某組播組的報告報文時,若已存在該組對應的轉發表項,且其出端口列表中已包含該動態成員端口,則重置其老化定時器;若已存在該組對應的轉發表項,但其出端口列表中不包含該端口,則將該端口作爲動態成員端口添加到出端口列表中,並啓動其老化定時器;若尚不存在該組對應的轉發表項,則創建轉發表項,將該端口作爲動態成員端口添加到出端口列表中,並啓動其老化定時器,然後向所有路由器端口發送該組的報告報文 |
離開報文 |
從某端口收到某組播組的離開報文後,向該端口發送針對該組的特定組查詢報文。只有當刪除某組播組對應轉發表項中的最後一個成員端口時,纔會向所有路由器端口發送該組的離開報文 |
交換機對組播協議報文的特殊處理規則
支持IGMP Snooping功能的交換機使能了三層組播路由後,在不同的情況下對各種組播協議報文的處理有所差異。具體規則如下:
(1) 如果交換機上只使能了IGMP,或同時使能了IGMP和PIM,進行常規處理。
(2) 如果交換機上只使能了PIM:
l 對於IGMP報文,將其當作未知報文在VLAN內進行廣播;
l 對於PIM Hello報文,則會爲其維護相應的動態路由器端口。
(3) 在交換機上關閉IGMP時:
l 如果未使能PIM,則刪除所有動態成員端口和動態路由器端口;
l 如果已使能PIM,則刪除動態成員端口,只保留動態路由器端口。
(4) 在交換機上關閉PIM時:
l 如果未使能IGMP,則刪除動態路由器端口;
l 如果已使能IGMP,則保留所有動態成員端口和動態路由器端口。