【转载】组播及igmp/mld协议详解(二)

版权声明:本文为CSDN博主「xinyuan0214」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/xinyuan510214/article/details/80262964

 

1 IGMP 协议

      IGMP用来动态的将各个主机注册到特定局域网中的一个组播组中。主机向本地的组播路由器发送IGMP消息来表明自己所属的组播组。在IGMP协议中,路由器侦听IGMP消息并周期的发出查询,以发现某个子网上哪些组是活动的,哪些是不活动的。

      IGMP消息在IP数据报内发送,用IP协议号2来标识。同时,将IP存活时间(TTL)字段值设定为1,因此IGMP信息处于本地范围本子网内传送并且不会被路由器转发。

1989年,IGMP版本1(RFClll2)第一次详细定义了IGMP规范。后来施乐公司对最早的IGMP版本1进行了大幅更新,产生了IGMP版本2(RFC2236)。到目前为止IGMP版本3规范己经称为IETF正式标准(RFC3376),通用的是IGMPv2IGMPvl实现简单,但是有离开延迟过大和选择查询路由器需要依赖组播路由协议的缺点,IGMPv2对此进行了改进。IGMPv3协议的主要目的是支持源特定组播,并进一步对IGMPv2进行完善。

1.1 IGMPv1协议

1.1.1 IGMPv1的工作原理

IGMPvl中定义了基本规则、组成员查询机制和报告机制。当某接收主机希望接收到某个组播组的数据时,它会向本地链路上的查询路由器发送加入消息,通知查询路由器本机希望申请加入的组播组;查询路由器收到加入消息之后,把这条消息加入到查询路由器所维护的状态列表,同时向源发起建立组播分发树的请求;查询路由器在设定的周期内发起组成员查询消息;接收主机收到查询消息之后,会向查询路由器发送报告消息来应答查询,否则查询路由器会认为不存在接受主机;主机如果想离开某个组播组,就对路由器的查询保持沉默,经过一定时间,路由器便知道子网内没有组成员了。

1.1.2 IGMPv1报文格式

IGMPvl报文格式如图2-4所示,


2-4 IGMPv1报文格式

      其主要内容包括:

1    版本字段表示IGMP协议的版本号,在IGMP中置为1.

2    类型字段,在IGMPv1中,只有两个值:

取值为0x11,表示该报文为成员关系查询(Membership Query),主要是由路由器使用。

取值为0x12,表示该报文为成员关系报告(Membership Report),主要是主机使用。

3    校验和字段用于数据报文的校验。

4    组地址字段。当用于成员关系查询时,本字段置为0,并被主机忽略;当用于成员关系报告时,本字段包含组播组地址。

IGMPv1报文在网络中传输完整的报文格式如图2-5


2-5 在网络中传输的IGMPv1报文

1.1.3 IGMPv1工作过程

IGMPv1中,路由器利用查询一响应过程来确定在本地子网中是否有加入某个组播组的主机存在,如果有,则这台路由器就要完成向本子网组播数据包的功能;如果没有,则这台路由器就不必向此子网转发组播包。路由器周期性地向子网上的所有主机发送组播成员关系查询报文,希望加入某个组播组的主机就响应该查询,发送一个组播成员关系报告报文到子网上,在IGMP报文的组地址地段中加入想要加入的组播组的地址。路由器接收到来自主机的成员关系报告报文后,就知道了在该子网上有主机要加入组播组,组播组地址在报文中可以获得,接下来,路由器就会根据所使用的路由协议建立起相应的转发状态。

当一个子网上有多台主机想加入同一个组播组时,就可以利用报告响应抑制功能,来减少子网中的重复信息传递。处理流程如下:

主机接收到IGMP成员关系查询报文后,对加入的每个组播组启动一个倒数计时器。当计时器的值为0时,主机发送IGMP成员关系报告报文,通知路由器子网内仍有处于活动状态的组播接收者。当计时器到达0之前,若主机接收到来自其他主机发送的同一组成员关系报告报文,那么它就停止与该计时器得到的数,重新计时,这样,就避免了发送同一个成员关系报告报文给路由器。

