> For the complete documentation index, see [llms.txt](https://valineliu.gitbook.io/deuterium-wiki/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://valineliu.gitbook.io/deuterium-wiki/reading/cs-jing-dian-shu-ji/tcpv1/ch13-internet-group-management-protocol.md).

# ch13: Internet Group Management Protocol

IGMP

![13.IGMP](https://tva1.sinaimg.cn/large/007S8ZIlly1ggjmitezacj31670u0tej.jpg)

## Intro

IGMP是Internet组管理协议，能够让一个物理网络上的所有主机和路由器知道当前所在的多播组。

多播路由器需要知道这些信息来知道将多播数据报发送到哪些接口。

和ICMP一样，IGMP属于IP层的一部分。

IGMP报文通过IP数据报进行传输。

不过IGMP报文的长度是固定的。

格式：

![](https://tva1.sinaimg.cn/large/007S8ZIlly1ggjlxe32sqj30ms0ck75i.jpg)

## IGMP Message

消息格式如下：

![](https://tva1.sinaimg.cn/large/007S8ZIlly1ggjlxtm17rj31go0csgo0.jpg)

对于type来说，1表示多播路由器发送的请求，2是主机返回的响应。

组地址就是D类IP地址。在请求中，这个地址设置成0。

## IGMP Protocol

### Joining a Multicast Group

多播的基础是一个进程的概念，这个进程可以在主机给定的接口上加入某个多播组。

同样，这个进程也可以退出一个多播组。

这就要求支持多播的主机提供这样，加入与退出多播组的api。

同时主机也需要维护一个保存了进程和多播组的关系的表。

### IGMP Reports and Queries

![](https://tva1.sinaimg.cn/large/007S8ZIlly1ggjmd2bwzbj318i0hmdiu.jpg)
