多播;因特网组管理协议IGMP

“多播”也能够称为“组播”。在网络技术的应用并非非常多,网上视频会议、网上视频点播特别适合採用多播方式。

IP组播是一种通过使用一个组播地址将数据在同一时间以高效的方式发往处于TCP/IP网络上的多个接收者的协议。“你把数据包从一头放进去,网络就会试图将它们传递到想要得到它们的人那里。” 

由于假设採用单播方式,逐个节点传输,有多少个目标节点,就会有多少次传送过程,这样的方式显然效率极低。是不可取的;假设採用不区分目标、所有发送的广播方式。尽管一次能够传送完数据。可是显然达不到区分特定数据接收对象的目的。採用多播方式,既能够实现一次传送所有目标节点的数据,也能够达到仅仅对特定对象传送数据的目的。

  IP网络的多播一般通过多播IP地址来实现。

多播IP地址就是D类IP地址。即224.0.0.0至239.255.255.255之间的IP地址。

单播、多播(组播)和广播的区别?

  • 单播:网络节点之间的通信就好像是人们之间的对话一样。如果一个人对另外一个人说话,那么用网络技术的术语来描述就是“单播”,此时信息的接收和传递只在两个节点之间进行。单播在网络中得到了广泛的应用,网络上绝大部分的数据都是以单播的形式传输的,只是一般网络用户不知道而已。例如,你在收发电子邮件、浏览网页时,必须与邮件服务器、Web服务器建立连接,此时使用的就是单播数据传输方式。但是通常使用“点对点通信”(Point to Point)代替“单播”,因为“单播”一般与“多播”和“广播”相对应使用。
  • 多播:“多播”也可以称为“组播”,在网络技术的应用并不是很多,网上视频会议、网上视频点播特别适合采用多播方式。因为如果采用单播方式,逐个节点传输,有多少个目标节点,就会有多少次传送过程,这种方式显然效率极低,是不可取的;如果采用不区分目标、全部发送的广播方式,虽然一次可以传送完数据,但是显然达不到区分特定数据接收对象的目的。采用多播方式,既可以实现一次传送所有目标节点的数据,也可以达到只对特定对象传送数据的目的。   IP网络的多播一般通过多播IP地址来实现。多播IP地址就是D类IP地址,即224.0.0.0至239.255.255.255之间的IP地址。Windows 2000中的DHCP管理器支持多播IP地址的自动分配。
  • 广播:“广播”在网络中的应用较多,如客户机通过DHCP自动获得IP地址的过程就是通过广播来实现的。但是同单播和多播相比,广播几乎占用了子网内网络的所有带宽。拿开会打一个比方吧,在会场上只能有一个人发言,想象一下如果所有的人同时都用麦克风发言,那会场上就会乱成一锅粥。集线器由于其工作原理决定了不可能过滤广播风暴,一般的交换机也没有这一功能,不过现在有的网络交换机(如全向的QS系列交换机)也有过滤广播风暴功能了,路由器本身就有隔离广播风暴的作用。   广播风暴不能完全杜绝,但是只能在同一子网内传播,就好像喇叭的声音只能在同一会场内传播一样,因此在由几百台甚至上千台电脑构成的大中型局域网中,一般进行子网划分,就像将一个大厅用墙壁隔离成许多小厅一样,以达到隔离广播风暴的目的。   在IP网络中,广播地址用IP地址“255.255.255.255”来表示,这个IP地址代表同一子网内所有的IP地址。
  IGMP(Internet Group Management Protocol)作为因特网组管理协议,用于多播。
    与ICMP一样,  IGMP也被当作 IP 层的一部分,IGMP报文也通过IP数据报进行传输。
                        

长度为8字节的IGMP报文格式。

IGMP报文的字段格式

IGMP类型为1说明是由多播路由器发出的查询报文,为2说明是主机发出的报告报文。检验和的计算和ICMP协议相同。组地址为DIP地址。在查询报文中组地址设置为0,在报告报文中组地址为要参加的组地址。


     IGMP 在TCP/IP中负责局域网IP多播组成员管理的协议。用来在多播路由器与其局域网中的主机建立、维护多播组成员关系(组播路由器之间的组成员信息建立、维护使用组播路由协议)。关于多播,请参考《TCP/IP详解、卷一》第十二章。
