深入理解IGMP协议

来源:互联网 发布:数据库有几个事务 编辑:程序博客网 时间:2024/05/16 11:12

IGMP网际组管理协议
————IP多播

IGMP v1: 定义了主机只可以加入组播组,但没有定义离开成员组的信息,路由器基于成员组的超时机制发现离线的组成员。
报文格式:
这里写图片描述

版本:版本为1。 类型:1—多播路由器发出的查询报文;2—主机发出的报告报文。 未用:保留为以后使用。
检验和:检验和的计算和ICMP协议相同。 地址:查询报文为0;报告报文为32为组地址。

IGMP v2:在版本1 上基础上增加了主机离开成员组的信息,允许迅速向路由协议报告组成员离开情况。

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

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

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

特点

  1. IGMP报告并不保证被可靠接收(因为使用的是IP交付),下一个报告随机选择时间发送;

  2. 当一个主机收到查询后,经过一定的时间间隔才发送报告;

  3. 若某主机收到报告后,自己可不用发送报告(说明有其它同一多播组的主机已经发送,可以保证多播路由器的接口表中,至少存在一个多播组主机);

  4. 对发往一个多播地址的数据报从不产生ICMP差错报文;

  5. 不管TTL是多少,多播路由器对224.0.0.0-224.0.0.255的地址均不转发;

  6. IGMP不知道IP多播组包含的成员数,也不知道这些成员都分布在哪些网络上;

  7. IGMP是让连接在本地局域网上的多播路由器知道哪个接口的本地局域网上是否有主机参加或退出了某个多播组;

(二)多播路由选择协议
多播路由选择实际上就是要找出以源主机为根节点的多播转发树。现已有多种实用的多播路由选择协议,它们在转发多播数据报时使用了一下的三种方法:
(1) 洪泛与剪除。适用于较小的多播组,组成员所在的局域网相邻。洪泛即广播,为避免兜圈子采用反向路径广播RPB。当在多播转发树上的某个路由器发现他的下游树枝(叶节点方向)已没有该多播组的成员,就应把它和稀有的树枝一起剪除。
(2) 隧道技术。适用于多播组的位置在地理上很分散的情况。“隧道”一端的路由器对多播数据报进行封装,使之成为单播数据报,然后通过“隧道”发送到另一端。另一端的路由器将单播数据报恢复为原来的多播数据报,继续向多个目的站转发。
(3) 基于核心的发现技术。适用于多播组的大小在较大范围内变化时。对每一个多播组G指定一个核心路由器,给出它的IP单播地址。

目前没有统一使用于整个因特网的多播路由选择协议,建议使用的协议有:
1、 基于向量多播路由选择协议DBMRP(Distance Vector Multicast Routing Protocol)。因特网使用的第一个协议。

2、 基于核心的转发树CBT(Core Based Tree)。

3、 开放最短通路优先的多播扩展MOSPF(Multicast extensions to OSPF)。

4、 协议无关多播-稀疏方式PIM-SM(Protocol Independent Multicast-Space Mode)。

5、 协议无关多播-密集方式PIM-DM(Protocol Independent Multicast-Dense Mode)。

IGMPv1: 定义了主机只可以加入组播组,但没有定义离开成员组的信息,路由器基于成员组的超时机制发现离线的组成员。

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

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

IGMPv2: 是在版本1 上基础上增加了主机离开成员组的信息,允许迅速向路由协议报告组成员离开情况,这对高带宽组播组或易变型组播组成员而言是非常重要的。另外,若一个子网内有多个组播路由器,那么多个路由器同时发送IGMP 查询报文不仅浪费资源,还会引起[1] 网络的堵塞。为解决这个问题,IGMPv2。不同使用路由选举机制, 能在一个子网内查询多个路由器。

IGMP版本2对版本1所做的改进主要有:
1、共享网段上组播路由器的选举机制
共享网段表示一个网段上有多个组播路由器的情况。在这种情况下,由于此网段上运行IGMP的路由器都能从主机那里收到成员资格报告消息,因此,只需要一个路由器发送成员资格查询消息,这就需要一个路由器选举机制来确定一个路由器作为查询器。其选举过程如下:
(1) 所有IGMPv2路由器在初始时都认为自己是查询器,并向本地网段内的所有主机和路由器发送IGMP 普遍组查询(General Query)报文(目的地址为:224.0.0.1);
(2) 本地网段中的其它IGMPv2路由器在收到该报文后,将报文的源IP
地址与自己的接口地址作比较。通过比较,IP 地址最小的路由器将成为查询器,其它路由器成为非查询器(Non-Querier);
(3)所有非查询器上都会启动一个定时器(即其它查询器存在时间定时器OtherQuerier PresentTimer)。在该定时器超时前,如果收到了来自查询器的IGMP查询报文,则重置该定时器;否则,就认为原查询器失效,并发起新的查询器选举过程。
在IGMP版本1中,查询器的选择由组播路由协议决定;igmp版本2对此做了改进,规定同一网段上有多个组播路由器时,具有最小ip地址的组播路由器被选举出来充当查询器。

