IGMP

**網際網路組管理協定**（英語：**I**nternet **G**roup **M**anagement **P**rotocol，縮寫：**IGMP**）是用於管理網路協定多播組成員的一種通信協定。IP 主機和相鄰的路由器利用 IGMP 來建立多播組的組成員。像 ICMP 用於單播連接一樣，IGMP 也是 IP 多播說明的一個完整部分。IGMP 為網際網路協定的一種，屬於開放系統連結（OSI） 模組的第三層協定，IP 主機用它將主機的多點傳送成員人數報告給臨近的多點傳送路由器。

## IGMP 版本 0

### RFC 966，16 頁：

網際網路組管理協定（IGMP）被用在 IP 主機和它們即時相鄰多播代理之間，用以支援臨時組位址的分配和組成員的添加刪除。

### RFC 988，1，2，3 頁

IP 多點廣播定義為一個去往主機群 IP 資料的傳輸，有零個或多個主機組成的主機群通過單個 IP 目的位址標識。一個多點播送資料報被投遞給它的目的主機群的所有成員，具有和常規單路傳送 IP 資料報同樣的「盡力」安全性，那就是說該資料報不保證達到目的地組的所有成員，或者不和其他資料報具有相同的順序。主機組的成員數是動態的；也就是說，主機隨時可以參加和離開組。 沒有對主機組中的成員的數目或地點加以限制，但是成員僅限於那些擁有專用的接入密碼的主機。一個主機可能同時是多個組的成員。一個主機即使不是一個組的成員也可以給它傳送資料報。主機組可能永久性或暫時性的。永久性組具有一個眾所周知的，官方分配的 IP 位址。它是位址，非該組的成員，也就是說永久性；任何時間，一個永久性組也許有許多成員，甚至可能有零個成員。 另一方面，臨時性的組，當有一個主機的請求建立時被動態地指派一個位址。當它的成員數降至零，臨時性的組要解散時，它的位址可以重新分配。

臨時組的建立和組員身分資訊的維護是多播代理（存在於網際網路閘道器或其他專用的主機內的實體）的職責。至少有一個多播代理直接與每個支援 IP 多點廣播的 IP 網路或子網路相連。主機通過用鄰機代理交換報文來請求新建一個組、加入或離開現有組。多播代理還擔負多點播送 IP 資料報的互連網路運送工作。傳送一個多點播送 IP 資料報時，主機將它傳送到一個區域網路多播位址那裡，哪些位址標識目的地主機組的所有鄰機成員。如果該組具有在其他網路的成員，多播代理成為本地多播的輔助接收器並且通過網際網路閘道器系統中繼該資料報給其他網路上的代理。最後，另一個網路上的代理將資料報作為一個原生的多播傳送給他們自己目的組的鄰機成員。

### 2 級：充分支援 IP 多點廣播。

2 級容許一個主機去建立、加入和離開主機組，以及給主機組傳送 IP 資料報。它要求在主機內部實現 IGMP 並且擴充 IP 和區域網路服務介面。本備忘錄以下的所有部分可適用於實現 2 級。

### RFC 988，10 頁：

IP 模組內部，成員資格管理操作通過 IGMP 支援，這在附錄 I. 中規定。也使報文與每一上面規定的操作相對應，IGMP 還規定一個「deadman timer」程式藉此主機定期用多播代理確認它們的組員資格。

IP 模組必須維護一個資料結構，該資料結構列出主機當前所屬的所有主機組的 IP 位址、以及每個組的回送策略、存取關鍵字和時間變數。 這個資料結構被用於 IP 多址通信傳輸服務，了解哪些輸出資料報給回送，通過接收服務了解哪些入局資料報去接受。IGMP 和管理介面操作的用途是維護這個資料結構。

### RFC 988，13 頁：

IGMP 被用在 IP 主機和它們的緊接的鄰機多點播送代理之間支援臨時組的生成，添加和刪除一個組的成員，定期證實組員身分。IGMP 是一個不對稱協定而且這裡從一個主機觀點而非一個多播代理來加以說明。

像 ICMP（網際網路控制報文協定）一樣，IGMP 是一個 IP 的組成部分。它要求通過所有主機對應的 2 級 IP 多點廣播規範完全地實現。IGMP 報文被壓縮在 IP 資料報中，具有一個 [[IP 協定號列表 |IP 協定號碼]] 2。所有 IGMP 報文具有以下格式：

