加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

IGMP的3版RFC协议[RFC1112,RFC2236,RFC3376]翻译版(链接转载)

(2011-12-31 10:26:43)
标签:

杂谈

分类: Network

Version 1:

    http://hi.baidu.com/linux_kernel/blog/item/99f1d009825fef82d0581b4e.html

 

Version 2:

    http://hi.baidu.com/linux_kernel/blog/item/5a7380cb5a18c3fd53664f08.html

 

Version 3:

    http://hi.baidu.com/linux_kernel/blog/item/b3a77aec51a24fd12f2e218a.html

    http://hi.baidu.com/linux_kernel/blog/item/d6fd574ebb1da809b3de058a.html

 

--------------------------------------------------------------------------------------------------

IGMP组播技术简介

 

    要使组播报文最终能够到达接收者,需要将接收者主机接入IP组播网络,并加入到相应的组播组中。IGMP(Internet Group Management Protocol)是IP组播在用户网段使用的主机对路由器的信令机制。通过在接收者主机和与其直连的组播路由器上配置IGMP,可以实现主机动态加入和组播路由器对本地网络组成员信息的管理。

一、IGMP协议简介

       到目前为止,IGMP有三个版本:IGMPv1版本(由RFC1112定义)、IGMPv2版本(由RFC2236定义)和IGMPv3(由RFC3376定义)版本。所有IGMP版本都支持ASM(Any-Source Multicast)模型。IGMPv3可以直接应用于SSM(Source-Specific Multicast)模型,而IGMPv1和IGMPv2则需要SSM-Mapping技术的支持。

 

1)IGMPv1: 主机可以加入组播组。没有离开信息(leave messages)。路由器使用基于超时的机制去发现其成员不关注的组。

2)IGMPv2:该协议包含了离开信息,允许迅速向路由协议报告组成员终止情况,这对高带宽组播组或易变型组播组成员而言是非常重要的。

3)IGMPv3:与以上两种协议相比,该协议的主要改动为:允许主机指定它要接收通信流量的主机对象。来自网络中其它主机的流量是被隔离的。IGMPv3 也支持主机阻止那些来自于非要求的主机发送的网络数据包。

 

二、IGMP协议的工作过程

1、IGMPv1的工作过程

       IGMPv1协议主要基于查询和响应机制完成组播组管理。在连接用户主机的多路由器共享网段上,由三层路由协议选举出唯一的组播信息转发者(DR),并作为IGMPv1的查询器,负责该网段的组成员关系查询。

 

1)组成员关系维护

       IGMP查询器周期性地发送General-Query消息(224.0.0.1)。发送周期Timer-General-Query可以使用命令配置,缺省值是60秒

       网段内所有主机都接收到该General-Query消息,组成员在本地启动针对该组的定时器,超时时间为0~10秒之间的随机值。HostA不是任何组播组的成员,不做任何响应;HostB是组播组G1成员,则在本地启动定时器Timer-G1。HostC同时是组播组G1和G2的成员,则在本地启动定时器Timer-G1和Timer-G2

       第一个定时器超时的主机发送针对该组的Report消息。HostB上的Timer-G1首先超时,向该网段发送Report消息,目的地址为G1

       网段内的组G1的其它成员HostC侦听到Report消息,则停止定时器Timer-G1,不再发送针对G1的Report消息。即Report消息被抑制

       HostC上的Timer-G2超时,向该网段发送Report消息,目的地址为G2

       网段中的路由器接收到Report消息后,刷新对应的Group Timer,了解到本网段内存在组播组G1和G2的成员,则由组播路由协议生成(*,G1)和(*,G2)组播转发项。网络中一旦有组播组G1和G2的数据到达路由器,将向该网段转发。

 

2)新组成员加入

       HostA加入组播组G3,立即发送针对G3的Report消息。

       网段中的路由器接收到Report消息后,了解到本网段内出现了组播组G3的成员,则在组播路由表项(*,G3)中添加对应的下游接口。网络中一旦有组播组G3的数据到达路由器,将向该网段转发。

 

3)组成员离开

       退出组播组的主机将不再反馈Report消息。HostA退出组播组G3。当General-Query消息的到来时,HostA不启动Timer-G3,不再发送针对G3的Report消息。

       由于该网段不存在其它的组G3成员,则路由器无法收到G3的Report消息,定时器Timer-Membership超时后,删除(*,G3)表项中对应的下游接口。如果这时网络中组播组G3的数据到达路由器,则不会向该网段转发。

 