如果在一个子网中有多个组播路由器,那么多个路由器都发送IGMP查询报文是一种浪费,所以应当确定一个路由器作为查询路由器就可以了。但是在IGMPv1中,没有提供选举查询路由器的机制,而是把这一任务留给了组播路由协议。由于不同的协议使用不同的选举机制,会造成在一个子网中出现多个查询路由器,这也是IGMPv1的缺点之一。

但是IGMPv1的另一个缺点是缺乏显式的离开方式。当一台主机想要离开一个组播组时,并不显式地表示出来,而只是不再对路由器的查询报文进行响应。当一个网段内某个组播组的最后一个成员退出后,路由器还会继续组播这个组的数据,直到一段时间内路由器接收不到任何来自该组的成员响应,才会知道该组已经没有接收者了,然后停止转发该组的组播数据报文。因此,路由器中需要为子网中的每一个组维护一个计时器。当路由器接收到某台主机发送的报告报文时,就会将该组的计时器清零;当某个组的计时器超时后,就说明在本网段上已经没有接收者,于是停止转发该组报文。

下面是工作过程图解:

1)     组成员加入


2-6 IGMPv1组成员加入

2)     查询与响应


2-7 IGMPv1组成员查询

3)     响应抑制机制


2-8 IGMPv1响应抑制机制

4)     组成员离开


2-9 IGMPv1组成员离开

1.2 IGMPv2协议

1.2.1 IGMPv2的工作原理

IGMPv1的主要缺点是离开延迟过大和选择查询路由器需要依赖组播路由协议进行。针对这些缺点,IGMPv2做了相关的改进。在IGMPv2中,增加了离开组的报文格式,当主机想要离开某个组播组时,不必等待路由器发出查询报文,而是可以直接向路由器发送成员关系报告报文,这样可以有效地缩短离开延迟。另外在IGMPv2中,还明确了查询路由器的选举机制。除此之外,IGMPv2的工作原理与IGMPv1基本一致

1.2.2 IGMPv2的报文格式

IGMPv2的报文格式如图2-10所示:


2-10 IGMPv2报文格式

它在IGMPvl的基础上,进行了两处改动:一个是v1的版本字段和类型字段进行了合并;另一个是增加了最大响应时间字段  (MaxResponseTime)。其主要内容如下:

(1)类型字段,在兼容IGMPv1的基础上,IGMPv2中新增了两种报文类型。

·0xll:成员关系查询。与IGMPv1不同,IGMPv2的查询分为两种类型:通用查询 (GeneralQuery),组地址字段置为全0,对所有的组进行组成员查询;特定组查询 (GrouPpecificQuery),针对特定组进行组成员查询,组地址字段置为特定组的地址。

·0x12:IGMPv1成员关系报告(为了向后兼容IGMPv1)

·0x16:IGMPv2成员关系报告。

·0xl7:离开组。

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

(3)校验和字段,与IGMPv1中的一样。

(4)组地址地段,与IGMPv1中的基本一样,当采用特定组查询时,该字段存放要查询的组播组的地址。

IGMPv2报文在网络中传输完整的报文格式如图2-11


2-11 在网络中传输的IGMPv2报文格式

1.2.3 IGMPv2工作过程

查询一响应过程与IGMPv1基本相同,但是有两点改进:增加了特定组查询,特定组查询的目的是为了让路由器知道一个特定组在子网内是否还有组成员,以便判断是否还需要转发该组的数据报文;IGMPv2的成员关系报告的类型代码不一样。

IGMPv2的组成员加入与 IGMPv1中的完全一样。IGMPv2离开过程与IGMPv1相比有了较大的改进。主机离开一个组时,需要显式地发送一个离开报文给路由器。其过程如下:

