IGMP V3協議報文格式
IGMPv3包格式
IGMPv3包含查詢報文和報告報文兩種不同格式的報文,下面分別對兩種報文的格式做簡要說明。
查詢報文:
欄位說明:
型別(Type):
0x11 成員關係查詢
最大響應程式碼(Max_Resp_Code):
最大響應程式碼欄位指定在傳送一個響應報告之前所允許的最大時間。實際允許的時間,被稱為最大響應時間,其單位是1/10秒。它跟最大響應程式碼的換算如下:
if Max Rsp Code < 128 最大響應時間=Max Rsp Code
if Max Rsp Code >= 128 MaxRsp Code其實是表示如下的一個浮點值:
0 1 2 3 4 5 6 7
1|exp |mant |
最大響應時間= (mant | 0x10)<< (exp + 3)
最大響應時間的小值允許IGMPv3路由器調節“離開延遲”(最後一臺主機離開組的那個時間點跟路由協議被通知到已經不存在成員的那個時間點,兩者之間的時間差)。更大的值,尤其在指數範圍內的值,可以調節網路中IGMP流量的爆炸。
校驗和
校驗和是對整個IGMP資料報以16位為一段進行取反求和。為了計算校驗和,校驗和欄位開始必須被設定成0。當收到一個數據,在處理之前必須先對校驗和進行驗證
組地址(GroupAddress):
當傳送一個普通查詢的時候,組地址欄位必須被置0。當傳送一個指定組查詢或者傳送一個指定組和源的查詢時,必須被設定成要被查詢的IP組地址。
保留(Resv):
傳送的時候以0填充,接收的時候不做處理,被忽略。
標誌位S(禁止路由器處理):
當被設定成1的時候,S標誌表示任何接收路由器禁止更新它們在收到查詢時要更新的那些定時器。但它不禁止查詢者選舉或者普通的在路由器上執行的(當路由器作為一個組成員的時候)主機端的查詢處理
QQIC:查詢間隔時間,單位是秒;
查詢者的健壯變數(QRV)
如果不為0,QRV中包含中一個被查詢者使用的[健壯變數]的值,如果查詢者的健壯變數的值超過7,即QRV欄位的最大值,那麼QRV被設成0。路由器取最近收到的查詢中的QRV值作為它們自己的健壯性變數的值,除非最近收到的QRV是0,在這種情況下,接收者使用預設的健壯性變數值,或者是一個靜態配置的值。
查詢者的查詢間隔程式碼(QQIC)
查詢者的查詢間隔程式碼欄位指定查詢者使用的[查詢間隔]。實際的間隔,稱為查詢者的查詢間隔(QQI),以秒為單位表示,從查詢者的查詢間隔程式碼進行換算的方法如下:
if QQIC < 128 QQI=QQIC
if QQIC >= 128 QQI代表如下的一個浮點值:
0 1 2 3 4 5 6 7
1|exp |mant |
QQI = (mant | 0x10 ) << (exp + 3)
當前為非查詢者的多播路由器從最近收到的查詢中取QQI值作為自己的[查詢間隔]值,除非最近收到QQI是0,在這種情況下,接收路由器使用預設的[查詢間隔]值。
源數量Number_of_Source:
源數量(N)欄位表明該查詢中存在多少個源地址。在普通查詢或指定組查詢中這個值是0,在指定組和源的查詢中,這個值為非0值。
Sourceaddress[i] (i取值從1到n):
n個IP單播地址的陣列,n就是Number of Sources(N)欄位的值。
附加資料:
如果收到的查詢中的IP首部中資料報長度欄位表明除了上述的欄位之外,還有附加的資料存在,IGMPv3的實現在計算校驗和的時候必須包含這些資料,但是在傳送查詢的時候,必須忽略這些資料,一個IGMPv3的實現在上述欄位之外,不能再包含其它資料。
查詢訊息有三種類型的變體:
1、“普通查詢”由多播路由器發出,用於獲知鄰接介面(即查詢所傳輸的網路中所相連的介面)的完整的多播接收狀態。在一個普通查詢中,組地址欄位和源數量(N)欄位都為0。
2、“指定組查詢”由一臺多播路由器發出,用於獲知鄰接介面中跟某一個IP地址相關的多播接收狀態。在指定組查詢中,“組地址”欄位含有需要查詢的那個組地址,源數量(N)欄位為0。
3、“指定組和源查詢”由一臺多播路由器發出,用於獲知鄰接介面是否需要接收來自指定的這些源的,發往指定組的多播資料報。在一個指定組和源的查詢中,組地址欄位含有要查詢的多播地址,源地址[i]欄位含有相關的源地址。報告報文
欄位說明:
Type(8bit)
0x22 成員關係報告
Reserved( 8bit)和Reserved( 16bit):
都是表示保留欄位,不過在IGMP中為了使它們都保持對應的長度,所以才有了長度上的區別,它在傳送的時候是以0填充,在接收的時候是不作任何處理的。
校驗和
校驗和是對整個IGMP訊息以16位為一段進行取反求和。為了計算校驗和,校驗和欄位首先必須被置0。當收到一個數據,在處理之前,必須先對校驗和進行驗證。
Number_of_Group_Records(M):
該欄位表示該報告報文中包含有幾個組記錄
Group Record[i] (i 從 1 到M):
一個主機可能需要點播多個組播地址的組播業務,每個記錄包含了對應於其中一個組播地址的源地址列表等資訊,它受到Number_of_Group_Records的大小的影響。
每一個組記錄欄位是一整塊資料,其含有的資訊是關於傳送者在報告發送介面上的某一個多播組的成員關係。
每一個Group Reocrd的內部格式如下:
Record Type(8bit) |
Aux_Data_Len(8bit) |
(16bit)Number_of_Group_Sources (N) |
Multicast Address(32bit) |
||
Source Address [i] (i從1到N) |
||
Auxiliary Data |
欄位說明:
Aux Data Len:
輔助資料長度含有在組記錄中的輔助資料的實際長度,其單位是32bit字。它有可能是0,這就表示輔助資料不存在。
Number_of_Group_Sources:
源數量(N)欄位標明在組記錄中存在多少源地址。
MulticastAddress:
多播地址欄位標明該組記錄從屬的多播IP地址。
SourceAddress[i]:
源地址[i]欄位是一個數組,含有n個單播地址。n就是該記錄的源數量(N)欄位的值。
Auxiliary Data:
輔助資料欄位如果存在,它含有關於該組記錄的一些附加資訊。本文件所描述的協議IGMPv3,沒有定義任 何輔助資料。所以,IGMPv3的實現在任何傳輸的組記錄中都不應該含有任何輔助資料(即必須把Aux Data Len欄位置0)。並且在收到的所有組記錄中,必須忽略輔助資料的存在。關於輔助資料的語法和內部編碼會由將來版本的使用該欄位的IGMP或其擴充套件定義。
附加資料:
如果收到的報告中的IP首部的資料報長度欄位標明在最後一個組記錄後面有附加的資料存在。IGMPv3的實現必須在計算和驗證校驗和的時候包含這些附加資料,但是同時必須忽略這些附加資料。當傳送一個報告時,一個IGMPv3的實現在最後一個組記錄後面不能包含附加資料。
組記錄型別(Record Type):
在一個報告訊息中,有一定數量的不同型別的組記錄:
-“當前狀態記錄”由一個系統發出,用於響應在一個介面上收到的查詢。它報告了介面跟某一個多播IP地址相關的當前的接收狀態。當前狀態記錄的記錄型別可以是下面兩個值中的一個:
值 名字和含義
1 MODE_IS_INCLUDE-標明介面相關於某一指定多播地址的過濾模式為INCLUDE。該組記錄中的源地址[i]欄位含有該介面的相關於該多播地址的源列表(如果非空的話)。
2 MODE_IS_EXCLUDE-標明介面相關於某一指定多播地址的過濾模式為EXCLUDE。該組記錄中的源地址[i]欄位含有該介面的相關於該多播地址的源列表(如果非空的話)。
-“過濾模式改變記錄”是當本地的IPMulticastListen呼叫造成本地的介面層相關於某一特定多播IP地址的過濾模式的改變的時候(即從INCLUDE變到EXCLUDE,或者從EXCLUDE變到INCLUDE),由系統發出。這個記錄包含在一個報告中,而該報告是從發生改變的那個介面上發出來的。過濾模式改變記錄的記錄型別是以下兩個值中的一個:
值 名字和含義
3 CHANGE_TO_INCLUDE_MODE,標明介面相關於某一指定的多播地址的過濾模式改變到INCLUDE。該組記錄中的源地址[i]欄位含有該指定多播地址相關的新的源列表(如果非空的話)。
4 CHANGE_TO_EXCLUDE_MODE,標明介面相關於某一指定的多播地址的過濾模式改變到EXCLUDE。該組記錄中的源地址[i]欄位含有該指定多播地址相關的新的源列表(如果非空的話)。
-“源列表改變記錄”是當本地的IPMulticastListen呼叫造成本地的介面層相關於某一特定多播IP地址的源列表發生改變,並且該改變不跟過濾模式的改變產生衝突時,由系統發出。該記錄包含在一個報告中,而該報告是從發生改變的那個介面上發出來的。源列表改變記錄的記錄型別是以下兩個值中的一個:
值 名字和含義
5 ALLOW_NEW_SOURCE,標明組記錄中的源地址[i]欄位含有系統希望接收的發往某一多播地址的,新的源的列表。如果這是對一個INCLUDE列表的改變,那麼這些地址會被新增到列表中,如果這是對一個EXCLUDE列表的改變,那麼這些地址會被從列表中刪除。
6 BLOCK_OLD_SOURCE,標明組記錄中的源地址[i]欄位含有系統不希望再接收的發往某一多播地址的源的列表。如果這是對一個INCLUDE列表的改變,那麼這些地址會被從列表中刪除,如果這是對一個EXCLUDE列表的改變,那麼這些地址會被新增到列表中。
如果源列表的改變是同時新增新的源和阻止舊的源,這兩種組記錄會同時發往一個多播地址,一個是ALLOW_NEW_SOURCE,另一個是BLOCK_OLD_SOURCE。
我們把過濾模式改變記錄和源列表改變記錄都統一稱作狀態改變記錄。
不能識別的記錄型別值必須被丟棄。注意休息,定期活動頸椎,保持頸椎健康是一生的大事!
在IGMPV3中它有了以下的改進功能:
1.增加了主機的控制能力;
如何實現:IGMP V3不僅可以指定加入的組播組G,還能明確要求從哪個指定組播源S接受資訊,這也是指定源組播功能。
2.查詢訊息可以攜帶源地址;(源地址就是節目流地址)
3.響應訊息包含多組記錄:
如何實現:IGMP V1 V2版本的響應訊息和查詢訊息具有相同的報文結構,即報文中僅包含組地址資訊。IGMP V3響應訊息包含的組地址為224.0.0.22,,其中可以攜帶1個多則多個組記錄,在每個組記錄中,包含組播組地址、數目不等的源地址資訊。
4.取消響應的抑制機制:
原因:由於IGMP V3響應報文中同時攜帶源地址和組播組地址,而且包括Include和Exclude兩種狀態,為了減輕主機負擔無需響應抑制機制,即組成員可以獨立報告響應訊息。