2、IGMPv2的工作过程

       IGMPv2使用独立的查询器选举机制,当共享网段上存在多个组播路由器时,IP地址最小的组播路由器为查询器。

 

1)组成员关系维护

       IGMP查询器(RouterB)周期性地发送General-Query消息,并启动定时器Timer-General-Query。General-Query消息的发送周期Timer-General-Query可以使用命令配置,缺省值是60秒。

       网段内所有主机都接收到该General-Query消息,组成员在本地启动针对该组的定时器,超时时间为0~Max Resp Time之间的随机值。HostA不是任何组播组的成员,不做任何响应;HostB是组播组G1成员,则在本地启动定时器Timer-G1。HostC同时是组播组G1和G2的成员,则在本地启动定时器Timer-G1和Timer-G2。

       第一个定时器超时的主机发送针对该组的Report消息。HostB上的Timer-G1首先超时,向该网段发送Report消息,目的地址为G1

       网段内的组G1的其它成员HostC侦听到Report消息,则停止定时器Timer-G1,不再发送针对G1的Report消息。即Report消息被抑制

       HostC上的Timer-G2超时,向该网段发送Report消息,目的地址为G2。

       网段中的路由器接收到Report消息后,了解到本网段内存在组播组G1和G2的成员,则由组播路由协议生成(*,G1)和(*,G2)组播转发项。网络中一旦有组播组G1和G2的数据到达路由器,将向该网段转发。

 

2)新组成员加入

       HostA加入组播组G3,立即发送针对G3的Report消息。

       网段中的路由器接收到Report消息后,了解到本网段内出现了组播组G3的成员,则在组播路由表项(*,G3)中添加对应的下游接口。网络中一旦有组播组G3的数据到达路由器,将向该网段转发。

 

3)组成员离开

       正常退出组播组的主机发送针对该组的Leave消息

       HostB退出组播组G1,发出针对G1的Leave消息。

       网段中的路由器都将收到该Leave消息查询器立即发送针对组G1的Lastmember-Query消息,重新启动定时器Timer-Membership。Lastmember-Query消息的发送次数可以使用命令robust-count配置,缺省值为2次;发送间隔可以使用命令lastmember-queryinterval配置,缺省值为1秒Timer-Membership的超时时间=Lastmember-Query消息的发送次数x发送间隔。

       网段中还存在组G1的组成员HostC,收到针对G1的Lastmember-Query消息后,启动定时器Timer-G1。Timer-G1超时,HostC向该网段发送针对组G1的Report消息。路由器端收到该Report消息后会刷新组G1的定时器,并停止继续发送指定组查询。

       如果网段中不存在其他组G1成员,则路由器将无法收到针对组G1的Report消息,定时器Timer-Membership超时后,删除(*,G1)表项中对应的下游接口如果这时网络中组播组G1的数据到达路由器,则不会向该网段转发。

       异常状况下,有可能发生:主机退出组播组,而路由器未能接收到Leave消息。如果网段中不存在该组的其它成员,则路由器将无法收到针对该组的Report消息,定时器Timer-Membership超时后,删除(*,G)表项中对应的下游接口。

 

3、IGMPv3的工作过程

       IGMPv3较IGMPv2的改进之处在于增加了主机对组播源的选择能力

 

1)主机指定源/组加入

       运行IGMPv3的主机在加入组播组的同时,能够明确的要求接收或不接收某特定组播源S发出的组播信息

       例如,网络中存在S1和S2两个组播源,均向组播组G发送组播报文,User仅希望接收从组播源S1发往组播组G的信息,如果主机和路由器之间应用IGMPv1或IGMPv2,User加入到某组播组G后,将同时接收到来自组播源S1和S2的组播信息。如果采用IGMPv3,主机User可以选择仅接收S1组播信息。

 

方法一:User发送IGMPv3报告(G,IS_IN,(S1)),仅接收源S1向组播组G发送的数据。

方法二:User发送IGMPv3报告(G,IS_EX,(S2)),退出指定源S2对应的组播组G,从而仅有来自S1的组播信息才能传递到User。

 