如图 R1 R2 R3路由所在局域网中均有主机加入多播组。假设网络中有该组一多播数据包传送,那么如何使得该多播数据包只发给R1、R2、R3,而不发给R4.这时,就需要IGMP协议了。
    
         简单的说,IGMP实现了这样的功能,对于主机来说,它通知多播路由器,我在哪些多播组中。对多播路由器而言,IGMP使得多播路由器维护局域网中的主机都加入了哪些组。       (IGMP为一台主机提供手段,让它通知与其相连的路由器:在本主机上运行的一个应用程序想加入一个特定的多播组。)

基本过程:

    主机:           保存自己加入的组播播组列表
    多播路由器:  保存 每个接口连接的 网段 上是否存在某个组播组的组成员
        1)加入一个组:主机加入一个组,向多播路由器发送IGMP报文,声明成为某个多播组成员。本地多播路由器获取该报文后,就可以将这种成员关系发给其他多播路由器。
         2)动态维护多播组成员关系:多播路由器定时向本地主机发送查询报文,以判断某个多播组在本地主机中是否还有成员。
           
    在动态维护多播组成员关系时,多播路由器发送query报文,如果某个组在本地有多名成员,那么在第一个成员主机respond之后,其他成员主机不必再应答。

          ( 1 ) 在主机和多播路由器之间的所有通信都是使用 IP 多播。只要有可能,携 带 IGMP 报文的数据报都用硬件多播来传送。因此在支持硬件多播的网络上,没 有 参 加 I P 多播的主 机不会收到 IG M P 报文。
          ( 2 ) 多播路由器在探询组成员关系时,只需要对所有的组发送一个请求信息的询问报 文,而不需要对每一个组发送一个询问报文 ( 虽然也允许对一个特定组发送询问报文)。默 认的询问速率是每 125 秒 发 送 一 次 ( 通信量并不太大)。
           ( 3 ) 当同一个网络上连接有几个多播路由器时,它们能够迅速和有效地选择其中的一个 来探询主机的成员关系。因此,网络上多个多播路由器并不会引起IGMP通信量的增大。
          ( 4 ) 在 IGMP 的query报文中有最长响应时间 N( 默 认 值 为 10 秒 )。当收到query时,主机在0 到N之间随机选择发送响应所需经过的时延。因此,若一个 主机同时参加了几个多播组,则主机对每一个多播组选择不同的随机数。对应于最小时延的 响应最先发送。
          ( 5 ) 同一个组内的每一个主机都要监听响应,只要有本组的其他主机先发送了响应,自 己就可以不再发送响应了。这样就抑制了不必要的通信量。

IGMP协议

加入一个多播组

多播的基础就是一个进程的概念(操作系统执行的一个程序),该进程在一个主机的给定接口上加入了一个多播组。在一个给定接口上的多播组中的成员是动态的—它随时因进程加入和离开多播组而变化。

这里所指的进程必须以某种方式在给定的接口上加入某个多播组。进程也能离开先前加入的多播组。

IGMP报告和查询

多播路由器使用IGMP报文来记录与该路由器相连网络中组成员的变化情况。使用规则如下:

1) 当第一个进程加入一个组时,主机就发送一个IGMP报告。如果一个主机的多个进程加入同一组,只发送一个IGMP报告。这个报告被发送到进程加入组所在的同一接口上。

2) 进程离开一个组时,主机不发送IGMP报告,即便是组中的最后一个进程离开。主机知道在确定的组中已不再有组成员后,在随后收到的IGMP查询中就不再发送报告报文。

3) 多播路由器定时发送IGMP查询来了解是否还有任何主机包含有属于多播组的进程。多播路由器必须向每个接口发送一个IGMP查询。因为路由器希望主机对它加入的每个多播组均发回一个报告,因此IGMP查询报文中的组地址被设置为0

4) 主机通过发送IGMP报告来响应一个IGMP查询,对每个至少还包含一个进程的组均要发回IGMP报告。

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

3显示了两个IGMP报文,一个是主机发送的报告,另一个是路由器发送的查询。该路由器正在要求那个接口上的每个主机说明它加入的每个多播组。

3IGMP的报告和查询

所有主机组

目的IP地址224.0.0.1被称为所有主机组地址。它涉及在一个物理网络中的所有具备多播能力的主机和路由器。当接口初始化后,所有具备多播能力接口上的主机均自动加入这个多播组。这个组的成员无需发送IGMP报告。

