IGMP(整理)

来源:互联网 发布:mac chrome 书签备份 编辑:程序博客网 时间:2024/06/04 17:54

1. 概念介绍

IP有三种地址:单播地址, 广播地址,多播地址。广播和多播仅应用于UDP。每个以太网帧包含源主机和目的主机的以太网地址。通常每个以太网帧发往单个目的主机,目的地址指明单个接收接口,因而称为单播。 一个主机要向网上的所有其他主机发送帧,就是广播。一个主机要向网上的多个主机发送帧,就是多播。


1.1.单播(unicast)

单播是说,对特定的主机进行数据传送。例如给某一个主机发送IP数据包。这时候,数据链路层给出的数据头里面是非常具体的目的地址,对于以太网来 说,就是网卡的MAC地址(不是FF-FF-FF-FF-FF-FF这样的地址)。现在的具有路由功能的主机应该可以将单播数据定向转发,而目的主机的网 络接口则可以过滤掉和自己MAC地址不一致的数据。

1.2.广播(broadcast)

广播是主机针对某一个网络上的所有主机发送数据包。这个网络可能是网络,可能是子网,还可能是所有的子网。如果是网络,例如A类网址的广播就是 netid.255.255.255,如果是子网,则是netid.netid.subnetid.255;如果是所有的子网(B类IP)则是则是 netid.netid.255.255。广播所用的MAC地址FF-FF-FF-FF-FF-FF。网络内所有的主机都会收到这个广播数据,网卡只要把 MAC地址为FF-FF-FF-FF-FF-FF的数据交给内核就可以了。一般说来ARP,或者路由协议RIP应该是以广播的形式播发的。

广播地址有4种,第一种就叫做受限的广播地址:255.255.255.255,含有目的地为这个地址的数据不会被路由器转发,从而没有子网的概念,在本地就很安全,把数据发送到其他子网中去。即便你划分了子网,但是你的这个地址不会被路由器转发它携带的数据,无论如何都在你自己的本地网络中。

受限的广播:受限的广播地址是255.255.255.255。该地址用于主机配置过程中IP数据报的目的地址。主机可能还不知道它所在的网络的网络掩码,甚至连它的IP都不知道。
指向网络的广播:指向网络的广播地址是主机号全为1的地址。A类网络广播地址为netid 255.255.255.其中netid为A类的网络的网络号。
指向子网的广播:指向子网的广播地址为主机号全为1且有特定子网号的地址,作为子网直接广播地址的IP地址需要了解子网的掩码。
指向所有子网的广播:指向所有子网的广播地址的子网号及主机号为全1。

1.3.多播(multicast)

可以说广播是多播的特例,多播就是给一组特定的主机(多播组)发送数据,这样,数据的播发范围会小一些(实际上播发的范围一点也没有变小),多播的MAC地址是最高字节的低位为一,例 如01-00-00-00-00-00。多播组的地址是D类IP,规定是224.0.0.0-239.255.255.255。D类IP地址不识别互联网的单个接口,但识别接口组。多播组的成员根据各系统上运行的进程的情况变化的。多接口的主机可能针对每个接口,都有不同的多播组成员关系表。

IP多播提供两类服务:
1)向多个目的地址传送数据
2)客户对服务器的请求(如BOOTP协议)

多播组地址:

 多播组地址包括为1110的最高4bit和多播组号。范围从224.0.0.0到239.255.255.255。能够接收一个特定多播地址数据的主机集合称为主机组,一个主机组可以跨越多个网络。

     eg. 224.0.0.1 代表“该子网内所有的系统组”,224.0.0.2代笔“该子网内的所有路由器组”。多播地址224.0.1.1用作网络时间协议NTP,224.0.0.9用作RIP-2。
     多播组地址到以太网的转换:
     IANA拥有一个以太网地址块,即高24bit为00:00:5e。IANA将其中的一半分配为多播地址。任何一个以太网地址的首字节必须是01,意味着IP多播相对应的以太网地址范围从01:00:5e:00:00:00到01:00:5e:7f:ff:ff
     D类IP地址到以太网多播地址的映射如图所示:
     由于多播组号中的最高5位在映射过程中被省略,因此每个以太网多播地址对应的多播地址组不唯一的。既然地址映射不唯一,那么设备驱动程序或者IP层就必须对数据报进行过滤。
     单个物理网络的多播是简单的。多播进程将目的IP地址指明为多播地址。设备驱动程序将它转换为相应的以太网地址,然后把数据发送出去。

