2011/10/14

IGMP Proxy snooping

IGMP Proxy
IGMP Proxy原理其實就是通過在下鏈的界面上接收IGMP report訊息,然後再從上鏈的界面上傳送出去;同時在路由器上添加對應的virtual interface(VIF)的路由訊息(MFC)。 最後,使得從上鏈的界面收到的群播封包,能發送到下鏈的界面對應的網路去。在實作中,MFC(multicast forward cache)表添加的時候是通過來源IP和群播群組目的IP來產生一個雜湊值作為索引的。但由於IGMP Proxy必須對所有的來源IP的群播包進行添加MFC entry,因此這個雜湊函式就必須修改,比如使用群播群組目的IP和界面索引來產生雜湊值。 當然,也可以用別的方法。

IGMP snooping(Internet Group Management Protocol snooping)是運行在layer 2 Ethernet Switch上的群播約束機制,用於管理和控制multicast group。

IGMP snooping 運行在Data Link Layer。當Layer 2 Ethernet Swtich收到主機和路由器之間傳遞的IGMP封包時,IGMP snooping 分析IGMP 封所帶的訊息。

當監聽到主機發出的IGMP Host report message時,Switch就將與該主機加入到相應的table中;當監聽到主機發出的IGMP leave message,Switch就將刪除與該主機對應的multicast entry。通過不斷地監控IGMP封包,交換機就可以在二層建立和維護Multicast MAC Address Table。之後,交換機就可以根據Multicast MAC Address Table進行轉發從路由器往下發送的群播packet。

沒有運行IGMP snooping 時,multicast packet將在二層廣播。運行IGMP snooping後, 封包將不再在二層廣播,而是進行Layer 2 Multicast 。
Ethernet Switch利用IGMP snooping 實現對IGMP封包的偵測,並為主機及其對應界面與相應的群播組地址建立映射關係。

實務上,由於IGMP Snooping使用的時機非常少,國內某大廠的L2 Switch在IGMP Snooping與IGMP Proxy有不少軟體上的BUG。

IGMP Version 1使用Query-Response模型來允許群播路由器和多層次交換器來確定在本網段內哪個群播群組是啟動的。在這個模型中,路由器或交換器充當IGMP 查詢路由器,每隔60秒週期性地發送IGMP Version 1 Membership Query給224.0.0.1。啟用群播的所有主機監聽該位址並接收Query Packet。主機以IGMP Version 1 Membership Report回覆,表示它要接收特定Group的Multicast Traffic;該網段中的路由器或交換器就可以了解群播群組中有哪些接收者。

主機可以通過發送一個或多個主動的Membership Report封包表明加入(Join)一個群播群組。如: 某個主機主動發送一個Report封包表明要接收群播群組(224.1.1.1)的流量。

主機通過停止處理群播群組訊務以及不回應IGMP Query的方式來離開群播群組。

IGMP Version 1依靠L3的IP Multicast Routing Protocol(PIM、DVMRP等)來解決同一網段中哪個路由器或多層次交換器成為查詢路由器。查詢路由器發送IGMP Version 1的Query來確定哪個群播群組是啟動的。通常Designated Router會被選擇為查詢路由器。IGMP Version 1的封包有2種:Member Query(224.0.0.1, 每60秒查詢一次)與Member Report。

主機群可以加入群播群組,但是IGMP Version 1沒有Leave訊息,路由器或多層次交換器需透過一個逾時機制的運作,讓那些沒有人接收的訊務不再送到不需要的主機成員。

解釋昨天的題目:

這種封包格式常看的人, 這一題就屬於送分題, 但另外一題封包題就出錯了, 害我算很久算不出答案, 但是還是在考試時看出來, 所以我很自私的沒有替大家申訴 (快留言罵我吧!!)
很簡單喔, 16進位的每個數字代表4個byte, 題目問你, 訊息Type, 那就是第二個數字2, 看一下type的?明, 0x2為Host Membership Report, 所以選二, 就這麼簡單!

實做時看你是要Query還是Report, 把GroupAddress用Big Indian的方式填到第5到第8個Octor中, 然後在把Checksum送出去, 串流就會用UDP的方式送過來, Router上是跑PIM-SM或DM就不用管了! 接收也很簡單, 起一個UDP Server就好了, 這時有人會疑惑, 為甚麼Client是起UDP Server而不是UDP Client! 仔細想想就會明白!