2)组成员关系维护

       查询周期性发送普遍组查询消息General Query。路由器根据反馈的组成员报告发现网段中的组成员,并维护组播组与源列表的对应关系。

       当查询器接收到离开某组播组的报告(G,TO_IN,(NULL))时,发送指定组查询消息,试探网段中是否还存在该组成员。路由器根据反馈的组成员报告更新该组对应的源列表。

       当查询器接收到改变组播组与源列表的对应关系的报告(G,BLOCK,(A))时,发送指定源/组查询消息如果组成员希望接收其中任意一个源的组播数据,则将反馈Report消息。路由器根据反馈的组成员报告更新该组对应的源列表。

 

--------------------------------------------------------------------------------------------------

 

Internet组管理协议

 

IGMP:Internet Group Management Protocol (Internet组管理协议)

协议简介

  Internet 组管理协议(IGMP)是因特网协议家族中的一个组播协议,用于 IP 主机向任一个直接相邻的路由器报告他们的组成员情况。IGMP 信息封装在 IP 报文中,其 IP 的协议号为 2

  它用来在ip主机和与其直接相邻的组播路由器之间建立、维护组播组成员关系。igmp不包括组播路由器之间的组成员关系信息的传播与维护,这部分工作由各组播路由协议完成。所有参与组播的主机必须实现igmp。

  参与ip组播的主机可以在任意位置、任意时间、成员总数不受限制地加入或退出组播组。组播路由器不需要也不可能保存所有主机的成员关系,它只是通过igmp协议了解每个接口连接的网段上是否存在某个组播组的接收者,即组成员。而主机方只需要保存自己加入了哪些组播组。

  igmp在主机与路由器之间是不对称的:主机需要响应组播路由器的igmp查询报文,即以igmp membership report报文响应;路由器周期性发送成员资格查询报文,然后根据收到的响应报文确定某个特定组在自己所在子网上是否有主机加入,并且当收到主机的退出组的报告时,发出特定组的查询报文(igmp版本2),以确定某个特定组是否已无成员存在。

协议版本

  IGMP 具有三种版本,即 IGMP v1、v2 和 v3。

  IGMPv1: 主机可以加入组播组。没有离开信息(leave messages)。路由器使用基于超时的机制去发现其成员不关注的组。

  IGMPv2: 该协议包含了离开信息,允许迅速向路由协议报告组成员终止情况,这对高带宽组播组或易变型组播组成员而言是非常重要的。

  IGMPv3: 与以上两种协议相比,该协议的主要改动为:允许主机指定它要接收通信流量的主机对象。来自网络中其它主机的流量是被隔离的。IGMPv3 也支持主机阻止那些来自于非要求的主机发送的网络数据包。

协议变种

  IGMP 协议变种有:

  距离矢量组播路由选择协议(DVMRP: Distance Vector Multicast Routing Protocol)

  IGMP 用户认证协议 (IGAP: IGMP for user Authentication Protocol)

  路由器端口组管理协议(RGMP: Router-port Group Management Protocol)

协议结构

  IGMP v3 必须实现5种基本信息类型且与以前的版本相兼容:

  0x11:会员查询

  0x22:第3版本会员报告

  0x12:第1版本会员报告

  0x16:第2版本会员报告

  0x17:第2版本离开组

版本改进

  igmp版本2对版本1所做的改进主要有:

  (1)共享网段上组播路由器的选举机制

  共享网段表示一个网段上有多个组播路由器的情况。在这种情况下,由于此网段上运行igmp的路由器都能从主机那里收到成员资格报告消息,因此,只需要一个路由器发送成员资格查询消息,这就需要一个路由器选举机制来确定一个路由器作为查询器

  在igmp版本1中,查询器的选择由组播路由协议决定;igmp版本2对此做了改进,规定同一网段上有多个组播路由器时,具有最小ip地址的组播路由器被选举出来充当查询器

  (2)igmp版本2增加了离开组机制

  在igmp版本1中,主机悄然离开组播组,不会给任何组播路由器发出任何通知。造成组播路由器只能依靠组播组响应超时来确定组播成员的离开。而在版本2中,当一个主机决定离开时,如果它是对最近一条成员资格查询消息作出响应的主机,那么它就会发送一条离开组的消息。

  (3)igmp版本2增加了对特定组的查询

  在igmp版本1中,组播路由器的一次查询,是针对该网段下的所有组播组。这种查询称为普遍组查询

  在igmp版本2中,在普遍组查询之外增加了特定组的查询,这种查询报文的目的ip地址为该组播组的ip地址,报文中的组地址域部分也为该组播组的ip地址。这样就避免了属于其它组播组成员的主机发送响应报文。

  (4)igmp版本2增加了最大响应时间字段Max Response Time 

  igmp版本2增加最大响应时间字段,以动态地调整主机对组查询报文的响应时间