对于多播地址,有几个特殊的多播地址被占用,他们是
224.0.0.1--该子网内所有的系统组。
224.0.0.2--该子网内所有的路由器。
224.0.1.1--网络实现协议NTP专用IP。
224.0.0.9--RIPv2专用IP

224.0.0.0-----224.0.0.255是有特殊用途的保留地址,239.0.0.0-----239.255.255.255是私网地址,224.0.1.0-----238.255.255.255是用于公网上的组播地址。


虽然多播比较特殊,但是究其原理,多播的数据还是要通过数据链路层进行MAC地址绑定然后进行发送。所以一个以太网卡在绑定了一个多播IP地址之后,必 定还要绑定一个多播的MAC地址,才能使得其可以像单播那样工作。这个多播的IP和多播MAC地址有一个对应的算法,在书的p133到p134之间。可以看到 这个对应不是一一对应的,主机还是要对多播数据进行过滤。

2. IGMP协议

IGMP的作用在于,让其他所有需要知道自己处于哪个多播组的主机和路由器知道自己的状态。一般多播路由器根本不需要知道某一个多播组里面有多少个主机,而只要知道自己的子网内还有没有处于某个多播组的主机就可以了。只要某一个多播组还有一台主机,多播路由器就会把数据传输出去,这样,接受方就会通过网卡过滤功能来得到自己想要的数据。为了知道多播组的信息,多播路由器需要定时的发送IGMP查询,各个多播组里面的主机要根据查询来回复自己的状态。路由器来决定有几个多播组,自己要对某一个多播组发送什么样的数据。

这种查询回应数据报的TTL一般是1,而且就算是出错也不产生ICMP差错(没必要)。

IGMP在本地网络上的主机和路由器之间传达组成员信息,路由器定时向所有主机组多播IGMP查询。主机多播IGMP报告报文以响应查询。

从体系结构的观点来看,IGMP是位于IP上面的运输层协议。它有一个协议号(2),它的报文是由IP数据报承载的。与ICMP一样,进程通常不直接访问IGMP,但进程可以通过IGMP插口发送和接受IGMP报文。这个特性使得能够把多播选路守护程序作为用户级进程实现。


2.1 IGMP报文

IGMP也被当作IP层的一部分。IGMP报文通过IP数据报进行传输。不像我们已经见到的其他协议, IGMP有固定的报文长度,没有可选数据。图1显示了IGMP报文如何封装在IP数据报中。


    IGMP报文封装在IP数据报中

    IGMP报文的字段格式

IGMP类型为1说明是由多播路由器发出的查询报文,为2说明是主机发出的报告报文。检验和的计算和ICMP协议相同。组地址为D类IP地址。在查询报文中组地址设置为0,在报告报文中组地址为要参加的组地址。

8位报文类型-8最大响应时间-16位校验和-32位组地址
报文类型:
0x11表示查询报文,包括普通查询和特定组查询报文
0x16表示加入报文
0x17表示离开报文
0x12表示IGMPV1查询报文

2.2 加入一个多播组

多播的基础就是一个进程的概念(操作系统执行的一个程序),该进程在一个主机的给定接口上加入了一个多播组。在一个给定接口上的多播组中的成员是动态的—它随时因进程加入和离开多播组而变化。

这里所指的进程必须以某种方式在给定的接口上加入某个多播组。进程也能离开先前加入的多播组。


2.3 IGMP报告和查询

多播路由器使用IGMP报文来记录与该路由器相连网络中组成员的变化情况。使用规则如下:
1) 当第一个进程加入一个组时,主机就发送一个IGMP报告。如果一个主机的多个进程加入同一组,只发送一个IGMP报告。这个报告被发送到进程加入组所在的同一接口上。
2) 进程离开一个组时,主机不发送IGMP报告,即便是组中的最后一个进程离开。主机知道在确定的组中已不再有组成员后,在随后收到的IGMP查询中就不再发送报告报文。
3) 多播路由器定时发送IGMP查询来了解是否还有任何主机包含有属于多播组的进程。多播路由器必须向每个接口发送一个IGMP查询。因为路由器希望主机对它加入的每个多播组均发回一个报告,因此IGMP查询报文中的组地址被设置为0。