Type，8 位元，代表報文的類型：

* 1：建立組要求
* 2：建立組應答
* 3：加入組要求
* 4：加入組應答
* 5：離開組要求
* 6：離開組應答
* 7：確認組要求
* 8：確認組應答

Code，8 位元，在一個建立組請求訊息中代碼欄位指出新的主機組將是公共的或私有的：

* 0：公共
* 1：私有

在一個回答資訊中，代碼欄位規定要求的結果

* 0：請求答應
* 1：要求被拒絕，無資源
* 2：要求被拒絕，無效代碼
* 3：要求被拒絕，無效組位址
* 4：要求被拒絕，無效存取關鍵字
* 5-255：要求掛起，幾秒後重試

IGMP Checksum，16 位元，校驗和是從 IGMP 類型開始的 IGMP 報文中 16 位元一補數和的 16 位元一補數值。為了計算該校驗和，校驗和域應該為零。在封包傳輸過程中，校驗和被計算出來並插入域中。當收到封包的時候，校驗和再次被計算並相對於校驗和域進行驗證。當兩個校驗和不匹配時即發生錯誤。

Identifier，32 位元，在一個確認組請求訊息中，識別碼欄位包含零。在所有其他的請求訊息中，識別碼域包含一個值以便將來自同一個主機的其他要求與該要求區別開來。在一個回答資訊中，識別碼域包含與在對應請求訊息中同樣的值。

Group Address，32 位元

* 在一個組建立請求報文中，組位址欄位包含零。在所有其他的請求訊息中，組位址域包含一個主機組位址。
* 在一個組建立應答報文中，組位址域或包含新的指定的主機組位址（如果該要求被允許）或包含零（如果被拒絕）。在所有其他的應答報文中，組位址域包含與在對應請求報文中同樣的主機組位址。

Access Key，64 位元，在一個組建立請求報文中，存取關鍵字欄位包含零。在所有其他的請求訊息中，存取關鍵字域包含分配給主機組在組位址域辨識的存取關鍵字（零對於公共的組）。在一個組建立應答報文中，存取關鍵字域或包含一個非零的 64 位元編號（如果要求一個私有組被允許）或包含零。在所有其他的應答報文中，存取關鍵字域包含與在對應要求中相同存取關鍵字。

## IGMP 版本 1

### RFC1054，10-13 頁

網際網路組管理協定（IGMP v0）被 IP 主機用來向任何即時相鄰多播路由器報告它們的組成員關係。IGMP 是一個不對稱協定，在此處從一個主機而不是從一個路由器的觀點進行說明。（IGMP 也能對稱或不對稱地被用於多播路由器之間）

像 ICMP 一樣，IGMP 是 IP 的一個整體部分。它要求通過所有主機對應的 2 級 IP 多點廣播規範完全地實現。IGMP 報文被壓縮在 IP 資料報中，具有一個 IP 協定號碼 2。此備忘錄詳細說明了 IGMP 的版本 1。

非正式協定描述。多播路由器傳送主機成員關係查詢資訊（下文中稱為查詢）來發現在哪些主機組在它們附屬的本地網路上有成員。查詢被寫入所有主機組位址（位址是 224.0.0.1），攜帶的 IP 生存時間是 1。

主機通過產生主機成員關係報告（下文中稱為報告）來回應一個查詢。報告各個主機組到它們所屬的收到查詢的使用者介面。為了避免並行報告產生「內爆」，同時也減少所傳輸的報告總數，採用了以下兩種技術:

* 當一台主機收到一個查詢時，它並不是馬上傳送報告，而是為傳入查詢的網路介面上每個它的組成員關係啟動一個報告延遲時間。每個時間是在 0-D 秒隨機選擇的不同的值。當一個時間截止時，就為相應的主機組產生一個報告。因此，報告散布在一個 D 秒區間內而不是全部立刻發生。
* 一個報告伴隨一個與主機組位址等價的 IP 目的位址被傳送，IP 生存時間是 1，所以，同一個網路上同一個組的其他成員可以偵聽報告。如果一台主機聽到網路上同組的一個報告，就停止自己對該組的計時並且不會向該組產生報告。因而，在正常情況下，在網路上各組僅會由定時器截止最快的主機產生一個報告。注意到多播路由器收到所有的 IP 多播資料報，因此不需要明確註明位址。另外還要注意到路由器需要知道哪些主機屬於同一個組，除非在一個特殊網路上至少一個主機屬於一個組。

以上描述的還有兩個例外：首先，當收到一個查詢時，如果一個報告的延遲定時器已經開始計時，那個定時器不會被復位成一個新的隨機值，而是按其當前值繼續計時。第二，不會為全主機組（224.0.0.1）中的一個主機成員關係設定報告延遲定時器，該成員關係不會被報告。

如果一台主機使用一個偽亂數生成器來計算報告延遲，主機自己的一個專用 IP 位址應該被用作生成的一部分，以避免多個主機產生同樣延遲順序的機率。

一台主機應該確認一個收到的報告在其 IP 目的域和 IGMP 組位址域有同樣的 IP 主機組位址，以確保該主機自己的報告不會被一個錯誤接收的報告取消。主機應當放棄除了主機成員關係查詢（Host Membership Query）或主機成員關係報告（Host Membership Report）之外任何形式的 IGMP 訊息。

多播路由器定期傳送查詢以重新整理當前特定網路上的成員資訊。如果在一些查詢之後沒有收到一個特定組的報告，路由器就假定這個組沒有本地成員並且他們不需要為本地網路上的組正向遠端的多播。查詢通常不是被頻繁傳送的（每分鐘少於一次），以保持主機和網路上的 IGMP 額外開銷很低。儘管如此，當一個多播路由器啟動時，它也許會發出一些密集的查詢以便於快速建立其對於本地成員關係的資訊取得。

當一台主機加入到一個新的組時，它應當立即對該組傳送一個報告，而不是等待一個查詢，以防它正好是網路上該組的第一個成員。為避免初始化報告遺失和損壞，建議此報告在短延時後重複 1 到 2 次。一個簡單的實現方法就是假設收到一個僅面向該組的查詢，設定該組的隨機報告延遲定時器。

### RFC 1054，16，17 頁

**主機組位址分配：組位址捆綁**將 IP 主機組位址捆綁到物理主機上被認為和 IP 單播位址捆綁類似。一個 IP 單播位址被靜態捆綁到一個單 IP 網路上的單個本地網路介面。一個 IP 主機組位址是被動態捆綁到一個 IP 網路組上的本地網路組。

理解 IP 主機組位址並非捆綁到一個 IP 單播位址組非常重要。多播路由器不需要維持各個主機組獨立成員的列表。例如，一個連接到 Ethernet 的多播路由器僅需把一個 Ethernet 多播位址和各個有本地成員的主機組聯絡起來，而不是一個獨立 IP 成員或 Ethernet 位址的列表。

### RFC 1112，第 3 頁

**主機組位址**主機組由 D 類 IP 位址標記，即高四位為「1110」的那些 IP 位址。E 類 IP 位址，即那些高四位為「1111」的 IP 位址，是為了將來的編址方式而保留的。在 Internet 標準的點分十進位表示中，主機組位址的範圍是從 224.0.0.0 到 239.255.255.255。位址 224.0.0.0 被保證不分配給任何組，224.0.0.1 被分配所有 IP 主機的永久組（包括閘道器）。它被用於標記在直接相連的網路中所有多播主機。沒有多播位址（或其它 IP 位址）用來標記 Internet 上的所有主機。其它眾所周知的位址、永久組將在「已分配編號」（Assigned Numbers）文件中公布。

### RFC 1112，11 頁：

Internet 組管理協定（IGMP）用於 IP 主機向所有緊鄰的多播路由器報告它們的主機組成員關係。IGMP 是不對稱的協定，將從主機的視角而不是從多播路由器的視角描述它。（IGMP 也可以在多播路由器之間對稱或非對稱的使用。這樣的用法這裡沒有指定。）像 ICMP 一樣，IGMP 是 IP 的一個組成部分。要在所有符合 IP 多播規範的 2 級主機上實現。IGMP 報文封裝在 IP 資料報中，資料報的 IP 協定欄位為 2。

### RFC 1122，47 頁：

IGMP [RFC 1112] 是一個用於在單個網路上特定多播組中主機和閘道器間建立主機成員關係的協定。閘道器在連接一個多播路由協義時使用此資訊以支援通過 Internet 的 IP 多播。

此刻，IGMP 的實現是可選的，沒有 IGMP，一台主機仍然能參與它所在網路的本地多播。

### RFC 1122，67，68 頁：

主機應當支援全連接網路上的本地 IP 多播，為此聲明從 D 類 IP 位址到鏈路層的位址對映（見下文）。對本地 IP 多播的支援包括傳送多播資料報、加入多播組、接收多播資料報和離開多播組。這必須支援 RFC 1112 中除了 IGMP 協定自身之外的所有，這也是可選的。

IGMP 提供容許帶有資訊需求的多播路由的閘道器，以支援複合網路上的 IP 多播。此時，多播路由閘道器處於試驗性階段並沒有廣泛應用。因為主機沒有通過多播路由閘道器連接到網路上，或者不需要接收來自其他網路的多播資料報，IGMP 服務沒有目的性，因此目前 IGMP 是任選的。儘管如此，RFC 1112 的其他部分在當前被建議作為一個更好的本地廣播位址的選擇用於提供 IP 層接入的本地網路多播位址。希望當多播路由閘道器廣泛使用的時候，在將來的資料中建議使用 IGMP。

如果 IGMP 無法實現，主機應當在 IP 層被初始化且啟用時只有一個成員時仍然加入全主機（all-host）組（224.0.0.1）。

加入全主機（all-host）組將嚴格支援多播的本地使用，例如閘道器探測協定，甚至在 IGMP 無法實現的時候也是這樣。

當前為如下類型的網路做了 D 類 IP 位址到本地網路對映的說明：

* Ethernet/IEEE 802.3
* 任何支援廣播但不是多播的網路，編址：所有 D 類 IP 位址對映到本地廣播位址。
* 任何類型的對等連結（例如 SLIP 或 HDLC 連結）：無需對映，所有 IP 多播資料報按現狀在本地影格中傳送

其他類型網路的對映會在將來說明。主機應當為高層協定或應用提供一種決定哪種主機連接網路支援 IP 多播編址的方法。

### RFC 1812，84 頁：

IGMP 是一種用於在單個物理網路上主機和多播路由器之間建立特定多播組內主機成員關係的協定。多播路由器在通過多播路由協定連接時使用此資訊，以支援 Internet 上的正向 IP 多播。路由器應當實現 IGMP 的多播路由器部分。

## IGMP 版本 2

### RFC 2236，1，2 頁：

IGMPv2 允許組成員關係的終止被迅速報告給路由協定，這一點在高頻寬多播組以及揮發性組成員關係的子網路中很重要。

像 ICMP 一樣，IGMP 是 IP 的一個完整部分。它要求在所有希望接收 IP 多播的主機上實現。IGMP 訊息封裝在 IP 資料報中，其 IP 的協定號為 2。所有在該文件中說明了的 IGMP 訊息均會用 TTL 為 1 進行傳遞，並在 IP 頭中包括了 IP 路由檢測選項。

### RFC 2113，第 2 頁：

路由器警告選項語意是「路由器應該更仔細地檢查這個包」。通過在其協定訊息的 IP 頭裡包含路由器警告選項，RSVP 能在對普通封包的推進有少量或沒有效能損失的情況下來截取訊息。

### RFC 2236，4，5 頁：

多播路由器使用 IGMP（v2）獲知哪些組在其附屬物理網路上有成員。多播路由器保留一個包括各附屬網路多播組成員關係和各成員關係計時器的列表。多播組成員關係意味著在一個給定附屬網路上至少出現一個多播組的一個成員，而不是所有成員的列表。當主機收到一個通用查詢時，將為各個組（不包括全系統組）設定延遲計時器，該組就是收到查詢的介面的一個成員。

當路由器接收到了報告，它就會把該組報告加入到一個組播組成員列表中，並且會為其成員關係設一個值為組成員生存週期的計時器。當一個主機加入了一個組播組，則應該立即發送一個非請求的版本 2 的成員關係報告給組，以防它是網路上該組的第一個成員。

當一主機離開一個組播組，如果它是最後一個主機，除它外沒有其他的機器來報告成員關係了，則它應該發送一條離開組的訊息給所有路由器，位址為組播組（224.0.0.2）。

## IGMP 版本 3

RFC 3376