工作过程

  1.IGMPv1 工作机制

  IGMPv1 主要基于查询和响应机制来完成对组播组成员的管理。当一个网段内有多台组播路由器时,由于它们都能从主机那里收到IGMP 成员关系报告报文(Membership Report Message),因此只需要其中一台路由器发送IGMP查询报文(Query Message)就足够了。这就需要有一个查询器(Querier)的选举机制来确定由哪台路由器作为IGMP 查询器。对于IGMPv1 来说,由组播路由协议(如PIM)选举出唯一的组播信息转发者DR(Designated Router,指定路由器)作为IGMP 查询器

  IGMPv1 没有专门定义离开组播组的报文。当运行IGMPv1 的主机离开某组播组时,将不会向其要离开的组播组发送报告报文。当网段中不再存在该组播组的成员后,IGMP 路由器将收不到任何发往该组播组的报告报文,于是IGMP 路由器在一段时间之后便删除该组播组所对应的组播转发项。

  2.IGMPv2 的改进

  与IGMPv1 相比,IGMPv2 增加了查询器选举机制和离开组机制。

  1) 查询器选举机制

   在IGMPv1 中,当某共享网段上存在多个组播路由器时,由组播路由协议(如PIM)选举的指定路由器充当查询器。

  在IGMPv2 中,增加了独立的查询器选举机制,其选举过程如下:

  (1) 所有IGMPv2 路由器在初始时都认为自己是查询器,并向本地网段内的所有主机和路由器发送IGMP 普遍组查询(General Query)报文(目的地址为:224.0.0.1);

  (2) 本地网段中的其它IGMPv2 路由器在收到该报文后,将报文的源IP 地址与自己的接口地址作比较。通过比较,IP 地址最小的路由器将成为查询器,其它路由器成为非查询器(Non-Querier);

  (3) 所有非查询器上都会启动一个定时器(即其它查询器存在时间定时器OtherQuerier Present Timer)。在该定时器超时前,如果收到了来自查询器的IGMP查询报文,则重置该定时器;否则,就认为原查询器失效,并发起新的查询器选举过程。

  2)离开组机制

   在IGMPv1 中,主机离开组播组时不会向组播路由器发出任何通知,导致组播路由器只能依靠组播组成员查询的响应超时来获知组播组成员的离开。

  而在IGMPv2 中,当一个主机离开某组播组时:

  (1) 该主机向本地网段内的所有组播路由器(目的地址为224.0.0.2)发送离开组(Leave Group)报文

  (2) 当查询器收到该报文后,向该主机所声明要离开的那个组播组发送特定组查询(Group-Specific Query)报文(目的地址字段和组地址字段均填充为所要查询的组播组地址); 

  (3) 如果该网段内还有该组播组的其它成员,则这些成员在收到特定组查询报文后,会在该报文中所设定的最大响应时间(Max Response Time)内发送成员关系报告报文;

  (4) 如果在最大响应时间内收到了该组播组其它成员发送的成员关系报告报文,查询器就会继续维护该组播组的成员关系;否则,查询器将认为该网段内已无该组播组的成员,于是不再维护这个组播组的成员关系。

  3.IGMPv3 的改进

   IGMPv3 在兼容和继承IGMPv1 和IGMPv2 的基础上,进一步增强了主机的控制能力,并增强了查询和报告报文的功能。 

  1)主机控制能力的增强

  IGMPv3 增加了针对组播源的过滤模式(INCLUDE/EXCLUDE),使主机在加入某组播组G 的同时,能够明确要求接收或拒绝来自某特定组播源S 的组播信息。当主机加入组播组时:

  若要求只接收来自指定组播源如S1、S2、……的组播信息,则其报告报文中可以标记为INCLUDE Sources(S1,S2,……)

  若拒绝接收来自指定组播源如S1、S2、……的组播信息,则其报告报文中可以标记为EXCLUDE Sources(S1,S2,……)

  2)查询和报告报文功能的增强

  (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,则向现有组播源列表中添加这些组播源。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有