4) 主机通过发送IGMP报告来响应一个IGMP查询,对每个至少还包含一个进程的组均要发回IGMP报告。

使用这些查询和报告报文,多播路由器对每个接口保持一个表,表中记录接口上至少还包含一个主机的多播组。当路由器收到要转发的多播数据报时,它只将该数据报转发到(使用相应的多播链路层地址)还拥有属于那个组主机的接口上。

图显示了两个IGMP报文,一个是主机发送的报告,另一个是路由器发送的查询。该路由器正在要求那个接口上的每个主机说明它加入的每个多播组。



    IGMP的报告和查询


目的IP地址224.0.0.1被称为所有主机组地址。它涉及在一个物理网络中的所有具备多播能力的主机和路由器。当接口初始化后,所有具备多播能力接口上的主机均自动加入这个多播组。这个组的成员无需发送IGMP报告。


2.4 IGMP协议的实现

为改善该协议的效率,有许多实现的细节要考虑。首先,当一个主机首次发送IGMP报告(当第一个进程加入一个多播组)时,并不保证该报告被可靠接收(因为使用的是IP交付服务)。下一个报告将在间隔一段时间后发送。这个时间间隔由主机在0 ~ 1 0秒的范围内随机选择。

其次,当一个主机收到一个从路由器发出的查询后,并不立即响应,而是经过一定的时间间隔后才发出一些响应(采用“响应”的复数形式是因为该主机必须对它参加的每个组均发送一个响应)。既然参加同一多播组的多个主机均能发送一个报告,可将它们的发送间隔设置为随机时延。在一个物理网络中的所有主机将收到同组其他主机发送的所有报告,因为如图(IGMP的报告和查询)所示的报告中的目的地址是那个组地址。这意味着如果一个主机在等待发送报告的过程中,却收到了发自其他主机的相同报告,则该主机的响应就可以不必发送了。因为多播路由器并不关心有多少主机属于该组,而只关心该组是否还至少拥有一个主机。的确,一个多播路由器甚至不关心哪个主机属于一个多播组。它仅仅想知道在给定的接口上的多播组中是否还至少有一个主机。

在没有任何多播路由器的单个物理网络中,仅有的IGMP通信量就是在主机加入一个新的多播组时,支持IP多播的主机所发出的报告。

生存时间字段

  在图(IGMP的报告和查询)中,我们注意到IGMP报告和查询的生存时间(TTL)均设置为1,这涉及到IP首部中的TTL字段。一个初始TTL为0的多播数据报将被限制在同一主机。在默认情况下,待传多播数据报的TTL被设置为1,这将使多播数据报仅局限在同一子网内传送。更大的TTL值能被多播路由器转发。

  回顾6 . 2节,对发往一个多播地址的数据报从不会产生ICMP差错。当TTL值为0时,多播路由器也不产生ICMP“超时”差错。

  在正常情况下,用户进程不关心传出数据报的TTL.然而,一个例外是Traceroute程序(第8章),它主要依据设置TTL值来完成。既然多播应用必须能够设置要传送数据报的TTL值,这意味着程序设计接口必须为用户进程提供这种能力。

  通过增加TTL值的方法,一个应用程序可实现对一个特定服务器的扩展环搜索(eXPandingring search)。第一个多播数据报以TTL等于1发送。如果没有响应,就尝试将TTL设置为2,然后3,等等。在这种方式下,该应用能找到以跳数来度量的最近的服务器。

  从224.0.0.0到224.0.0.255的特殊地址空间是打算用于多播范围不超过1跳的应用。不管TTL值是多少,多播路由器均不转发目的地址为这些地址中的任何一个地址的数据报。


代码分析参考:点击打开链接


2.5 IGMP的三个版本

IGMP目前有三个版本,分别是IGMPV1、IGMPV2、IGMPV3,功能逐渐增强

IGMPV1中定义了加入报文、查询报文。
1、当主机加入某组播组时,会向路由器发送加入报文,告诉路由器自己加入了一个组播组,路由器会记录一条组播表项 。
2、查询路由器(IP最小的路由器)会定时从所有端口向外发送查询报文(按VLAN查询,如果该端口加入了多个VLAN,则发送多次查询报文),检查这些端口下是否有主机属于某组播组
3、主机收到查询报文后,如果自己没有加入任何组播组,则不进行响应;如果自己已经加入了某组播组,则会发送加入报文
4、主机离开组播组时,不发送任何报文,悄悄离开;路由器中纪录的该组播的表项会因查询超时而自动老化
5、查询报文的目的地址是224.0.0.1(表示所有路由器和支持IGMP的主机),组地址是0(表示查询所有组播组)

