IGMPv1,v2,v3的原理报文形式 - 图文 下载本文

⑨在IGMPv3中,取消了前面版本中的响应抑制功能,主要原因是:

第一,使用响应抑制时,路由器只知道子网上是否有组成员,而不知道有几个组成员,以及成员是哪些主机:取消响应抑制,路由器就可以记录每一个组成员的信息,可以开发一记账等增值服务功能。

第二,许多网桥或者二层/三层交换机在实现IGMP监听功能时,为了避免响应抑制,一般不转发网段问的IGMP报文。取消了响应抑制后,可以简化这些设备的设计。

第三,取消响应抑制后,主机不必处理来自其他主机的报文,简化了主机的实现。在查询报文中,增加S标志位,可以提高系统的健壮性。

IGMPv3报告报文在网络中传输完整的报文格式如图2-20:

图2-20 在网络中传输的IGMPv3报告报文

2 MLD协议

IPv6的组管理协议被称为MLD(组播监听者发现)。1999年,MLD版本l(RFC2710)被IETF发布。2004年,MLD版本2(RFC3810)标准出台,后一个版本可以向前一个兼容。MLD协议是专门针对基于IPv6的组播组管理协议。因为MLD使用全新的ICMPv6的报文格式,所以MLD协议就是

ICMPv6协议的一个子集。MLD消息使用链路本地IPv6源地址发送,其跳数被限制为1。MLD消息的封装格式如图2-21所示:

图2-21 MLD消息封装格式

以下分别描述MLD协议的两个版本以及MLDSnooping,其中对于MLDSnooping的详细描述见第三章。

2.1 MLDv1协议

2.1.1 MLDv1的工作原理

MLDvl协议是从IGMPv2协议中派生出来的,其运行机制和IGMPv2协议相同,专门用于IPv6组播群组的管理,其主要是应用于ASM模式组播路由协议的组管理工作。

对于运行MLD协议的路由器,其接口要监听由IPv6组播地址产生的所有链路组播地址。路由器为它所在的每一条链路维护一个列表。表项有此链路中存在的组成员的组播地址,以及该地址相应的定时器。路由器周期性地发送通用请求 (general query),以查询该链路上是否存在某组播地址的组成员。节点收到路由器发送的常规请求后,经过随机时延后发出组播监听报告。这样是为了防止所有的节点都在同一时间发出报告分组,从而造成网络的突发性阻塞。当路由器收到链路上的报告分组时,如果报告地址不在路由器的列表上,则加入该项,否则计时器重新置位。如果某个地址的计时器过期,则从列表中删除。当节点要加入一个组播组时,主动发送组播监听报告,向路由器报告组成员的存在。节点退出组播组时,发送完成分组,删除有关路径。当请求状态的路由器从链路上接收到一个完成消息,如果消息中的组播地址在路由器的列表上,路由器发送一个特定组播地址查询。如果一段时延后没有报告分组,则认为该组播地址在此链路上没有组成员了。

2.1.2 MLDv1报文格式

MLDv1的报文格式如图2-22所示:

图2-22 MLDv1报文格式

(1)类型字段,MLDvl有如下三种报文类型:

·组播侦听查询消息(Type=130),分为两种类型:①通用查询(GeneralQuery),组地址字段置为全0,对所有的组进行组成员查询;②特定组查询(Group Pecific Query),用于判断一个特定的组播地址在本地链路上是否有组播侦听者。 ·组播侦听报告消息(Type = 131) ·组播侦听完成消息(Type = 132) (2)编码字段,初始值为0。 (3)校验和字段。

(4)最大响应时间字段,只有在组播监听者查询报文中有效,主机必须在最大响应时间到达之前发出成员关系报告报文。通过该值,路由器可以调节组成员的离开延迟。

(5)组地址字段,在通用组查询中,置为0;在特定组查询时,该字段存放要查询的组播组的地址。在报告和完成报文中,分别用于存放主机要加入和离开的组地址。 MLDv1报文在网络中传输完整的报文格式如图2-23:

图2-23 在网络中传输的MLDv1报文