IGMP目前有三个版本:IGMPv1、 IGMPv2、 IGMPv3

IGMPv1、IGMPv2、IGMPv3三者的对比:

  IGMPv1 IGMPv2   IGMPv3   
实现机制 基于查询与响应    
查询器 通过多播路由选择协议选举产生 自己有选举机制 自己有选举机制
组员加入     主机主动向要加入的多播组发送加入报告    
组员离开     不立即发送离开报文,只是在下次查询时不响应(即不发送响应报告) 主动发离开报文,查询器收到报文就开始进行特定组查询 主动发离开报文,查询器收到报文就开始进行特定组查询   
指定源、组查询 指定组 指定、组
指定源、组加入
RFC RFC 1112 RFC 2236  RFC 3376 
       

IGMPv3 的指定组功能:

1、主机控制能力的增强
        IGMPv3 增加了针对组播源的过滤模式(INCLUDE/EXCLUDE),使主机在加入某组播组G的同时,能够明确要求接收或拒绝来自某特定组播源S的组播信息。
    主机加入组播组时:
1)    若要求只接收来自指定组播源如S1、S2、……的组播信息,则其报告报文中可以标记为INCLUDE Sources(S1,S2,……);
2)    若拒绝接收来自指定组播源如S1、S2、……的组播信息,则其报告报文中可以标记为EXCLUDE Sources(S1,S2,……)。



2、查询和报告报文功能的增强
1)携带源地址的查询报文
    IGMPv3 不仅支持IGMPv1 的普遍组查询和IGMPv2 的特定组查询,而且还增加了对特定源组查询的支持:
§  普遍组查询报文中,既不携带组地址,也不携带源地址;
§  特定组查询报文中,携带组地址,但不携带源地址;
§ 特定源组查询报文中,既携带组地址,还携带一个或多个源地址。
2)包含多组记录的报告报文
     IGMPv3 报告报文的目的地址为224.0.0.22,可以携带一个或多个组记录。在每个组记录中,包含有组播组地址和组播源地址列表。其组记录类型分别为: IS_IN,IS_EX,TO_IN,TO_EX,ALLOW,BLOCK六种。
§ IS_IN:表示组播组与组播源列表之间的过滤模式为INCLUDE,即只接收从指定组播源列表发往该组播组的组播数据。
§ IS_EX:表示组播组与组播源列表之间的过滤模式为EXCLUDE,即只接收从指定组播源列表之外的组播源发往该组播组的组播数据。
§ TO_IN:表示组播组与组播源列表之间的过滤模式由EXCLUDE 转变为INCLUDE。
§ TO_EX:表示组播组与组播源列表之间的过滤模式由INCLUDE 转变为EXCLUDE

多播路由选择算法

反向路径转发RPF:反向路径转发(RPF)是用在多播路由选择的技术。这种机制用数据报的源地址来避免数据报反复通过一个环路

为了使用RPF,多播路由器必须有一个常规路由选择表,其中有到每个目的站的最短路径。当数据报到达时,路由器提取出源地址,并在本地路由选择表中进行查找,找到 I,也就是通往源的接口。如果数据报是通过接口I到达的,路由器就给其他接口转发一份副本,否则就丢弃这个副本。
如上图所示:路由器对每一个要转发的网络地址,都有一个路由表项(网络地址,下一跳,端口)。所以我们可以取出一个数据包的源地址,然后在路由列表中查找它的“端口1”:
1)如果找到的“端口1”和该数据包达到时的“端口2”是相同的,则说明这个数据包是正常的,然后转发这个数据包;
2)如果“端口1”和“端口2”不相同,则说明这个数据包是不正常的,丢弃这个数据包。 
上图中:数据包到达时的端口是S0,而查找路由列表找到的端口是S1,所以应该讲这个数据包丢弃。

RPF分成了两种:

RPF :(reverse path forwarding用于多播) 反向路径查找 ,就是为了防止网络中大量的多播包重复转发, 

            在组播中属于重要的一种技术。

URPF:(unicast reverse path forwarding) 单播反向路径查找,反向路由转发在防止恶意伪造源地址

            以及DDoS攻击方面颇有成效,管理员可以加以采用。




猜你喜欢

转载自blog.csdn.net/qq_22238021/article/details/80507057