
Internet组管理协定
Internet 组管理协定称为IGMP协定(Internet Group Management Protocol),是网际网路协定家族中的一个组播协定。该协定运行在主机和组播路由器之间。IGMP协定共有三个版本,即IGMPv1、v2 和v3。
基本介绍
- 中文名:网际组管理协定
- 外文名:IGMP(Internet Group Management Protocol)
- 可用于:主机和多播路由器的请求和探询
协定简介
主机IP软体需要进行组播扩展,才能使主机能够在本地网路上收发组播分组。但仅靠这一点是不够的,因为跨越多个网路的组播转发必须依赖于路由器。路由器为建立组播转发路由必需了解每个组员在Internet中的分布,这要求主机必须能将其所在的组播组通知给本地路由器,这也是建立组播转发路由的基础。主机与本地路由器之间使用Internet组管理协定(IGMP,Internet Group Management Protocol)来进行组播组成员信息的互动。在此基础上,本地路由器再你信息与她组播路由器通信,传播组播组的成员信息,并建立组播路由。这个过程与路由器之间的常规单播路由。这个过程与路由器之间的常规单播路由的传播十分相似。IGMP是TCP/IP中重要标準之一,所有IP组播系统(包括主机和路由器)都需要支持IGMP协定。
组播协定包括组成员管理协定和组播路由协定。组成员管理协定用于管理组播组成员的加入和离开,组播路由协定负责在路由器之间互动信息来建立组播树。IGMP属于前者,是组播路由器用来维护组播组成员信息的协定,运行于主机和和组播路由器之间。IGMP 信息封装在IP报文中,其IP的协定号为2。
若一个主机想要接收传送到一个特定组的组播数据包,它需要监听发往那个特定组的所有数据包。为解决Internet上组播数据包的路径选择,主机需通过通知其子网上的组播路由器来加入或离开一个组,组播中採用IGMP来完成这一任务。这样,组播路由器就可以知道网路上组播组的成员,并由此决定是否向它们的网路转发组播数据包。当一个组播路由器收到一个组播分组时,它检查数据包的组播目的地址,仅当接口上有那个组的成员时才向其转发。
IGMP提供了在转发组播数据包到目的地的最后阶段所需的信息,实现如下双向的功能:
- 主机通过IGMP通知路由器希望接收或离开某个特定组播组的信息。
- 路由器通过IGMP周期性地查询区域网路内的组播组成员是否处于活动状态,实现所连网段组成员关係的收集与维护。
IGMP共有三个版本,即IGMP v1、v2 和 v3。
IGMP v1
IGMPv1 定义了主机只可以加入组播组,但没有定义离开成员组的信息,路由器基于成员组的逾时机制发现离线的组成员。
IGMPv1 主要基于查询和回响机制来完成对组播组成员的管理。当一个网段内有多台组播路由器时,由于它们都能从主机那里收到IGMP 成员关係报告报文(Membership Report Message),因此只需要其中一台路由器传送IGMP查询报文(Query Message)就足够了。这就需要有一个查询器(Querier)的选举机制来确定由哪台路由器作为IGMP 查询器。对于IGMPv1 来说,由组播路由协定(如PIM)选举出唯一的组播信息转发者DR(Designated Router,指定路由器)作为IGMP 查询器。
IGMPv1 没有专门定义离开组播组的报文。当运行IGMPv1 的主机离开某组播组时,将不会向其要离开的组播组传送报告报文。当网段中不再存在该组播组的成员后,IGMP路由器将收不到任何发往该组播组的报告报文,于是IGMP 路由器在一段时间之后便删除该组播组所对应的组播转发项。
IGMPv2
iGMPv2 是在版本1 上基础上增加了主机离开成员组的信息,允许迅速向路由协定报告组成员离开情况,这对高频宽组播组或易变型组播组成员而言是非常重要的。另外,若一个子网内有多个组播路由器,那幺多个路由器同时传送IGMP 查询报文不仅浪费资源,还会引起网路的堵塞。为解决这个问题,IGMPv2。不同使用路由选举机制, 能在一个子网内查询多个路由器。
igmp版本2对版本1所做的改进主要有:
(1)共享网段上组播路由器的选举机制
共享网段表示一个网段上有多个组播路由器的情况。在这种情况下,由于此网段上运行igmp的路由器都能从主机那里收到成员资格报告讯息,因此,只需要一个路由器传送成员资格查询讯息,这就需要一个路由器选举机制来确定一个路由器作为查询器。其选举过程如下:
(1) 所有IGMPv2路由器在初始时都认为自己是查询器,并向本地网段内的所有主机和路由器传送IGMP 普遍组查询(General Query)报文(目的地址为:224.0.0.1);
(2) 本地网段中的其它IGMPv2路由器在收到该报文后,将报文的源IP 地址与自己的接口地址作比较。通过比较,IP 地址最小的路由器将成为查询器,其它路由器成为非查询器(Non-Querier);
(3) 所有非查询器上都会启动一个定时器(即其它查询器存在时间定时器OtherQuerier Present Timer)。在该定时器逾时前,如果收到了来自查询器的IGMP查询报文,则重置该定时器;否则,就认为原查询器失效,并发起新的查询器选举过程。
在igmp版本1中,查询器的选择由组播路由协定决定;igmp版本2对此做了改进,规定同一网段上有多个组播路由器时,具有最小ip地址的组播路由器被选举出来充当查询器。
(2)igmp版本2增加了离开组机制
在igmp版本1中,主机悄然离开组播组,不会给任何组播路由器发出任何通知。造成组播路由器只能依靠组播组回响逾时来确定组播成员的离开。而在版本2中,当一个主机决定离开时,如果它是对一条成员资格查询讯息作出回响的主机,那幺它就会传送一条离开组的讯息。
在IGMPv2 中,当一个主机离开某组播组时:
(1) 该主机向本地网段内的所有组播路由器(目的地址为224.0.0.2)传送离开组(Leave Group)报文;
(2) 当查询器收到该报文后,向该主机所声明要离开的那个组播组传送特定组查询(Group-Specific Query)报文(目的地址栏位和组地址栏位均填充为所要查询的组播组地址);
(3) 如果该网段内还有该组播组的其它成员,则这些成员在收到特定组查询报文后,会在该报文中所设定的最大回响时间(Max Response Time)内传送成员关係报告报文;
(4) 如果在最大回响时间内收到了该组播组其它成员传送的成员关係报告报文,查询器就会继续维护该组播组的成员关係;否则,查询器将认为该网段内已无该组播组的成员,于是不再维护这个组播组的成员关係。
(3)igmp版本2增加了对特定组的查询
在igmp版本1中,组播路由器的一次查询,是针对该网段下的所有组播组。这种查询称为普遍组查询。
在igmp版本2中,在普遍组查询之外增加了特定组的查询,这种查询报文的目的ip地址为该组播组的ip地址,报文中的组地址域部分也为该组播组的ip地址。这样就避免了属于其它组播组成员的主机传送回响报文。
(4)igmp版本2增加了最大回响时间栏位
igmp版本2增加最大回响时间栏位,以动态地调整主机对组查询报文的回响时间。
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 的特定组查询,而且还增加了对特定源组查询的支持:
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,则向现有组播源列表中添加这些组播源。
实现步骤如下:
1、当主机某个进程加入一个组播组时,主机传送一个IGMP 报告。若一个主机多个进程同时加入同一组,则传送一个IGMP 报告。
2、进程离开一个多播组时,主机不传送IGMP 报告,即便是组中最后一个进程离开多播组。当主机确定已不再有组成员后,在随后收到的IGMP 查询中就不应答报文。
3、多播路由器定时传送IGMP 查询是否还有其他主机包含有属于多播组的进程。多播路由器必须向每个接口传送IGMP 查询。
4、主机通过传送IGMP 报告来回响一个IGMP 查询,对每个至少还包含一个进程的组均要发回IGMP 报告。
使用上述查询和报告报文,多播路由器对每个接口保持一张映射表,表中记录了接口上包含的一个或多个主机多播组。当路由器收到要转发的多播数据报时,只需将该数据报转发到该接口上。
2、进程离开一个多播组时,主机不传送IGMP 报告,即便是组中最后一个进程离开多播组。当主机确定已不再有组成员后,在随后收到的IGMP 查询中就不应答报文。
3、多播路由器定时传送IGMP 查询是否还有其他主机包含有属于多播组的进程。多播路由器必须向每个接口传送IGMP 查询。
4、主机通过传送IGMP 报告来回响一个IGMP 查询,对每个至少还包含一个进程的组均要发回IGMP 报告。
使用上述查询和报告报文,多播路由器对每个接口保持一张映射表,表中记录了接口上包含的一个或多个主机多播组。当路由器收到要转发的多播数据报时,只需将该数据报转发到该接口上。
IGMP 组播中存在的问题
组播的可靠性
IP 组播使用用户数据报UDP 协定,然而UDP 是尽最大能力投递的一种协定。因此,IP 组播套用势必会遇到数据包丢失和乱序问题。为此,对于IGMP 不同类型的套用必须在确认方式( 肯定确认ACK 和否定确认NACK),集中确认与分布确认、重传机制、流量控制、拥塞控制等方面综合考虑,提出解决反案。迄今为止,儘管在广域网环境中已经存在许多可靠组播协定,包括可靠组播协定RMP(ReliableMulticast Protocol),可扩可靠组播SRM(Scalable Reliable Multicast),和可靠组播传输协定RMTP(ReliableMulticast Transport Protocol)。组播的可靠性研究仍然是重点研究课题之一。
组播的安全性
组播安全性是只有注册的主机才能够向组传送数据和接收组播数据。
然而IP 组播很难保证这一点。首先,IP 组播使用UDP,网路中任何主机都可以向某个组播地址传送UDP 包;其次,Internet缺少对于网路层的访问控制,组成员可以随时加入和退出组播组,使得组播安全性问题仍然是一个技术难点。
IGMP 组播协定是IPv4 环境下重要的协定。IGMPv1 实现简单,但是主机离开多播组延迟过大,选择查询路由器需要依赖具体的组播路由协定;IGMPv2缺少对主机进程加入多播组的定义,制约了其套用範围。IGMPv3 主要改进是支持源特定组播。大部分的网路设备和主机作业系统协定栈都支持IGMPv1 和IGMPv2,但为适应複杂的网路需求,必须大力推进IGMPv3 协定的用套用。Windows XP 已经支持IGMPv3 ,UNIX 作业系统也可以与IGMP v1/ v2 版本向后兼容,组播技术有着广阔的发展前景。
然而IP 组播很难保证这一点。首先,IP 组播使用UDP,网路中任何主机都可以向某个组播地址传送UDP 包;其次,Internet缺少对于网路层的访问控制,组成员可以随时加入和退出组播组,使得组播安全性问题仍然是一个技术难点。
IGMP 组播协定是IPv4 环境下重要的协定。IGMPv1 实现简单,但是主机离开多播组延迟过大,选择查询路由器需要依赖具体的组播路由协定;IGMPv2缺少对主机进程加入多播组的定义,制约了其套用範围。IGMPv3 主要改进是支持源特定组播。大部分的网路设备和主机作业系统协定栈都支持IGMPv1 和IGMPv2,但为适应複杂的网路需求,必须大力推进IGMPv3 协定的用套用。Windows XP 已经支持IGMPv3 ,UNIX 作业系统也可以与IGMP v1/ v2 版本向后兼容,组播技术有着广阔的发展前景。
IGMP组播成员查询
IGMP的组成员查询利用报文中类型栏位0x11来标识。IGMP的组成员查询包含了两种子类型:一般组成员查询(General Query)和特定组成员查询(Group-Specific Query)。子类型利用报文中的组播组地址(Group Address)栏位来区分:组地址段等于0,表示一般组成员查询;组地址地段不等于0,则表示特定组成员查询,用于查询本地网路中的每个指定组播组的成员,其中组播组的地址由组地址(Group Address)栏位来指定被查询的组播组。在IGMPv1中只支持一般组成员查询,IGMPv2支持特定组成员查询。
一般组成员查询
IGMP约定,本地路由器利用一般组成员查询方式来周期性地向本网路内的所有主机传送IGMP组成员查询报文;本地网路中的主机在接收到IGMP查询报文时,将会对该报文作出相应,返回一个组成员报告报文,通知路由器本主机所在的组播组的地址。
特定组成员查询
正常情况下,IGMP採用一般组播组成员查询来轮询本地网路中的组成员信息。这种查询并非针对某一个组播组,而是针对本地网路中所有组进行查询。在某些特定环境中,路由器也需要查询在本地网路中是否存在某个特定组播组的成员。这时可使用特定组成员查询。
转载请注明出处累积网 » Internet组管理协定