2、 IGMP版本2增加了离开组机制
在IGMP版本1中,主机悄然离开组播组,不会给任何组播路由器发出任何通知。造成组播路由器只能依靠组播组响应超时来确定组播成员的离开。而在版本2中,当一个主机决定离开时,如果它是对一条成员资格查询消息作出响应的主机,那么它就会发送一条离开组的消息。
在IGMPv2 中,当一个主机离开某组播组时:
(1)该主机向本地网段内的所有组播路由器(目的地址为224.0.0.2)发送离开组(Leave Group)报文;
(2)当查询器收到该报文后,向该主机所声明要离开的那个组播组发送特定组查询(Group-SpecificQuery)报文(目的地址字段和组地址字段均填充为所要查询的组播组地址);
(3)如果该网段内还有该组播组的其它成员,则这些成员在收到特定组查询报文后,会在该报文中所设定的最大响应时间(Max Response Time)内发送成员关系报告报文;
(4)如果在最大响应时间内收到了该组播组其它成员发送的成员关系报告报文,查询器就会继续维护该组播组的成员关系;否则,查询器将认为该网段内已无该组播组的成员,于是不再维护这个组播组的成员关系。

3、IGMP版本2增加了对特定组的查询 在IGMP版本1中,组播路由器的一次查询,是针对该网段下的所有组播组。这种查询称为普遍组查询。

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

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的特定组查询,而且还增加了对特定源组查询的支持:

z 普遍组查询报文中,既不携带组地址,也不携带源地址;
z特定组查询报文中,携带组地址,但不携带源地址;
z 特定源组查询报文中,既携带组地址,还携带一个或多个源地址。

(2)包含多组记录的报告报文 IGMPv3报告报文的目的地址为224.0.0.22,可以携带一个或多个组记录。在每个组记录中,包含有组播组地址和组播源地址列表。组记录可以分为多种类型,如下:

IS_IN:表示组播组与组播源列表之间的过滤模式为INCLUDE,即只接收从指定组播源列表发往该组播组的组播数据。
IS_EX:表示组播组与组播源列表之间的过滤模式为EXCLUDE,即只接收从指定组播源列表之外的组播源发往该组播组的组播数据。 z
TO_IN:表示组播组与组播源列表之间的过滤模式由EXCLUDE 转变为INCLUDE。
TO_EX:表示组播组与组播源列表之间的过滤模式由INCLUDE 转变为EXCLUDE。
ALLOW:表示在现有状态的基础上,还希望从某些组播源接收组播数据。如果当前的对应关系为INCLUDE,则向现有组播源列表中添加这些组播源;如果当前的对应关系为EXCLUDE,则从现有组播源列表中删除这些组播源。

BLOCK:表示在现有状态的基础上,不再希望从某些组播源接收组播数据。如果当前的对应关系为INCLUDE,则从现有组播源列表中删除这些组播源;如果当前的对应关系为EXCLUDE,则向现有组播源列表中添加这些组播源。

组播的可靠性
IP 组播使用用户数据报UDP 协议,然而UDP 是尽最大能力投递的一种协议。因此,IP 组播应用势必会遇到数据包丢失和乱序问题。为此,对于IGMP 不同类型的应用必须在确认方式( 肯定确认ACK 和否定确认NACK),集中确认与分布确认、重传机制、流量控制、拥塞控制等方面综合考虑,提出解决反案。迄今为止,尽管在广域网环境中已经存在许多可靠组播协议,包括可靠组播协议RMP(ReliableMulticast Protocol),可扩可靠组播SRM(Scalable Reliable Multicast),和可靠组播传输协议RMTP(ReliableMulticast Transport Protocol)。组播的可靠性研究仍然是重点研究课题之一。

组播的安全性
组播安全性是只有注册的主机才能够向组发送数据和接收组播数据。
  然而IP 组播很难保证这一点。首先,IP 组播使用UDP,网络中任何主机都可以向某个组播地址发送UDP 包;其次,Internet缺少对于网络层的访问控制,组成员可以随时加入和退出组播组,使得组播安全性问题仍然是一个技术难点。

0 0
原创粉丝点击