老掉牙的IGMPv1,你知道多少?

IGMP是Internet Group Management Protocol的簡稱,又被稱為互聯網組管理協議,是TCP/IP協議族中負責IPv4組播成員管理

的協議。

IGMP運行在主機與主機直接連接的組播路由器之間,用來建立、維護組播成員關係如下圖所示:

老掉牙的IGMPv1,你知道多少?

1、IGMPv1報文解析

  • 普遍組查詢報文(General Query):查詢器向共享網絡上所有主機和路由器發送的查詢報文,用於瞭解哪些組播組存在成員。
  • 成員報告報文(Report):主機向查詢器發送的報告報文,用於申請加入某個組播組或者應答查詢報文。
老掉牙的IGMPv1,你知道多少?

Version:IGMPv1值為1;

Type:General Query普通組查詢為0x1,Report成員報告報文為0x2;

Unused:發送時置0,接收時忽略;

Checksum:IGMP報文的校驗和;

Group Address:組播組地址。在普遍組查詢報文中,該字段設為0;在成員報告報文中,該字段為成員加入的組播組地址。

2、IGMPv1查詢與響應機制

通過查詢與響應,IGMP查詢器可以瞭解到該網段內哪些組播組存在成員。

  • IGMP查詢器週期性(缺省60s一次)發送目的地址為224.0.0.1(表示同一網段內所有主機和路由器)的普遍組查詢報文;
  • 網絡內所有的主機都能接收到該查詢消息,如果某主機對任何組播組G感興趣,則以組播方式發送成員報告報文,其中Group Address攜帶組播組G的地址,來宣告自己加入該組播組;
  • 經過查詢與響應過程,IGMP路由器瞭解到本網絡內存在組播組G對應的接收者,生成(*,G)組播表項,並依據此作為組播信息的轉發依據。
老掉牙的IGMPv1,你知道多少?

問題1,如果這個網絡有2個或2個以上的組播路由器,誰來查詢?

當一個網段內有多個組播路由器時,由於它們都可以接收到主機發送的成員報告報文,因此需要選取其中一臺組播路由器發送查詢報文就足夠了,該組播路由器稱為IGMP查詢器(Querier).IGMP本身無法依靠報文選舉,只能依靠上層協議替它選舉。在IGMPv1中,由組播路由協議PIM得DR作為Querier。

問題2,PC1、PC2、PC3他們響應查詢的report報文,目的組地址可以不同麼?

收到IGMP普遍組查詢報文後,被動響應請求,而告知組播路由器組活躍信息的報文,目標組地址字段可以不同,是D類非224.0.0.X地址。無論主機你加入到哪個組了,都要回復report報文告知,以便我查詢器能瞭解到下面哪些主機處於哪個組。

問題3,假設這些主機加入的是同1個組,需不需要所有的主機都回復1個report報文?

IGMPv1中有個機制叫IGMPv1響應抑制機制,每個主機在收到查詢的時候會在本地啟動1個定時器,缺省情況下,定時器的範圍是0-10秒之間的隨機值,誰的計時器先超時,誰先發,發出的report組播路由器會收到,其他在同一個組播組裡的主機也會收到,收到後它們知道已經有主機回覆report了,也就不再發送report,這樣相同的report的就被抑制了。

3、IGMPv1主機加入組

加入組的過程就是主機主動報告的過程,不等普遍組查詢報文過來,主動report聲明加入;

例如主動發送針對G2的報告報文,IGMP查詢器接收到HostC的報告報文後,瞭解到本網段內出現了組播組G2的成員,則生成組播轉發項(*,G2).網絡中一旦有G2的數據到達路由器,將向該網絡段轉發。

老掉牙的IGMPv1,你知道多少?

4、IGMPv1主機離開

IGMPv1沒有專門定義離開組的報文。主機離開組播組後,便不會再對普遍組查詢報文做出回應。

假設退出的主機所在組播組裡還有成員

其他成員會向IGMP查詢器回覆report報文,因此主機的離開,查詢器根本感知不到。

假設退出的主機所在組播組裡沒有成員

IGMP查詢器不會收到該組播組的報告報文,則在一定時間(缺省值為130秒)後,刪除所對應的組播轉發表項。很顯然,這期間組播流量繼續轉發,對網絡是一種負擔,所以這也是開發IGMPv2的主要原因。


分享到:


相關文章: