Internet Group Management Protocol (IGMP) とは、IPネットワーク上でマルチキャスト(特定の一対多または多対多通信)を行うために、マルチキャストに参加するホストのグループを設定し、ネットワークに通知するための通信プロトコルである。マルチキャストは、動画や音楽のストリーミングなど、同時に多数のホストへ同一のデータを送信するときに通信を効率化する技術である。

IGMPはIPv4ネットワーク向けのマルチキャストプロトコルであり、インターネット・プロトコル (IP) 上に直に実装されている。一方、IPv6では同様の役割を担うMulticast Listener Discovery (MLD) がICMPv6上に実装されている。

## 設計

- グループアドレスはローカルネットワークで割り当てた専用のグループアドレスか、アプリケーションごとにIANAによって割り当てられたグローバルアドレス、もしくはPIM-SSMのために割り当てられたグローバルアドレス(詳しくは#Membership Query パケットを参照)を用いる。
- 受信側ホストは、参加するグループのアドレスをIGMPパケットによって最寄りのルータへ通知する。
- 送信側ホストは、自身のユニキャストアドレス発・グループアドレス宛のパケットを、最寄りのルータにUDPなどで送信する。
- ルータは、グループの参加しているホストの属しているネットワーク(LANセグメント)すべてにパケットが行き渡るように、パケットを転送する。具体的なルータ間の伝送経路は、Protocol-Independent MulticastやDVMRPなどのプロトコルによって管理される。ユニキャスト用のアドレステーブルとは別個のアドレステーブルが使われる。
- 受信側ルータからホストの間のL2スイッチは、グループアドレス宛のパケットをブロードキャストする。ただし、スイッチを通過するIGMPパケットを認識し、どのホストがどのグループに参加しているかを記憶すること (IGMP snooping) ができるL2スイッチは、グループへ参加しているホストのあるノードへのみパケットを転送することができ、不必要な帯域を浪費しないですむ。
- IPマルチキャストでは、TCPによってパケットの到達を確認することはできない。品質の高いネットワークを用いるか、品質を管理する仕組みを別途用意する必要がある。

## 標準

IGMP は Internet Engineering Task Force (IETF) によって定められ、Request for Comments (RFC) として公開されている。
2011年現在IGMPv3が最新の規格である。IGMPv2ではグループからの離脱を通知する方法が追加され、IGMPv3では指定されたIPアドレスからのみマルチキャストを受信する方法 (PIM-SSMへの対応)などが追加された。

## ホストとルータの実装

IGMPにホストとして対応しているOSには、FreeBSDやLinux、Microsoft Windowsなどがある。
IGMPにルータとして対応しているルーティングプログラムには、mrouted (Linux), XORP, Quaggaなどがある。

## セキュリティ

IGMPは一般的なアプリケーションで用いられるほど普及しておらず、またWindowsではDoS攻撃に利用される可能性のある脆弱性が過去に発見されたことがあるため、およびIGMPには認証機構が無いために、攻撃者がマルチキャストを用いて帯域を占有するDoS攻撃を行う恐れがあるためか、ファイアウォールではデフォルトでIGMPによる通信を許可しない設定になっていることが多い。

## プロトコルの詳細

技術的詳細については、RFCをご覧ください。

IGMPで定義されるパケットは三種類である。

### Membership Query パケット

64ビット以降はIGMPv3以降で新たに付け加えられた。

ある特定のホストが送信するマルチキャストのパケットのみを受信したい場合、グループアドレスにPIM-SSM用グローバルアドレスに割り当てられた範囲の中からIPアドレスを一つ指定し、ソースアドレスに送信元ホストのIPアドレスを指定する。この機能とPIM-SSMを併用することで、ホスト毎にグループアドレスをあらかじめ割り当てることなく、疎なマルチキャスティング(ネットワークのノード数に比べて、マルチキャストチャンネル一つあたりの受信ノードが少ない場合)においても効率的な伝送ができる。

この機能を使わない場合は、ソースアドレスの数に0を指定する。この場合、参加するグループアドレス宛のパケットは送信元ホストに関わらず、全てのパケットが受信される。

### Membership Report パケット

IGMP Membership Report パケット

| bit offset | 0–7 | | | | | | | | 8–15 | | | | | | | | 16–31 | | | | | | | | | | | | | | | |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 0 | パケットの型 | | | | | | | | 予約領域 (0) | | | | | | | | チェックサム | | | | | | | | | | | | | | | |
| 32 | 予約領域 (0) | | | | | | | | | | | | | | | | ホストが参加しているグループの数 (N) | | | | | | | | | | | | | | | |
| 64 | グループ[1]への参加状態 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|  | . . . | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|  | グループ[2]への参加状態 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|  | . . . | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|  | . . . | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|  | グループ[N]への参加状態 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|  | . . . | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|

### Leave Group パケット

IGMP Leave Group パケット

| bit offset | 0–7 | | | | | | | | 8–15 | | | | | | | | 16–31 | | | | | | | | | | | | | | | |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 0 | パケットの型 (0x17) | | | | | | | | 応答時間の締切り | | | | | | | | チェックサム | | | | | | | | | | | | | | | |
| 32 | グループのアドレス | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |

## 普及

IPv4やIPv6のマルチキャストは、専用網ではIP放送のためのネットワークとして商業的に利用されている。

インターネット (the Internet) では、構成しているネットワークのルータがマルチキャストに対応したものに置き換わることはなかった。IPv6網では、ネットワーク機器は当初からすべてMLDに対応しているが、ISP間レベルでのマルチキャスト経路の構成は実験的に行われているだけである。