6、响应报文的目的地址是主机所在组的地址,组地址也是主机所在组的地址。如果网络上有多个主机加入了同一个组,那么只有一台主机(随机选取)会发送响应报文。由于响应报文的目的地址是主机所在组的地址,所以响应报文会被发送到主机所在组内的所有主机,其他的主机在收到该报文后,发现已经有人向路由器进行报告了,于是他们就不会再额外发送响应报文了。

IGMPV2中多定义了一种离开报文,当主机离开某组播组时,会向路由器发送离开报文。路由器收到离开报文后,会发送查询报文,查询是否还有其它的主机属于该组播组,如果没有就删除组播表项,有则不删除。

需要注意的是,此时路由器发送的查询报文的组地址已经不是0了,而是特定的组地址(发送离开报文的主机所在的组)。因为此时路由器只想知道该特定组内是否有主机存在。这一点也是IGMPV2对IGMPV1的改进,名称叫特定组查询,IGMPV1中没有该功能。

注意:
1、不论是IGMPV1还是IGMPV2,所有的加入报文和离开报文都要被上报到查询路由器
2、非查询路由器收到查询报文后,从所有端口转发该报文
3、非查询路由器收到特定组查询报文后,根据组播表进行转发
4、特定组查询报文的目的地址是要查询的组地址

5、离开报文的目的地址是224.0.0.2(表示所有路由器)


2.6 例子

现在我们已经了解了一些IP多播的细节,再来看看所包含的信息。我们使sun主机能够支持多播,并将采用一些多播软件所提供的测试程序来观察具体的过程。

  首先,采用一个经过修改的netstat命令来报告每个接口上的多播组成员情况(在3.9节显示了netstat-ni命令的输出结果)。在下面的输出中,用黑体表示有关的多播组。

IGMP(Internet组管理协议)报文及协议(图四)

  其中, - n参数将以数字形式显示IP地址(而不是按名字来显示它们),- i参数将显示接口的统计结果,- a参数将显示所有配置的接口。

  输出结果中的第2行le0(以太网)显示了这个接口属于主机组224.0.0.1(“所有主机”),和两行地址,后一行显示相应的以太网地址为:01: 00:5e:00:00:01.这正是我们期望看到的以太网地址,和12 . 4节介绍的地址映射一致。我们还看到其他两个支持多播的接口:SLIP接口sl0和回送接口l o 0,它们也属于所有主机组。

 我们也必须显示IP路由表,用于多播的路由表同正常的路由表一样。黑体表项显示了所有传往224.0.0.0的数据报均被送往以太网:


IGMP(Internet组管理协议)报文及协议(图五)

  如果将这个路由表与9 . 2节中s u n路由器的路由表作比较,会发现只是多了有关多播的条目。

  现在使用一个测试程序来让我们能在一个接口上加入一个多播组(不再显示使用这个测试程序的过程)。在以太网接口( 1 4 0 . 2 5 2 . 1 3 . 3 3)上加入多播组2 2 4 . 1 .2 . 3.执行n e t s t a t程序看到内核已加入这个组,并得到期望的以太网地址。用黑体字来突出显示和前面n e t s t a t输出的不同。


IGMP(Internet组管理协议)报文及协议(图六)

  我们在输出中再次显示了其他两个接口: s l 0和l o 0,目的是为了重申加入多播组只发生在一个接口上。

  图1 3 - 4显示了t c p d u m p对进程加入这个多播组的跟踪过程。