以上这些查询消息和应答消息报文有三种不同的报文交互方式:

第一种交互方式是由路由器发起的。路由器作为询问者向与其相连接的所有主机发送一个一般查询消息报文。其目的地址是FF02::1。主机收到此消息后,应答一个包含当前组播地址状态记录的报文消息,此报文告诉路由器此主机希望接收哪个组播组或者哪些源发来的数据。

第二种交互方式是由主机发起的。当一个主机离开一个组播组时,它就要向路由器发送组播侦听者完成消息,该消息包括一个状态改变一记录。路由器收到此消息后,向其相连的链路上发送一个特定组播地址查询,询问是否还有主机加人了此特定的组。

第三种交互方式是由路由器发起的。如果在路由器的组播地址表中某一个组播地址的相关定时器超时后,仍然没有收到主机发来的包含状态变化记录的组播侦听者报告消息,路由器则向所有主机发送一个特定组查询消息,确认该组播组是否还有组播侦听者。

2.1.3 MLDv1工作流程

当一个网段内连接有多台路由器运行MLDvl协议时,必须选举一台路由器作为查询路由器,其余的自然成为非查询路由器。选举的机制是:地址最小的路由器当选。非查询路由器中有一个其他查询路由器存在计时器,当该计时器到期仍没有收到来自查询路由器的报文,则认为该查询路由器失效,重新开始新的选举。

路由器定期向子网内所有的主机广播查询报文(目的地址为FF02::1),目的是获得主机的报告报文。在路由器刚开始工作时,会快速连续地发送查询报文,以便尽快搜集到子网内的组成员信息。 当主机接收到一个查询报文后,就为每一个要接收的组地址启动一个延迟定时器。定时器的值在[0,最大响应时间]之间取一个随机数。如果查询报文中的最大响应时间字段被置为0,则定时器立刻到期。定时器到期后,主机会发送一个报告报文给路由器,通知路由器主机想接收的组播组地址。 如果一台主机在定时器还未到期时,就收到其它主机通告路由器的报告报文,则读取该报文的组地址,如果和自己需要通告的组地址相同,则立刻停止相应的定时器,并不再发送关于该组地址的报告报文,这样就可以避免多台主机发送相同内容的报告报文给路由器,这种机制称为“响应抑制”。路由器收到来自主机的报告报文后,查看其中的组地址,如果该地址未在路由器的组地址列表中,则将其添加到组地址列表中,同时为其启动一个相应的定时器;如果该地址已经在路由器的组地址列表中,则将相应的定时器恢复最大值。如果一个组地址的定时器到期了,则说明该组地址在子网内已经没有接收者了,路由器会将此组地址从列表中删除。

当一台主机想要加入某个组播组时,可以不必等待路由器的查询报文,而是直接向路由器发送报告报文。为了保障该报文的可靠性,一般会进行重传。当一台主机想要离开某个组播组时,必须发送一个离开报文给子网内的路由器。路由器收到离开报文后,会首先查看该组地址是否在组地址列表中,如果在,则发送一个特定组地址查询给子网内的所有主机。在一定的时间内,路由器收不到来自主机的应答,则会认为该组已经没有接收者,于是将该组地址从列表中删除。非查询路由器会忽略所有的离开报文。

2.2 MLDv2协议

MLDv2从IGMPv3中发展过来,和MLDvl相比,增加了IGMPv3所具有的源过滤功能,不仅能够支持ASM模式组播路由协议,而且还能够支持基于IPv6的SSM模式组播路由协议。

MLDv2在MLDv1的基础上添加了源组播 (Source Specific Multieast)的概念,主机可以组播源报告(Group-Source Report)报告感兴趣的源,路由器则只转发该链路上所有组成员感兴趣的源所发送的报文。当主机想退出某组播源时,主机发送离开组播源报告(Group-Source Leave),查询者在接收到该报告后可以发送指定组播源请求,确认是否仍有组成员关心该组播源。MLDv2支持源过滤 (SourceFiltering),因此比MLDvl具备更高的可管理性和安全性。此外MLDv2还可以与MLDvl兼容。