HCNP Routing&Switching之組播技術-IGMP-Snooping

  前文我們了解了組播協議IGMP相關話題,回顧請參考//www.cnblogs.com/qiuhom-1874/p/15700550.html;今天我們來聊一聊二層交換機處理組播報文所面臨的問題,以及IGMP-Snooping相關話題;

  我們知道二層交換機在單播通信中的工作原理就是根據構建mac地址表來轉發數據,如果二層交換機收到一個未知的單播或廣播報文,那麼它會泛洪出去;對於組播信息它會如何處理呢?其實二層交換機收到組播報文,默認情況下,它會把組播報文當作廣播處理,即 收到組播報文,它會泛洪出去;這樣一來對於接入同一二層交換機的組播客戶端,在沒有加入對應組播組的情況下也會照常收到組播源發送的組播報文;很顯然,這無形是對那些不需要接收對應組播報文的客戶端的帶寬造成浪費,擁堵;為了解決這樣的問題;igmp-snooping出現了;igmp-snooping的主要作用是嗅探組播信息,從而根據組播信息建立起組播mac地址表,從而實現隔離那些未加入對應組播組的客戶端流量;簡單講就是,有了igmp snooping,在同一二層交換機收到對應組播報文,它不會全局泛洪,而是根據對應的組播mac表來轉發數據,從而規避了全局泛洪所帶來的困擾;如下如所示

  提示:如上圖所示,在客戶端B加入G2組,在對於非g2組的客戶端A和C來說,它們也能正常收到G2組播源發送的組播信息(原因是二層交換機把組播報文當作廣播處理了);這就是二層組播數據轉發時,說面臨的問題;它會造成網絡資源的浪費,以及一些安全隱患的存在;

  IGMP Snooping工作原理

  提示:首先在二層交換機上運行igmp snooping ;在路由器發送查詢給交換機,對應交換機會收到查詢,此時二層交換機會在內核建立一個組播mac表,把對應收到查詢把文接口和對應組播mac地址做關聯;然後把查詢泛洪出去;對應組播接收者收到路由器的查詢,然後把報告報文發送給交換機,此時交換機會把接受報告的端口和對應組播mac做關聯;這樣一來就建立起組播mac地址表項;後續二層交換機就根據這個組播mac表項來轉發數據;

  提示:我們把收到查詢報文的接口叫做路由器端口(上游接口);把收到報告的接口叫做成員端口(下游接口);對於路由端口和成員端口的生成有兩種方式,第一種就是動態生成,即通過igmp的普遍查詢或pim 的hello包動態生成路由接口;通過收到IGMP report報文的接口自動生成成員端口;這種方式是動態生成路由接口或成員接口;第二種方式就是手動配置路由接口或成員接口,這種方式成為靜態路由端口或成員端口;路由端口主要作用是接受組播數據的上游接口,而成員端口主要作用是發送組播數據給下游接口;

  提示:igmp snooping的工作原理總結為路由器發送查詢,組播成員發送報告,從而交換機構建起組播mac表項;從而實現規避二層交換機收到組播報文泛洪;

  提示:路由器周期性發送普遍查詢報文,該報文會被交換機收到,此時交換機會泛洪該報文,從而交換機上的所有的端口都會收到查詢報文,此時交換機就會建立起一張二層組播轉發表,該表的內容是對應組播mac和對應的端口;並把1口標記為路由接口(收到查詢報文);如果clientB 希望加入組播組,此時clientB會發送一條IGMP成員報告,對應報告中就會有目的mac地址,交換機從3口收到對應報告以後,通過igmp snooping處理以後,它會把3口加入到對應組播mac對應的端口裡,並把3口標記為成員端口(收到報告的端口);同樣的道理clientc加入對應組播組,它也會發送一條主動報告給交換機,交換機收到對應報告以後,它會把4口加入到對應組播組對應的端口裡;這樣一來就形成了一個二層組播轉發表;所以對於啟用IGMP snooping的交換機來說,有了這個表項,對應組播組的數據就會現在只對應的端口上首發,而不會發送給其他端口;

  IGMP和IGMP-Snooping配置

  實驗拓撲如下

  分析:首先我們需要配置好個設備的ip地址和組播地址,然後在路由器上配置上pim;這裡需要說明一點,所有組播都是基於單播實現的,所以我們需要先把單播搞通,然後再配置組播igmp和igmp-snooping;這個實驗在ensp模擬器上二層交換機開啟igmp-snooping時會有bug,導致組播客戶端發送的報告路由器收不到,路由器發送的查詢,組播客戶端收不到,所以路由器面向二層交換機的接口會認為沒有客戶端(因為查詢發出去沒有人報告給它);所以我們還需要在路由器面向交換機的接口配置靜態組播組信息;

  配置客戶端地址

  驗證pc1和pc2互通

  提示:可以看到pc1和pc2是可以正常通信的;

  配置路由器各接口ip地址

sys
sys r1
int g0/0/0
ip add 1.0.0.100 24
int g0/0/1
ip add 2.0.0.100 24

View Code

  驗證路由器各接口是否正常up

  配置組播源服務器ip地址

  配置組播源

 

  驗證:客戶端到組播源服務器的單播是否能夠正常通訊?

  ok,到此該實驗的單播網絡已經搞通,接下來是在路由器上配置igmp 和pim

  在路由器上全局開啟組播路由功能

  提示:只有在組播路由器上開啟了組播路由功能以後,後續的igmp和pim才能夠正常開啟;

  在路由器面向二層交換機接口開啟pim以及igmp

  在路由器面向組播源接口開啟pim以及igmp

  驗證路由器組播組信息

  提示:如果pc客戶端不加入對應組播組在路由器上是看不到對應組播組信息的;此時如果不考慮igmp-snooping 那麼組播源的數據就能正常發送給組播客戶端;

  驗證:在pc1所在鏈路上抓包

  提示:可以看到組播源發送數據,對應pc1所在鏈路也會收到數據;但二層交換機它對於組播的處理和處理廣播的方式一樣都是泛洪,所以pc2即使沒有加入組播組,對應鏈路上也會收到組播數據;

  在二層交換機上開啟igmp-snooping

  提示:在交換機上開啟了igmp-snooping以後,由於模擬器bug原因會導致路由器發送到查詢客戶端收不到,當然客戶端也無法正常報告給路由器,所以時間一旦超時,在路由器上的組播組信息就會被刪除,即路由器不會向交換機轉發組播數據;

  在路由器上面向交換機的接口上添加靜態組播組信息

  提示:可以看到之前路由器上的組播組信息已被刪除,原因是在交換機上開啟igmp-snooping以後隔斷了路由器和客戶端查詢和報告;手動在路由器上面向交換機的接口下配置靜態組播組信息是讓組播數據一直會從對應接口發送出去;

  在交換機上查看路由接口

  提示:可以看到交換機通過igmp-snooping已經分析出eth0/0/1口是路由器接口;這個和我們的拓撲很吻合;

  在交換機上查看成員接口

  提示:現在提示我們沒有成員接口;原因是交換機沒有收到報告,所以它認為沒有成員;

  在pc1上點擊加入對應組播組,看看對應成員接口是否在交換機上看到?

  提示:可以看到交換機收到pc1發送的報告以後,對應就把連接pc1端口加入到對應組播組的成員端口中;正常情況下此時組播數據只會向pc1所在端口轉發,但是由於bug的原因,此時數據還是會泛洪;即pc2所在端口雖然沒有加入組播組,但還是可以收到組播數據;這個是模擬器bug;到此igmp-snooping的配置就完成了;