IGMP(Internet组管理协议)报文及协议(图七)

  当主机加入多播组时产生第1行的输出显示。第2行是经过时延后的IGMP报告,我们介绍过报告重发的时延是1 0秒内的随机时延。

  在两行中显示硬件地址证实了以太网目的地址就是正确的多播地址。我们也看到了源IP地址为相应的s u n主机地址,而目的IP地址是多播组地址。同时,报告的地址和期望的多播组地址是一致的。

  最后,我们注意到,正像指明的那样, TTL是1.当TTL的值为0或1时,tcpdump在打印时用方括号将它们括起来,这是因为TTL在正常情况下均高于这些值。然而,使用多播我们期望看到许多TTL为1的IP数据报。

  在这个输出中暗示了一个多播路由器必须接收在它所有接口上的所有多播数据报。路由器无法确定主机可能加入哪个多播组。

  继续前面的例子,但我们将在s u n主机中启动一个多播选路的守护程序。这里我们感兴趣的并不是多播选路协议,而是要研究所交换的IGMP查询和报告。即使多播选路守护程序只运行在支持多播的主机(sun)上,所有的查询和报告都将在那个以太网上进行多播,所以我们在该以太网中的其他系统中也能观察到它们。

  在启动选路守护程序之前,加入另外一个多播组224.9.9.9,图13-5显示了输出的结果。


IGMP(Internet组管理协议)报文及协议(图八)

  在这个输出中没有包括以太网地址,因为已经证实了它们是正确的。也删去了TTL等于1的说明,同样因为它们也是我们期望的那样。

  当选路守护程序启动时,输出第1行。它发出一个已经加入了组224.0.0.4的报告。多播地址224.0.0.4是一个知名的地址,它被当前用于多播选路的距离向量多播选路协议DVMRP(Distance Vector Multicast Routing Protocol)所使用(DVMRP在RFC 1075中定义[Waitzman,Partridge, and Deering])。

  在该守护程序启动时,它也发送一个IGMP查询(第2行)。该查询的目的IP地址为224.0.0.1(所有主机组),如图13-3所示。

  第一个报告(第3行)大约在5秒后收到,报告给组224.9.9.9.这是在下一个查询发出之前(第4行)收到的唯一报告。当守护程序启动后,两次查询(第2行和第4行)发出的间隔很短,这是因为守护程序要将其多播路由表尽快建立起来。

  第5、6和7行正是我们期望看到的:sun主机针对它所属的每个组发出一个报告。注意组224.0.0.4是被报告的,而其他两个组则是明确加入的,因为只要选路守护程序还在运行,它始终要属于组224.0.0.4.

  下一个查询位于第8行,大约在前一个查询的2分钟后发出。它再次引发三个我们所期望的报告(第9、10和11行)。这些报告的时间顺序与前面不同,因为接收查询和发送报告的时间是随机的。

  最后的查询在前一个查询的大约2分钟后发出,我们再次得到了期望的响应。

  多播是一种将报文发往多个接收者的通信方式。在许多应用中,它比广播更好,因为多播降低了不参与通信的主机的负担。简单的主机成员报告协议( IGMP)是多播的基本模块。

  在一个局域网中或跨越邻近局域网的多播需要使用本章介绍的技术。广播通常局限在单个局域网中,对目前许多使用广播的应用来说,可采用多播来替代广播。

  然而,多播还未解决的一个问题是在广域网内的多播。[Deering and Cheriton 1990]提出扩展目前的路由协议来支持多播。9.13节中的[Perlman 1992]讨论了广域网多播的一些问题。

  [Casner and Deering 1992] 介绍了使用多播和一个称为MBONE(多播主干)的虚拟网络在整个Internet上传送IETF会议的情况。 

 

3. IGMP Snooping技术

IGMP Snooping,用在交换机上。开启IGMP Snooping功能的交换机可以对经过它的IMGP报文进行解析,建立组播转发表,这样一来,交换机就可以根据组播转发表转发组播数据。如果没有开启IGMP Snooping功能,交换机只能广播组播数据。IGMP Snooping的实际应用意义是:减少了网络上的主机由于接受到不必要的组播报文而产生的处理负荷。IGMP Snooping并不是一个协议,只能算是一个实现细节,一种应用。

IGMP Snooping分两种,一种是passive方式的,另一种是active方式的。passive方式的只解析组播报文,不对报文进行过滤。active方式的会过滤掉一些对路由器没有意义的组播报文。比如交换机下面有两个主机都加入了同一个组,这样交换机上面的路由器中就会有一条表项与之对应。如果一个主机想离开这个组,它就会发送离开报文给路由器(经过交换机转发)。但是此时,即使路由器收到了离开报文,它也并不会删除那条表项,因为还有另一个主机在组播组中。active方式的IGMP Snooping使交换机可以过滤掉此类报文。