今天的題目, 跟主題無關:
剛去抓題目時, 已經改成送分, 請問下面這一題那裡出錯, 修正後的答案為何?

另外這份考卷還有三處答案錯誤, 其中兩處被我申訴成功, 出題的人真的很誇張!!!!

IGMP所使用Checksum函式, 其實這在很多Opensource的軟體中都看的到!!!!
  1. static unsigned short in_cksum(unsigned short *addr, int len)
  2. {
  3. int nleft = len;
  4. int sum = 0;
  5. unsigned short *w = addr;
  6. unsigned short answer = 0;
  7. while (nleft > 1) {
  8. sum += *w++;
  9. nleft -= 2;
  10. }
  11. if (nleft == 1) {
  12. *(unsigned char*)(&answer) = *(unsigned char*)w;
  13. sum += answer;
  14. }
  15. sum = (sum >> 16) + (sum & 0xffff);
  16. answer = ~sum;
  17. return (answer);
  18. }

在Client連接群播群組時,於指定的主機群組中宣告成員資格,傳送IGMP Report。也傳送 IGMP 主機成員資格Report訊息,以回應路由器傳送的 IGMP 主機成員資格查詢(IGMP Query)。主機可使用 IGMP Version 3 Report訊息,指定要由指定的Source接收群播的流量,這是IGMP Version 3最大的不同,也就是不同的編碼器可以丟出相同group的stream。

Client可使用 IGMP Version 3 Report訊息,指定要由指定的Source接收群播的Stream,或是由指定Source以外的所有來源接收群播流量。防止啟用群播的路由將群播傳輸傳遞到沒有Client的子網路。
群播路由器用來每隔一段時間輪詢一次網路中的群組成員。路由器可使用 IGMP Version 3 Query,查詢Client是否要由指定的來源清單,接收群播流量。

IGMP Version 3主要改進的功能是可以允許主機指定它們想要在某個Multicast Group中只接收特定的Multicast Source。這個增強功能使得路由資源可以更加有效地被使用。IGMP Version 3新增了可以根據群播來源來過濾群播的功能。

IGMP Version 3不僅可向下相容於之前版本的IGMP通訊協定。為了維持與較舊版本IGMP系統的向下相容性,IGMP Version 3群播路由器必須也同時採用Version 1和Version 2的通訊協定。

介紹Class D位址範圍群播IP位址
Multicast=群播=組播

共分4部分介紹IGMP,包含igmp SNOOPING與igmp Proxy,如果有大大有興趣的歡迎留言賜教,覺得寫的好才幫我按,覺得寫不好歡迎指點,單純留言鼓勵也非常歡迎。

IANA(Internet Assigned Numbers Authority)定義了由 224.0.0.0 到 239.255.255.255 的 Class D 位址範圍內,Class D 位址保留及指派IP群播位址使用。Class D位址的前四個位元永遠是1110,與Class A、B、C位址範圍很不一樣的是,Class D不再區分子網段,故扣除固定的前四個位元,剩下的28個位元共可以產生228個群播群組。

群播有趣的是,來源端不必知道群組中有哪些接收端,接收者可以隨時加入或離開群組。群播 IP 傳輸會傳送到單一位址,但是卻由多個主機來接收。只有隸屬於群播群組的主機,會接收並處理傳送到群組的資訊。正在接聽指定的IP 群播位址的主機群組,稱為群播群組。

若來源端與接收端在同一LAN中,接收端只要設成接收此群播位址,即可接收資料。但若來源端與接收端不在同一LAN中,亦或說中間有經過路由器,此時情況較為複雜,路由器是可以選擇將群播的封包轉送到所有的LAN中,這樣的做法如同廣播,違反了群播的基本精神,沒有節省到網路資源。所以,路由器必須知道哪個網路內有隸屬於此群組的成員,方式就是透過查詢。每個版本的 IGMP 都會定義通訊協定,以用來交換及更新群播群組中指定主機成員的相關資訊。

2 則留言:

  1. 16進位的每個數字代表4個byte~~是4個bit喔

    回覆刪除
  2. 16進位的每個數字代表4個byte~~代表4個bit喔

    回覆刪除