天天看點

IGMP SOOPING作用,應用場景,實作的原理和封包

作者:平靜如水的溫柔

(1) IGMP Snooping的作用

IGMP Snooping是二層多點傳播的基本功能,可以實作多點傳播資料在資料鍊路層的轉發和控制。當主機和上遊三層裝置之間傳遞的IGMP協定封包通過二層多點傳播裝置時,IGMP Snooping分析封包攜帶的資訊,根據這些資訊建立和維護二層多點傳播轉發表,進而 指導多點傳播資料在資料鍊路層按需轉發。

IGMP snooping的好處:

預設情況下,交換機收到多點傳播封包後立刻執行泛洪操作,無法保證多點傳播流量的安全性與有償性(費用統計),同時也會浪費裝置的帶寬資源與開銷。是以使用IGMP snooping技術建立二層多點傳播轉發表,多點傳播流量按照二層多點傳播轉發表去轉發多點傳播流量,是以能夠節省裝置開銷與鍊路帶寬資源。

(2) IGMP Snooping的兩種端口角色:

路由器端口(router port)

1 .通過監聽IGMP普遍組查詢消息或PIM Hello消息來感覺哪些接口是路由器端口。

2. 通過手工指定路由器端口(180s内如果沒有收到igmp查詢消息或者pim hello 消息,會從多點傳播表中消失)

成員端口(Member port)

1 收到IGMP Report封包的接口将被認為是動态成員端口

2 手工配置成員端口

靜态配置指令

Igmp-snooping static-router-port vlan 10

L2-multicast static-group group-address 225.1.1.4 to 225.1.1.5 vlan 10

(3)IGMP Snooping的工作機制

1 普遍組查詢 當二層多點傳播裝置收到普遍組查詢消息時,向VLAN内除接收接口外 的其他所有接口轉發,并對接收接口做如下處理:

a)如果路由器端口清單中尚未包含該接口,則将其添加進去,并啟動老化定時器;

b) 如果路由器端口清單中已包含該動态路由器端口,則重置老化定時器。

說明: 收到IGMP普遍組查詢封包時,動态路由器端口的老化定時器預設為180秒,可以通過指令行配置。收到PIM Hello封包時,動态路由器端口的老化時間為Hello封包中Holdtime字段的值(105s)

2 成員報告 當二層多點傳播裝置收到成員報告消息時,向VLAN内所有路由器端口轉發。 從封包中解析出主機要加入的多點傳播組位址,并對接收接口做如下處理:

a)如果不存在該組對應的轉發表項,則建立轉發表項,将該接口作為動态成員端口添加到出接口清單中,并啟動老化定時器。

b)如果已存在該組對應的轉發表項,但出接口清單中未包含該接口,則将該接口作為動态成員端口添加到出接口清單,并啟動老化定時器。

c)如果已存在該組所對應的轉發表項,且出接口清單中已包含該動态成員端口,則重置其老化定時器。

說明: 收到IGMP報告封包後,動态成員端口的老化定時器 (2x60+10=130s)= 健壯系數 x 普遍組查詢間隔 + 最大響應時間

總結:如有組成員對應表項,則更新老化計時器,如果沒有對應表項,則新增。

3 成員離開多點傳播組 當二層多點傳播裝置收到IGMP離開消息時,判斷離開的組是否存在的轉發表項,以及轉發表項出接口清單是否包含封包的接收接口:

a)如果不存在該組對應的轉發表項,或者該組對應轉發表項的出接口清單中不包含接收接口,二層多點傳播裝置不轉發該封包,将其直接丢棄。

b)如果存在該組對應的轉發表項,且轉發表項的出接口清單中包含該接口,二層多點傳播裝置會将封包向VLAN内所有路由器端口轉發路由器收到該離開消息(last-report)後,會回一個特定組查詢消息,二層多點傳播裝置收到後會将特定組查詢消息向有特定組成員的接口轉發。

c) 對于IGMP離開封包的接收接口(假定為動态成員端口), 二層多點傳播裝置在其老化時間内:1如果從該接口收到了主機響應IGMP特定組/源組查詢的報告封包,表示接口下還有該組的成員,于是重置其老化定時器。2如果沒有從該接口收到主機響應IGMP特定組/源組查詢的報告封包,則表示接口下已沒有該組成員,則在老化時間逾時後,将接口從該組的轉發表項出接口清單中删除。

說明: 收到IGMP離開封包後,動态成員端口的老化定時器(2x1=2s)= 健壯系數 x 特定組查詢間隔。

總結:如果收到離開封包中的組不在表項内,直接丢棄;特定組查詢封包才是影響表項的關鍵。

(4)IGMP Snooping的缺點有哪些?

1 CPU和記憶體開銷問題,CPU需要處理IGMP封包來維護二層多點傳播轉發表,如果交換機下的組很多的話,二層多點傳播轉發表需要占用的記憶體也是相當大的

2 如果在不能識别IGMP封包的二層交換機上打開igmp snooping會監聽所有的多點傳播封包,并且會把這些多點傳播封包全部送給CPU處理,會加重cpu的負擔。

擴充問題1:IGMP Snooping檢查所有多點傳播封包嗎?如何做到的?

IGMP Snooping不一定是檢查所有多點傳播封包的,要看交換引擎是否識别igmp封包。如果交換引擎識别igmp封包,隻會把igmp封包送給cpu處理,其他多點傳播封包就會按照二層多點傳播轉發表進行轉發。如果交換引擎不識别igmp封包,則會把所有的多點傳播封包都送給cpu處理。通過IP標頭的協定字段來識别的(pim:103, IGMP:2,UDP:17,TCP:6,OSPF 89)

擴充問題2:IGMP snooping産生的背景?

針對交換機直接泛洪多點傳播流量帶來的問題:

1.浪費鍊路帶寬

2.安全性

3.有償性---對應ISP來說

4.消耗裝置性能(針對不同多點傳播IP映射到相同MAC帶來的問題:)

擴充問題3:二層多點傳播轉發表項,如何删除對應的表項?

(1)2S,特定組查詢;

(2)130S,兩次普遍組查詢+響應抑制;

擴充問題4:如果沒有手動的配置路由器端口角色的功能會怎麼樣?

場景:SW上連着一台多點傳播源 (1)浪費帶寬等; (2)交換機接口根據IP封包的protocol字段無法判斷是否為IGMP封包,隻能轉交給CPU處理,但是CPU也無法識别,導緻交換機性能大量消耗;

注意隻有開啟了multicast routing-table的路由器才會接收多點傳播封包,否則收到多點傳播封包都是直接丢棄;

繼續閱讀