IGMP 是Internet Group Management Protocol(互联网组管理协议)的简称。它是TCP/IP 协议族中负责IP 组播成员管理的协议,用来在IP 主机和与其直接相邻的组播路由器之间建立、维护组播组成员关系。
到目前为止,IGMP 有三个版本: 1、IGMPv1(由RFC 1112 定义) 2、IGMPv2(由RFC 2236 定义) 3、IGMPv3(由RFC 3376定义)
一、IGMPv1
报文格式
1、版本:
版本字段包含IGMP版本标识,因此设置为1。 2、类型:
成员关系查询 (0x11) 成员关系报告 (0x12) 3、校验和 4、组地址:
当一个成员关系报告正被发送时,组地址字段包含组播地址。 当用于成员关系查询时,本字段为0,并被主机忽略。 组成员加入过程
当一个主机希望接收一个组播组的数据,则发送成员加入报告给组播组。
IGMPv1 join包如下:
查询与响应过程
路由器RTA(IGMP查询器)周期性地(默认60秒)向子网内所有主机(代表子网内所有主机)发送成员关系查询信息。
所有主机收到IGMPv1成员关系查询信息,一主机首先向组播组发送IGMPv1成员关系报告。
组的其他成员监听到报告后抑制自己的成员关系报告发送。
抑制机制
当主机收到IGMP成员关系查询时,对它已经加入的每个组播组启动一个倒计数报告计时器。各个报告计时器初始值为从0到最大响应之间一个随机数,默认值是10秒。
计时器到时的主机则主动发送成员关系报告,目的地为该主机所属的组地址。 其它主机收到该成员关系报告,则抑制成员关系报告的发送,并删除计时器。
组成员离开过程
主机“默不作声”地离开组(不发送报告了)。 路由器发送成员关系查询信息。
路由器没有收到该组的IGMP报告,则再发送成员关系信息(3次查询周期过后)。 组播组超时,剪枝。
二、IGMPv2
报文格式 1、类型
成员关系查询(0x11)
常规查询:用于确定哪些组播组是有活跃的,即该组是否还有成员在使用,常规查询地址由全零表示;
特定组查询:用于查询某具体组播组是否还有组成员。 版本2成员关系报告(0x16) 版本1成员关系报告(0x12) 离开组消息(0x17) 2、最大响应时间
以秒为单位,默认值是100,即10秒。 3、校验和 4、组地址
在成员查询消息中,发送一个普遍查询报文时组地址域应设为0,当发送一个对特定组的查询报文时,则应设置组的地址。
在成员报告或离开组的消息中,组的地址域保留了要报告或要离开的地址。 组成员加入过程
当一个主机加入了一个组播组,则应该立即发送一个或多个版本2的成员关系报告给组播组。
IGMPv2的join包如下:
查询与响应过程
与IGMPv1相同,都存在抑制机制。
增加了最大响应时间来指定延时值来规定所有主机的查询响应延时的上限,此外最大响应时间在IGMP查询器上配置,只应用在成员关系查询信息。
查询器选择过程
路由器启动,主动发出到所有组播系统组()的IGMPv2常规查询信息。
收到常规查询信息的路由器,会把此信息的源IP地址和接收口的IP地址作比较,拥有最低IP地址的路由器被选举为IGMP查询路由器。
非查询路由器启动一个查询计时器,周期检查IGMP查询路由器的状态。
组成员离开过程
主机向发送离开组消息(报文中含有要离开的组地址)。 路由器向这个组()发送特定组查询。
1秒钟内没有收到该组的报告,发送第二个特定组查询。 二个查询信息后未收到主机响应,组超时,离开组。 IGMPv2的Leave如下:
三、IGMPv3
在IGMPv1/v2的基础上,IGMPV3提供了额外的源过滤多播功能。在IGMPv1/v2中,主机只根据组地址来决定加入某个组并从任何一个源接收发给该组地址的组播流。而使用IGMPv3的主机通告该主机所希望加入的 多播组,同时还通告该主机所希望接收的多播源的地址。主机可以通过一个包括列表或一个排除列表来指明希望从哪些源能接收多播流。同时IGMPv3带来的另外一个好处是节省带宽,避免不需要的、非法的组播数据流占用网络带宽,这尤其在多个多播源共用一个多播地址的网络环境中表现明显。
IGMPv3的过程同v2类似。IGMPv3能够向下兼容IGMPv1和IGMPv2。 IGMPv3查询和报告报文增强了功能: (1) 携带源地址的查询报文
IGMPv3 不仅支持IGMPv1 的普遍组查询和IGMPv2 的特定组查询,而且还增加了对特定源组查询的支持:
普遍组查询报文中,既不携带组地址,也不携带源地址; 特定组查询报文中,携带组地址,但不携带源地址;
特定源组查询报文中,既携带组地址,还携带一个或多个源地址。 (2) 包含多组记录的报告报文
IGMPv3 报告报文的目的地址为,可以携带一个或多个组记录。在每个组记录中,包含有组播组地址和组播源地址列表。组记录可以分为多种类型,如下:
IS_IN:表示组播组与组播源列表之间的过滤模式为INCLUDE,即只接收从指定组播源