IGMP网际组管理协议

路由器如何知道自己各接口所在局域网中是否有某个多播组的成员?
网际组管理协议IGMP
page=462

  • 网际组管理协议(Internet Group Management Protocol,IGMP)是TCP/IP体系结构网际层中的协议
  • 其作用是让连接在本地局域网上的多播路由器知道本局域网上是否有主机(实际上是主机中的某个进程)加入或退出了某个多播组
  • IGMP仅在本网络有效,使用IGMP并不能知道多播组所包含的成员数量,也不能知道多播组的成员都分布在哪些网络中
  • 仅使用IGMP并不能在因特网上进行IP多播。连接在局域网上的多播路由器还必须和因特网上的其他多播路由器协同工作,以便把IP多播数据报用最小的代价传送给所有的多播组成员,这就需要使用多播路由选择协议

IGMP的三种报文类型

三种报文类型(IGMP报文被封装在IP数据报中传送)

  • 协议字段的值 = 2,表示数据载荷部分是IGMP报文
  • 目的地址字段的值根据其所封装IGMP报文类型各有不同,但都属于IP多播地址
  • 生成时间TTL字段的值 = 1,避免封装IGMP报文的IP多播数据报被路由器转发到其他网络

成员报告报文

成员报告报文
加入多播组(由组内一个成员声明即可)

成员查询报文

成员查询报文
主要查询的特定多播组的 IP 多播地址

离开组报文

离开组报文
当主机要退出某个多播组时,可主动发送一个离开组报文而不必等待多播路由器的查询。这样可使多播路由器能够更快地发现某个组有成员离开

IGMP的工作原理

IGMP加入多播组

网际组管理协议IGMP的基本工作原理 ——加入多播组
page=472

  • 主机 A 想加入多播组 X,则主机 A 应向多播组 X 的多播地址发送 IGMP 报文,说明自己想要成为里面的成员;
  • 多播路由器收到 IGMP 报文后,解析该报文,把主机 A 的多播 IP 地址加入到多播组列表中。

    IGMP成员报告报文封装在IP多播数据报中
    IP多播数据报封装在以太网多播帧
    IGMP成员报告报文的内容:226.0.9.26
    IP多播数据报的目的地址: 226.0.9.26
    以太网多播帧的目的地址:01-00-5E-00-09-1A

IGMP监视多播组的成员变化的过程

网际组管理协议IGMP的基本工作原理 ——监视多播组的成员变化
page=478

  • 多播路由器默认每隔 125 秒就向其直连网络发送一个封装有 IGMP 报文的 IP 多播数据报;
  • 只要某个多播组的一个主机响应(使用延迟响应,响应时间在 1-10 秒内随机),则认为这个组是活跃的;
  • 若连续多次查询,某个多播组均没有一个主机响应,则认为这个组不活跃,将该组从多播组列表中删除

Attention

  • 同一网络中的多播路由器可能不止一个,但没有必要每个多播路由器都周期性地发送IGMP成员查询报文。
  • 只要在这些多播路由器中选择一个作为查询路由器,由查询路由器发送IGMP成员查询报文,而其他的多播路由器仅被动接收响应并更新自己的多播组列表即可。
  • 选择查询路由器的方法:
    • 每个多播路由器若监听到源IP地址比自己的IP地址小的IGMP成员查询报文则退出选举。
    • 最后,网络中只有IP地址最小的多播路由器成为查询路由器

IGMP退出多播组的过程

网际组管理协议IGMP的基本工作原理 ——退出多播组
page=488

IGMPv2 在 IGMPv1 的基础上增加了一个可选项:当主机要退出某个多播组时,可主动发送一个离开组报文,而不必等待多播路由器的查询。这样可使多播路由器能够更快地发现某个组有成员离开