IGMPIGMP是InternetGroupManagementProtocol(互联网组管理协议)的简称。它是TCP/IP协议族中负责IP组播成员管理的协议,用来在IP主机和与其直接相邻的组播路由器之间建立、维护组播组成员关系。到目前为止,IGMP有三个版本:1、IGMPv1(由RFC1112定义)2、IGMPv2(由RFC2236定义)3、IGMPv3(由RFC3376定义)一、IGMPv11.1报文格式1、版本:版本字段包含IGMP版本标识,因此设置为1。2、类型:成员关系查询(0x11)成员关系报告(0x12)3、校验和4、组地址:当一个成员关系报告正被发送时,组地址字段包含组播地址。当用于成员关系查询时,本字段为0,并被主机忽略。1.2组成员加入过程当一个主机希望接收一个组播组的数据,则发送成员加入报告给组播组。IGMPv1join包如下:1.3查询与响应过程路由器RTA(IGMP查询器)周期性地(默认60秒)向子网内所有主机(224.0.0.1代表子网内所有主机)发送成员关系查询信息。所有主机收到IGMPv1成员关系查询信息,一主机首先向组播组发送IGMPv1成员关系报告。组的其他成员监听到报告后抑制自己的成员关系报告发送。1.4抑制机制当主机收到IGMP成员关系查询时,对它已经加入的每个组播组启动一个倒计数报告计时器。各个报告计时器初始值为从0到最大响应之间一个随机数,默认值是10秒。计时器到时的主机则主动发送成员关系报告,目的地为该主机所属的组地址。其它主机收到该成员关系报告,则抑制成员关系报告的发送,并删除计时器。1.5组成员离开过程主机“默不作声”地离开组(不发送报告了)。路由器发送成员关系查询信息。路由器没有收到该组的IGMP报告,则再发送成员关系信息(3次查询周期过后)。组播组超时,剪枝。二、IGMPv22.1报文格式1、类型成员关系查询(0x11)常规查询:用于确定哪些组播组是有活跃的,即该组是否还有成员在使用,常规查询地址由全零表示;特定组查询:用于查询某具体组播组是否还有组成员。版本2成员关系报告(0x16)版本1成员关系报告(0x12)离开组消息(0x17)2、最大响应时间以0.1秒为单位,默认值是100,即10秒。3、校验和4、组地址在成员查询消息中,发送一个普遍查询报文时组地址域应设为0,当发送一个对特定组的查询报文时,则应设置组的地址。在成员报告或离开组的消息中,组的地址域保留了要报告或要离开的地址。2.2组成员加入过程当一个主机加入了一个组播组,则应该立即发送一个或多个版本2的成员关系报告给组播组。IGMPv2的join包如下:2.3查询与响应过程与IGMPv1相同,都存在抑制机制。增加了最大响应时间来指定延时值来规定所有主机的查询响应延时的上限,此外最大响应时间在IGMP查询器上配置,只应用在成员关系查询信息。2.4查询器选择过程路由器启动,主动发出到所有组播系统组(224.0.0.1)的IGMPv2常规查询信息。收到常规查询信息的路由器,会把此信息的源IP地址和接收口的IP地址作比较,拥有最低IP地址的路由器被选举为IGMP查询路由器。非查询路由器启动一个查询计时器,周期检查IGMP查询路由器的状态。2.5组成员离开过程主机向224.0.0.2发送离开组消息(报文中含有要离开的组地址224.1.1.1)。路由器向这个组(224.1.1.1)发送特定组查询。1秒钟内没有收到该组的报告,发送第二个特定组查询。二个查询信息后未收到主机响应,组224.1.1.1超时,离开组。IGMPv2的Leave如下:三、IGMPv3在IGMPv1/v2的基础上,IGMPV3提供了额外的源过滤多播功能。在IGMPv1/v2中,主机只根据组地址来决定加入某个组并从任何一个源接收发给该组地址的组播流。而使用IGMPv3的主机通告该主机所希望加入的多播组,同时还通告该主机所希望接收的多播源的地址。主机可以通过一个包括列表或一个排除列表来指明希望从哪些源能接收多播流。同时IGMPv3带来的另外一个好处是节省带宽,避免不需要的、非法的组播数据流占用网络带宽,这尤其在多个多播源共用一个多播地址的网络环境中表现明显。IGMPv3的过程同v2类似。IGMPv3能够向下兼容IGMPv1和IGMPv2。IGMPv3查询和报告报文增强了功能:(1)携带源地址的查询报文IGMPv3不仅支持IGMPv1的普遍组查询和IGMPv2的特定组查询,而且还增加了对特定源组查询的支持:普遍组查询报文中,既不携带组地址,也不携带源地址;特定组查询报文中,携带组地址,但不携带源地址;特定源组查询报文中,既携带组地址,还携带一个或多个源地址。(2)包含多组记录的报告报文IGMPv3报告报文的目的地址为224.0.0.22,可以携带一个或多个组记录。在每个组记录中,包含有组播组地址和组播源地址列表。组记录可以分为多种类型,如下:IS_IN:表示组播组与组播源列表之间的过滤模式为INCLUDE,即只接收从指定组播源列表发往该组播组的组播数据。IS_EX:表示组播组与组播源列表之间的过滤模式为EXCLUDE,即只接收从指定组播源列表之外的组播源发往该组播组的组播数据。TO_IN:表示组播组与组播源列表之间的过滤模式由EXCLUDE转变为INCLUDE。TO_EX:表示组播组与组播源列表之间的过滤模式由INCLUDE转变为EXCLUDE。ALLOW:表示在现有状态的基础上,还希望从某些组播源接收组播数据。如果当前的对应关系为INCLUDE,则向现有组播源列表中添加这些组播源;如果当前的对应关系为EXCLUDE,则从现有组播源列表中删除这些组播源。BLOCK:表示在现有状态的基础上,不再希望从某些组播源接收组播数据。如果当前的对应关系为INCLUDE,则从现有组播源列表中删除这些组播源;如果当前的对应关系为EXCLUDE,则向现有组播源列表中添加这些组播源。IGMPv3的join包如下:IGMPv3的leave包如下:IGMPv3的query包如下:IGMP三个版本的比较:四、组播IP地址:组播地址范围224.0.0.0-239.255.255.255保留组播地址224.0.0.0-224.0.0.255224.0.1.0-224.0.1.255本地管理组地址239.0.0.0-239.255.255.255用户组播地址224.0.2.0-238.255.255.255组播MAC地址:以太网:01-00-5e-xx-xx-xx常用的保留组播地址永久组地址含义224.0.0.1所有系统,包括主机与路由器224.0.0.2所有组播路由器224.0.0.3未分配224.0.0.4DVMRP(DistanceVectorMulticastRoutingProtocol,距离矢量组播路由协议)路由器224.0.0.5OSPF(OpenShortestPathFirst,开放最短路径优先)路由器224.0.0.6OSPF指定路由器/备用指定路由器224.0.0.7ST(SharedTree,共享树)路由器224.0.0.8ST主机224.0.0.9RIP-2(RoutingInformationProtocolversion2,路由信息协议版本2)路由器224.0.0.11移动代理224.0.0.12DHCP(DynamicHostConfigurationProtocol,动态主机配置协议)服务器/中继代理224.0.0.13所有PIM(ProtocolIndependentMulticast,协议无关组播)路由器224.0.0.14RSVP(ResourceReservationProtocol,资源预留协议)封装224.0.0.15所有CBT(Core-BasedTree,有核树)路由器224.0.0.16指定SBM(SubnetworkBandwidthManagement,子网带宽管理)224.0.0.17所有SBM224.0.0.18VRRP(VirtualRouterRedundancyProtocol,虚拟路由器冗余协议)五、IGMPSNOOPINGIGMPSnooping运行在链路层,是运行在二层以太网交换机上的组播约束机制,用于管理和控制组播数据转发。当二层以太网交换机收到主机和路由器之间传递的IGMP报文时,IGMPSnooping分析IGMP报文所带的信息。当监听到主机发出的IGMP主机报告报文时,交换机就将该主机加入到相应的组播MAC地址表中。当监听到主机发出的IGMP离开报文时,交换机就将删除与该主机对应的组播MAC地址表中。通过不断地监听IGMP报文,交换机就可以在二层建立和维护组播MAC地址表,交换机就可以根据组播MAC地址表转发从路由器下发的组播报文。没有运行IGMPSnooping时,组播报文将在二层广播。yig