IGMP Snooping是Internet Group Management Protocol Snooping(互联网组管理协议窥探)的简称,它是运行在二层设备上的组播约束机制,用于管理和控制组播组。

3.1 IGMP Snooping原理

运行IGMP Snooping的二层设备通过对收到的IGMP报文进行分析,为端口和MAC组播地址建立起映射关系,并根据这样的映射关系转发组播数据。
如图 1所示,当二层设备没有运行IGMP Snooping时,组播数据在二层被广播;当二层设备运行了IGMP Snooping后,已知组播组的组播数据不会在二层被广播,而在二层被组播给指定的接收者。
二层设备运行IGMP Snooping前后的对比

IGMP Snooping通过二层组播将信息只转发给有需要的接收者,可以带来以下好处:
减少了二层网络中的广播报文,节约了网络带宽;
增强了组播信息的安全性;

为实现对每台主机的单独计费带来了方便。


3.2 IGMP Snooping基本概念

1. IGMP Snooping相关端口
如图,Router A连接组播源,在Switch A和Switch B上分别运行IGMP Snooping,Host A和Host C为接收者主机(即组播组成员)。
IGMP Snooping相关端口


介绍一下IGMP Snooping相关的端口概念:
路由器端口(Router Port):交换机上朝向三层组播设备(DR或IGMP查询器)一侧的端口,如Switch A和Switch B各自的Ethernet1/1端口。交换机将本设备上的所有路由器端口都记录在路由器端口列表中。
成员端口(Member Port):又称组播组成员端口,表示交换机上朝向组播组成员一侧的端口,如Switch A的Ethernet1/2和Ethernet1/3端口,以及Switch B的Ethernet1/2端口。交换机将本设备上的所有成员端口都记录在IGMP Snooping转发表中。

本文中提到的路由器端口都是指交换机上朝向组播路由器的端口,而不是指路由器上的端口。

如不特别指明,本文中提到的路由器/成员端口均包括动态和静态端口。

在运行了IGMP Snooping的交换机上,所有收到源地址不为0.0.0.0的IGMP普遍组查询报文或PIM Hello报文的端口都将被视为动态路由器端口。

 
2. IGMP Snooping动态端口老化定时器
 IGMP Snooping动态端口老化定时器

IGMP Snooping端口老化机制只针对动态端口,静态端口永不老化。

 

3.3 IGMP Snooping工作机制

运行了IGMP Snooping的交换机对不同IGMP动作的具体处理方式如下:
本节中所描述的增删端口动作均只针对动态端口,静态端口只能通过相应的配置进行增删。
 
1. 普遍组查询
IGMP查询器定期向本地网段内的所有主机与路由器(224.0.0.1)发送IGMP普遍组查询报文,以查询该网段有哪些组播组的成员。
在收到IGMP普遍组查询报文时,交换机将其通过VLAN内除接收端口以外的其它所有端口转发出去,并对该报文的接收端口做如下处理:
如果在路由器端口列表中已包含该动态路由器端口,则重置其老化定时器。

如果在路由器端口列表中尚未包含该动态路由器端口,则将其添加到路由器端口列表中,并启动其老化定时器。


2. 报告成员关系
以下情况,主机会向IGMP查询器发送IGMP成员关系报告报文:
当组播组的成员主机收到IGMP查询报文后,会回复IGMP成员关系报告报文。
如果主机要加入某个组播组,它会主动向IGMP查询器发送IGMP成员关系报告报文以声明加入该组播组。
在收到IGMP成员关系报告报文时,交换机将其通过VLAN内的所有路由器端口转发出去,从该报文中解析出主机要加入的组播组地址,并对该报文的接收端口做如下处理:
如果不存在该组播组所对应的转发表项,则创建转发表项,将该端口作为动态成员端口添加到出端口列表中,并启动其老化定时器;
如果已存在该组播组所对应的转发表项,但其出端口列表中不包含该端口,则将该端口作为动态成员端口添加到出端口列表中,并启动其老化定时器;
如果已存在该组播组所对应的转发表项,且其出端口列表中已包含该动态成员端口,则重置其老化定时器。

交换机不会将IGMP成员关系报告报文通过非路由器端口转发出去,因为根据主机上的IGMP成员关系报告抑制机制,如果非路由器端口下还有该组播组的成员主机,则这些主机在收到该报告报文后便抑制了自身的报告,从而使交换机无法获知这些端口下还有该组播组的成员主机。
 