要离开的主机发送一个离开报文给子网上所有路由器(目的地址224.0.0.2),查询路由器接收到离开报文后,会立即发送一个特定组查询到子网上。如果子网上还有该组的成员,则会发回一个响应报文;如果子网上己经没有该组的成员,则没有主机回应,于是路由器就知道己经没有该组成员了,就停止转发该组的数据。

IGMPv1中,选择查询路由器依赖于组播路由协议;而在IGMPv2中,明确了选择查询路由器的机制。其过程如下:

开始时,子网上的每个路由器都假定自己就是查询路由器,发送一个通用查询报文给所有主机(目的地址224.0.0.1)。每个路由器都可以接收到来自其他路由器的报文,然后进行IP地址的比较,具有最低IP地址的路由器就成为查询路由器;非查询路由器启动一个计时器,无论何时接收到来自当选的查询路由器的通用查询报文,就将计时器复位。如果计时器超时,就认为当选的查询路由器发生故障,转向开始重新选择。计时器的取值一般为查询间隔的2

图解工作过程如下:

1)组成员加入


2-12 IGMPv2组成员加入

2)查询与响应


2-13 IGMPv2组成员查询与响应

3)查询器选举


2-14 IGMPv2查询路由器选择

4)成员离开


2-15 IGMPv2组成员离开

1.3 IGMPv3协议

1.3.1 IGMPv3的工作原理

IGMPv3的提出,主要是为了配合源特定组播的实现,即组播组成员可以指定接收或指定不接收某些组播源的报文。这样主机就可以有选择性接收来自某个特定组播源的数据包,而不是被动接收该组中所有组播源的数据包。IGMPv3的这一特性,可以实现源特定组播SSM技术。源特定组播(Source Specific MulticastSSM)是一种区别于传统组播的新的业务模型,SSM保留了传统PIM-SM模式中的主机显式加入组播组的高效性,但是跳过了PIM-SM模式中的共享树和RP规程。SSM直接建立由(SG)标志的一个组播最短路径树。SSM的一个(SG)对也被称为一个频道(Channel)PIM-SSM是对传统PIM协议的扩展,使用SSM,用户能直接从组播源接收组播报文,需要汇聚点(RP)的帮助。

IGMPv3IGMPvl/v2的基础上提供了额外的源过滤组播功能(Source FilteredMulticastSFM)。在IGMPvl/v2中,主机只根据组地址来决定加入某个组,并从任何一个源接收发给该组地址的报文。具有源过滤组播功能(SFM)的主机使用IGMPv3来表示主机所希望加入的组播组,同时还表示该主机所希望接收的组播源的地址。主机可以使用一个包括列表(Inclusion List)或一个排除列表 (Exclusion List)来表示对源地址的限制。即组播组成员可以指定接收或指定不接收某些组播源的报文。这样主机就可以有选择性接收来自某个特定组播源的数据包,而不是被动接收该组中所有组播源的数据包。

1.3.2 IGMPv3的报文格式

IGMPv3的报文类型有以下几种:

0xll:成员关系查询报文 (MembershipQeury)

0x22:版本3成员关系报告报文(version 3 Membership Report)

0x12:版本1成员关系报告报文(version 1 Membership Report)

0x16:版本2成员关系报告报文 (version 2 Membership Report)

0x17:版本2离开报文 (version 2 LeaveGroup)

报文类型的值填写在报文中的类型字段。在IGMPv3中,查询报文和报告报文格式有较大差异,需要分别描述。图2-16为查询报文的格式


2-16 IGMPv3查询信息格式

(1)类型字段,设置为0xll,代表该报文为查询报文。

(2)最大响应时间字段,指明了主机发出响应的最长时间。

(3)组地址字段,功能与IGMPv2一样,可以用于通用查询和组特定查询。

(4)s字段,置为1时,其他路由器不对该报文进行处理。

(5)QRV字段,查询路由器的健壮值(Querier’s RobustnessVariable),该值影响计时器和重试次数的取值。

