華爲igmp 協議 pdf:下載 鏈接: https://pan.baidu.com/s/1geEqpzH
轉載請註明:點擊打http://blog.csdn.net/shanzhizi/article/details/7645330
彙總一下IGMP三個版本的協議包的格式,因爲是簡單的彙總,因此對於字段沒有詳細說明,對個別字段的說明可能不準確,對於v3各個字段的詳細說明請參考IGMPv3的標準文檔。
關於IGMP協議原理請參考“IGMP技術總結”
IGMPv1 包格式
字段說明:
版本:
即IGMP版本號,在IGMPv1中應爲0x1。
類型:
即IGMP報文類型
1=主機成員查詢
2=主機成員報告
在IGMPv2中這一字段擴充爲8位。
組地址:
在報告報文中指定爲多播組地址,在查詢報文中該字段爲0
IGMPv2包格式
字段說明:
類型:
0x11 成員查詢
0x12 版本1成員報告
0x16 版本2成員報告
0x17 離開組
在IGMP版本2中,舊的4位版本字段和舊的4位類型字段拼成了一個新的8位類型字段,通過分別將成員查詢(版本1和版本2的)及版本1的成員報告報文的IGMP版本2的類型代碼置爲0x11和0x12,保持了IGMP版本1和版本2包格式的向後兼容。
最大響應時間:
在發出響應報告前的以1/10秒爲單位的最長時間,缺省值爲10秒。
新的最大響應時間(以1/10秒爲單位)字段允許查詢用路由器爲它的查詢報文指定準確的查詢間隔響應時間。IGMP版本2主機在隨機選擇它們的響應時間值時以此作爲上限。
這樣在查詢響應間隔時有助於控制響應的爆發。
組地址:
多播組地址(如果是通用查詢則爲0.0.0.0)
除了在通用查詢時這一字段置爲0.0.0.0外,這一字段和IGMP版本1中的這一字段意義相同。
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兩種狀態,爲了減輕主機負擔無需響應抑制機制,即組成員可以獨立報告響應消息。