3. 离开组播组

运行IGMPv1的主机离开组播组时不会发送IGMP离开组报文,因此交换机无法立即获知主机离开的信息。但是,由于主机离开组播组后不会再发送IGMP成员关系报告报文,因此当其对应的动态成员端口的老化定时器超时后,交换机就会将该端口对应的转发表项从转发表中删除。

运行IGMPv2或IGMPv3的主机离开组播组时,会通过发送IGMP离开组报文,以通知组播路由器自己离开了某个组播组。当交换机从某动态成员端口上收到IGMP离开组报文时,首先判断要离开的组播组所对应的转发表项是否存在,以及该组播组所对应转发表项的出端口列表中是否包含该接收端口:

如果不存在该组播组对应的转发表项,或者该组播组对应转发表项的出端口列表中不包含该端口,交换机不会向任何端口转发该报文,而将其直接丢弃;

如果存在该组播组对应的转发表项,且该组播组对应转发表项的出端口列表中包含该端口,交换机会将该报文通过VLAN内的所有路由器端口转发出去。同时,由于并不知道该接收端口下是否还有该组播组的其它成员,所以交换机不会立刻把该端口从该组播组所对应转发表项的出端口列表中删除,而是重置其老化定时器。

当IGMP查询器收到IGMP离开组报文后,从中解析出主机要离开的组播组的地址,并通过接收端口向该组播组发送IGMP特定组查询报文。交换机在收到IGMP特定组查询报文后,将其通过VLAN内的所有路由器端口和该组播组的所有成员端口转发出去。对于IGMP离开组报文的接收端口(假定为动态成员端口),交换机在其老化时间内:

如果从该端口收到了主机响应该特定组查询的IGMP成员关系报告报文,则表示该端口下还有该组播组的成员,于是重置其老化定时器;

如果没有从该端口收到主机响应特定组查询的IGMP成员关系报告报文,则表示该端口下已没有该组播组的成员,则在其老化时间超时后,将其从该组播组所对应转发表项的出端口列表中删除。

3.4 IGMP Snooping Proxying

通过在边缘设备上配置IGMP Snooping Proxying(IGMP Snooping代理)功能,可以减少其上游设备收到的IGMP报告报文和离开报文的数量,有效提高其上游设备的整体性能。配置了IGMP Snooping Proxying功能的设备(称为IGMP Snooping代理设备),在其上游设备看来,相当于一台主机;而在其下游主机看来,则相当于一台查询器。

尽管在其上游设备看来,IGMP Snooping代理设备相当于一台主机,但主机上的IGMP成员关系报告抑制机制在IGMP Snooping代理设备上并不会生效。
 
 IGMP Snooping Proxying组网图

如图 3所示,作为IGMP Snooping代理设备的Switch A,对其上游设备Router A来说是一台主机,代理下游主机向Router A发送报告报文和离开报文;而对其下游的主机来说则是一台查询器,代理Router A向下游主机发送普遍组查询报文和特定组查询报文,维护组成员关系。
IGMP Snooping代理设备对IGMP报文的处理方式如表 2所示。

 IGMP Snooping代理设备对IGMP报文的处理方式


交换机对组播协议报文的特殊处理规则

支持IGMP Snooping功能的交换机使能了三层组播路由后,在不同的情况下对各种组播协议报文的处理有所差异。具体规则如下:
(1) 如果交换机上只使能了IGMP,或同时使能了IGMP和PIM,进行常规处理。
(2) 如果交换机上只使能了PIM:
对于IGMP报文,将其当作未知报文在VLAN内进行广播;
对于PIM Hello报文,则会为其维护相应的动态路由器端口。
(3) 在交换机上关闭IGMP时:
如果未使能PIM,则删除所有动态成员端口和动态路由器端口;
如果已使能PIM,则删除动态成员端口,只保留动态路由器端口。
(4) 在交换机上关闭PIM时:
如果未使能IGMP,则删除动态路由器端口;

如果已使能IGMP,则保留所有动态成员端口和动态路由器端口。


4. 参考资料

广播和多播,IGMP协议

IGMP Snooping技术介绍

IGMP协议详解

TCP/IP详解读书笔记(第13章IGMP:Internet组管理协议)

《TCP/IP详解卷2:实现》笔记--IGMP:Internet组管理协议

0 0