2.9 二层组管理
如前所述,二层设备上如果没有部署组管理机制的话,它会像处理广播那样处理组播消息。这不仅会增加某个子网中的流量,而且这些消息还会发送(泛洪)给这个子网中的所有设备。而这些设备对待组播消息的处理方法可能并不统一,这要取决于操作系统和相关硬件的行为。组播消息可以在硬件和/或软件中进行处理。因此组播消息,或者说有太多的组播消息可能会给一台设备带来负面影响。工程师最好能在网络中对组播消息进行管理,只把组播消息发送给希望接收它的设备。
有两种协议可以用来管理LAN网段中的组播行为:CGMP(Cisco组管理协议)和RGMP(路由器端口组管理协议)。虽然这两种协议还都活跃在当今的网络中,但由于IGMP探测(在接下来的小节中进行介绍)的关系,管理员通常都不使用它们。出于这种原因,我们只对这两种协议进行简要介绍。
2.9.1 Cisco组管理协议
要想解决二层设备将组播消息处理为广播的问题,Cisco 首先开发了一个私有解决方案:CGMP(Cisco组管理协议)。在开发这项协议时,二层交换机还不能实现三层信息的监测或探测(如今可以了)。CGMP当时用于直连的路由器与交换机之间。路由器会使用CGMP向交换机发送IGMP消息,说明哪些客户端已注册。接收到这个消息的交换机就能根据这些消息,决定从哪些接口向外发送组播消息。
CGMP的行为如下所示:当主机有意从某个GDA(组目的地址)接收组播流时,它会发送IGMP报告消息。路由器会收到这个消息,然后路由器会向目的MAC地址0x0100.0CDD.DDD,发送CGMP SNAP(子网访问协议)数据帧,其中携带以下信息。
- 版本:1或2。
-消息字段:加入或离开。 - 计数器:地址对的数量。
- IGMP客户端的MAC地址。
- 组播组地址/组目的地址(GDA)。
- 单播源地址(USA):发送加入消息的主机MAC地址。
与路由器直连的交换机上配置了CGMP,它会从路由器那里收到这个数据帧。交换机会查看USA,并在CAM(内容可寻址存储器)表中进行查找,以此确定发出请求的主机所连接的接口。现在这个主机连接的接口已经确定了,如果这是对这个GDA的第一次请求,交换机就会添加一条静态条目,将GDA与CAM表中的主机地址联系起来。如果交换集中已经有了这个GDA的条目,交换机就只需要将USA添加到这个GDA表中。
注释
由于和其他协议有冲突,比如HSRPv1,CGMP可能禁用了一些特性。工程师在启用CGMP之前一定要查看当前的配置指南。使用IGMP探测可以轻松避免发生冲突。
CGMP离开过程
离开过程取决于主机上的IGMP版本。IGMPv1不提供这种机制,当主机不再希望接收某个组播流时,主机无法向网络中通知自己的意愿。当IGMPv1主机离开时,网络能够意识到主机不再属于这个组播流的唯一途径,是通过IGMP查询消息。想象当一台主机加入了一个流,然后加入了另一个,以此类推;久而久之会在网络中引入大量组播流。比如用户观看IPTV时快速换台。为了解决这个问题,路由器需要周期性地发送IGMP查询消息,来确定是否仍有主机对某个组播流感兴趣。如果在3次发送出IGMP查询消息后,路由器都没有收到响应,它就会通过CGMP通知交换机,让它删除有关这个GDA的全部条目。
IGMPv2中添加了离开消息;这样当主机不想再接收某个组播流时,可以向网络中表达这种意愿。当主机发送了IGMP离开消息后,路由器会发送查询消息并启动查询响应消息计时器。这个过程是为了确认在这个网络中,是否还有主机对这个组播流感兴趣。如果路由器没有收到响应,它就会向交换机发送CGMP消息,让交换机删除与这个GDA相关的条目。
2.9.2 路由器端口组管理协议
与CGMP一样,另一个协议RGMP(路由器端口组管理协议)也是用来解决交换网络中路由器组播通信的问题。当多个路由器连接在同一个二层交换网络时,组播消息会被转发到所有PIM(协议无关组播)路由器,包括那些并不希望接收组播流的路由器。
RGMP是和IGMP探测特性(2.10节就会介绍IGMP探测特性)一起配置在交换机上的。连接交换机的路由器上配置了PIM稀疏模式和RGMP。配置了RGMP的路由器会向直连交换机发送RGMP Hello消息。交换机上会创建一个条目,表明收到RGMP Hello消息的接口连接着RGMP路由器,并且只有当从这台路由器那里收到加入消息后,交换机才会向这个接口转发组播流。如果路由器希望接收某个组播流,它就会向交换机发送RGMP加入消息,其中包含相应的GDA。然后交换机会为这个GDA创建一个条目,然后关联CAM表中的路由器接口。
我们已经提到了4种RGMP消息类型中的2种:“Hello”和“加入”。另2个消息类型是“Bye”和“离开”。“Bye”RGMP消息告诉交换机,将指定接口放入普通的转发模式。最后当路由器无意接收某个组播后,它会发出“离开”消息。