(6)QQIC字段,查询路由器的查询间隔码(Querier’s QueryIntervalCode),该值影响查询路由器的查询间隔时间,非查询路由器按照此值更新自己的缺省值。

(7)源地址数目字段,该值表在这个报文中包含了多少个源地址。当进行通用查询(GeneraQuery)或者组特定查询 (GroupSpecific Query)时,该值置为0;当进行特定组和源查询 (Group Source pecific Query,用于PIMSSM)时,该值为源特定地址的数目。虽然该值最大可为65536,但是实际上受限于数据链路层的MTU,例如在以太网上,1P数据报最长为1500字节,除去IP报头的24字节和IGMP报头的12字节,剩余1464字节,所以最多包含366(1464/4)个源地址。

(8)源地址地段。

IGMPv3查询信息报文在网络中传输完整的报文格式如图2-17


2-17 在网络中传输的IGMPv3查询报文格式

IGMPv3报告报文的格式较为复杂,如图2-18所示。


2-18 IGMPv3侦听者报告格式

(1)类型字段,置为0x22,表示该报文为IGMPv3报告报文。

(2)组记录数目字段,表示此报文中包含的组记录数目。

(3)组记录字段。包含若干个组记录,每个组记录长度不固定,其内容如图2-19


2-19 IGMPv3组记录格式

组记录类型字段,表示该组记录中包含的数据的类型,目前定义了六种类

型,分别是:

·MODE IS INCLUDE。表示该主机的过滤模式为INCLUDE.也就是说,后面列出的地址都是主机想要接收的组播源地址。

·MODE IS EXCLUDE。表示该主机的过滤模式为EXCLUDE,也就是说,后面列

出的地址都是主机想要拒绝的组播源地址。

·CHANGE TO INCLUDEMODE。表示该主机的过滤模式从EXCLUDE切换为INCLUDE模式。

·CHANGE TO EXCLUDEMODE。表示该主机的过滤模式从INCLUDE切换为EXCLUDE模式。

·ALLOW NEW SOURCES。表示该主机中新增的想要接收的源地址。

·BLOCK OLD SOURCES。表示从该主机中删除的不想接收的源地址。

辅助数据长度字段,在组记录的最后,可以增加以4字节为单位的辅助数据,如果没有辅助数据,则置为0

源地址数目字段,表示该记录中包含了多少个组播源地址。

组地址字段,与源地址共同表示特定源组播。

源地址字段,每个长度为32bits。标志源地址,数目由源地址数目字段表示。

辅助数据字段。为将来的应用预留,在IGMPv3中并不需要。一台主机在发送报告报文的时候,应当把自己的源IP地址包含在IP数据报中,当主机还没有获得IP地址的时候,可以使用0.0.0.0作为源IP地址,支持IGMPv3的路由器必须接收来自0.0.0.0的数据报。主机的IGMP报文的目的地址标志为224.0.0.22,代表子网中所有支持IGMPv3的路由器。

1.3.3 IGMPv3的主要改进

IGMPv3除了支持原特定组播外,其工作原理与IGMPv2相比,并没有本质的改变,只是在某些地方做了改进和优化。以下列出了IGMPv3的主要特点和改进:

支持源特定组播SSM;

向后兼容IGMPvlIGMPv2;

主机可以定义要接收的组播源地址;

非查询路由器可以与查询路由器保持参数值同步;

最大响应时问从25.5s增加到53min,适合于较大的网络;

辅助数据字段为将来的应用预留了空间;

关系成员报告报文发送给目的地址224.0.0.22,可以帮助二层交换机更有效地实现IGMP监听 (IGMPSnooping)功能;

报告报文中可以包含多个组记录,可以有效地减少网络通信量;

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

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

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

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

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


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

 

 

posted @ 2022-02-11 13:20  张志伟122  阅读(801)  评论(0编辑  收藏  举报