`
sunday132
  • 浏览: 51315 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论

组播的相关知识(转)

阅读更多

组播相关知识(转)

一、什么是组播
1. 什么是组播?
组播是一种数据包传输方式,当有多台主机同时成为一个数据包的接受者时,出于对带宽和CPU负担的考虑,组播成为了一种最佳选择。

2. 组播如何进行工作?
组播通过把224.0.0.0-239.255.255.255的D类地址作为目的地址,有一台源主机发出目的地址是以上范围组播地址的报文,在网络中,如果有其他主机对于这个组的报文有兴趣的,可以申请加入这个组,并可以接受这个组,而其他不是这个组的成员是无法接受到这个组的报文的。

3. 组播和单播的区别?
为了让网络中的多个主机可以同时接受到相同的报文,如果采用单播的方式,那么源主机必须不停的产生多个相同的报文来进行发送,对于一些对时延很敏感的数据,在源主机要
产生多个相同的数据报文后,在产生第二个数据报文,这通常是无法容忍的。而且对于一台主机来说,同时不停的产生一个报文来说也是一个很大的负担。
如果采用组播的方式,源主机可以只需要发送一个报文就可以到达每个需要接受的主机上,这中间还要取决于路由器对组员和组关系的维护和选择。

4. 组播和广播的区别?
如同上个例子,当有多台主机想要接收相同的报文,广播采用的方式是把报文传送到局域网内每个主机上,不管这个主机是否对报文感兴趣。这样做就会造成了带宽的浪费和主机的资源浪费。而组播有一套对组员和组之间关系维护的机制,可以明确的知道在某个子网中,是否有主机对这类组播报文感兴趣,如果没有就不会把报文进行转发,并会通知上游路由器不要再转发这类报文到下游路由器上。


二、组播协议的要素
通过和广播,单播的数据传输方式的比较,我们可以发现组播中最关键的两个部分:
1. 组的管理和维护
在组播这套协议中,在网络设备和所连接的子网需要有一套协议或机制来保证网络设备知道所连接的子网中,有多少台主机属于一个特定的组。

2. 组播报文的路由要组播路由协议有什么用?
(1)是发现上游接口,离源最近的接口。因为组播路由协议只关心到源的最短路径。
(2)通过(S,G)对来决定真正的下游接口,当所有的路由器都知道了他们的上下游接口,那么一颗多播树就已经建立完成。根是源主机直连的路由器,而树枝是通过IGMP发现有组员的子网直连的路由器
(3)管理多播树
单播路由只需要知道下一跳的地址,就可以进行报文得转发。而组播,是把从一个由源产生得报文发送给一组目的。在一个特定的路由器上,一个包得多个备份可能从多个接口上发出。如果有环路得存在,那么一个或多个包会返回到其输入的接口,而且这个包也会经复制发到其他的端口上。这一结果可能导致多播风暴,这个包不断在路由器与交换机间复制,直到TTL减为0。由于这是个复制过程,它的危害会比单播环路严重的多,所以所有的多播路由器必须知道多播包的源,并且需要保证多播包不能从源接口发出。所以他必须知道哪些是上游接口和下游接口,可以分辨出数据包的流向。如果在不是在源的上游接口收到数据包,就会把它丢弃掉。而多播路由协议必须关心到源的最短路径,或者说它关心到源的上游接口。同时,除了关心上游接口,但是在转发的时候,不能把数据包从除了上游接口的其他接口发送出去。所以,另外,他还要关心(S,G)下游接口。当关于一个(S,G)的上下游接口都被判断出来了,那么一颗多播树就形成了。

稀疏和密集模式的比较?
什么是稀疏模式?它是指在一个整体网络中,参与组播的主机相对来少的一种拓扑,主要出现在WAN中。
什么是密集模式?和以上相反,主要出现在交换式LAN或校园网中

隐式加入和显示加入的比较?
组员可以在多播会话存活的时候,加入或退出一个组,而其相连的路由器必须动态的根据直连子网内组员的存在或退出来决定要加入或剪除多播树的树枝。这就是通过显式或隐式加入两种方式来完成。
隐式加入试用于密集模式,它是采用广播/剪除模式来去除多播树上的没有组播成员的树枝,也就是说,它是通过先把网际网络上的所有路由器都加入到多播树上,然后由每个路由器通过IGMP来查询是否有组员在直连的子网上,如果没有,就发出一条剪除消息,来剪除多余的树枝。
而显示加入适用于稀疏模式,它是由每个路由器先查询子网内有无组员,然后才看是否要发加入信息给上游路由器。

基于源的树和共享树的比较?
基于源的树是针对一个源就会有一颗多播树构成,也就说,如果网络中有多个可以产生组播报文的源主机,那么就会有多少颗组播树组成,在组播表里,会有组数×每组的成员数的项目条数。这种拓扑主要适用于密集模式。

共享树是在整个网络中选一个RP,或叫集中点,所有的组播报文都需要从这个点来进行传送,所以它没有(S,G)项,只有(*,G)项,表明所有有多个源。RP是预先设定的一个路由器,承担转发所有的多播报文的责任。所有要发送组播报文的源主机在发送组播报文前,都需要到RP上进行注册,然后通过直连的路由器来确定到RP的最短路径,通过RP路由器来确定到目的地的最短路径。RP成为了多播树的根结点。

相对于基于源的树,共享树的多播表项更为精简,适合在稀疏模式下使用。但是也有一些缺点。共享树在RP上的选择,会导致从源主机到各个组地址的路由并非最优路径。
如果在整个局域网里同时有多条耗带宽的组播链路,会导致RP成为整个网络的瓶颈。并且在共享树中,采用选取RP来转发组播报文,会增加产生单点故障的可能


三、如何来维护组成员
现在有IGMP和CGMP(Cisco专有的)两种协议,可以进行主机和网络设备之间的组员关系的维护。
IGMP是路由器和内部子网之间通信的方式,也就是说它是三层设备对直连子网的组关系的维护机制。它可以分成两个部分,主机部分和路由器部分,每个部分可以完成不同的工作。但是它有一个限制,就是IGMP报文只能在本地子网内传送,使三层设备不能前转到其他的设备上,它的TTL总是1。

IGMPv2主机部分的功能:
运行IGMPv2的主机会产生以下3种信息:
* Member Report消息
用来指示一台主机想要加入一个组播组,这个消息在一个主机第一次加入组的时候会发出,也可以用来响应三层设备发出Membership Query消息。由于Membership Query消息的目的地址是组地址,除了路由器,网内其他的组员主机都会收到这个报文,一旦其他主机收到报文,他们将会抑制自己的Membership Query报文,避免了内部局域网充斥了Membership Query报文。它只需要让路由器知道网内还有一个组员。
* Version 1 Membership Report消息
是为了IGMPv2主机的向后兼容性,用于检测和支持子网中IGMPv1主机和路由器
* Leave Group消息
主机发出的,目的地址为224.0.0.2(所有路由器),告诉路由器主机离开了一个组。

IGMPv2路由器功能:
主要是查询功能,它会有两种查询报文,General Query和Group-Specific QueryGeneral Query每隔一段时间就会向局域网内发送,目的地址是224.0.0.1(网内所有主机),所以子网里的每一个主机都会收到这个报文,并且会以Member Report报文回应,如果在一定的时间间隔内设备没有收到任何Member Report,它就会认为子网内没有组员。
Group-Specific Query报文,当路由器收到一个Leave Group报文的时候,它会发送这样一个具体包含有组地址的报文来查询这个组是否有组成员存在。
当如果在一个子网上同时有两个多播路由器,他们一开始都会认为自己是组播成员的查询者,当他们发送General Query报文时,通过比较从对端收到的报文源IP地址的大小来决定谁是查询者谁不是查询者,IP地址大的成为查询者。如果在一段时间内没有收到查询的报文,就会认为查询者down掉了,它就会充当起查询者的角色。

CGMP(Cisco专有)
考虑到了如果有交换机存在的情况,考虑到了在三层设备和主机中有二层设备,而IGMP是一个三层协议,二层设备如果收到这样一个类型的报文,只会向除了源端口以外的所有端口进行转发,这样会对网络的带宽和整体性能造成影响。解决的方法是希望交换机可以对有组播成员的端口进行组播报文的转发。
在交换式网络上,对组播流的控制有三种方法:
(1)手工配置的交换式多播树在交换机的桥接表上配置静态的组播MAC地址和端口映射。
(2)GMRP(802.1p)
他让MAC层的多播组地址动态地在交换机上注册和取消。 
(3)IGMP侦听
通过在交换机端口上配置,可以使交换机进行IGMP消息地检查,可以知道多播路由器和组员地位置。但是,检测IGMP消息意味着所有地IP包都要进行检查。尤其当这些如果是在软件地方式来实施,会严重降低交换机的性能。
CGMP的做法是通过路由器来告诉交换机,组播成员的组MAC地址和主机MAC地址,让交换机可以知道在那个端口上有组员,并且可以进行转发。


四、组播报文如何来进行路由
现下常用的组播路由协议有一下几种,由于现在主流的路由器产品只支持Pim,其他的路由器协议都不支持,所以只会对PIM做个详细的解释。
DVMRP它是通过RIP来发现到源的最短路径,采用广播/剪除的方式来构建一颗多播树。

MOSPF
它是通过OSPF协议来发现到源的最短路径,也是用在密集方式的拓扑下。

CBT
是一个与协议无关的,基于稀疏模式的,共享树协议。他和DVMRP和MOSPF的区别有两点:
它无需要在组播中在加入一个路由协议,可以在现有的任何协议上查找到到源的最短路径;它是基于共享树的协议,所以必须要在网络里设置一个网络的核心来确保组播包的前转;更适合使用在稀疏模式下。

PIM-DM
它是个与协议无关的组播协议,同时又是基于密集拓扑的组播协议。采用广播/剪除的方法来进行多播树的构造。
功能:
* 通过交换Hello报文发现邻居
* 当单播路由发生变化时,重新计算RPF接口
* 在多路访问的网络中选举指定路由器
* 在多路访问的网络中使用剪除覆盖
* 在多路访问的网络中用Assert消息选举指定前转器
其中会产生一下5中PIMv2消息:
* Hello
周期性地发送用来发现PIM邻居。和OSPF中的Hello报文有着类似点,如果没有在一定的时间内收到,就会认为邻居已经死亡。
* Join/Prune
这是一个合成的报文,其中有要加入组播树的路由器信息,也有要被剪除路由器信息,都会在这样一个报文里列出来。
当源在发送多播报文的时候,PIM-DM用扩散与剪除的方式建立多播树。那些没有组员连接的路由器通过发送Prune消息可以把自己变成处于剪除状态。
当处在剪除状态的路由器,它收到了所直连的子网所发出的IGMP加入信息,就会发出这样一个join的报文给上游路由器,通知列出了需要加入多播树的子网列表。
* Graft
当一个下游路由器发送给上游路由器一个Prune报文时,上游路由器不会马上把通告的子网从多播前转表中删除,而是会等待一段时间,如果下游路由器所直连的子网又要加入多播树时,需要发出一个Graft报文,通知上游路由器来加入多播树。
* Graft-Ack
上游路由器收到一个Graft信息,必须要回一个Ack信息,这样才会使下游路由器接受组播报文
* Assert
当有两台设备同时连在同一个广播网络上,并且有相同的上游路由器接口,如果两台路由器同时负责前转多播报文的话,会造成网络资源的浪费,所以需要可以在两台路由器中选出一个来作为唯一的前转报文路由器,Assert报文就是在两个路由器中互相通信,选出一个前转器的报文,通过优先权值,IP地址等参数来协商前转器。

PIM-SM
采用共享树的拓扑方式,建立起多播树。使用显示加入的方式来加入多播树。
查找汇聚点:
* 自举协议
* 自动RP协议
* 静态设置
PIM-SM和共享树:
PIM-SM由于是单向传输协议,所以组播流量只能从RP向外发送,而不能向RP发送,而源是通过把组播报文封装在PIM Register报文里,发送RP接口,然后再由RP进行剥头,对其中的组播报文进行处理。如果组播报文比较多,通过封装Register报文对设备来说是一种负担,所以可以在RP和源之间建立一个基于源的树,进行源到RP的组播报文传送。
PIM-SM和最短路径树
在大型网络中,共享树的路径未必是最短路径,PIM-SM可以通过在源和目的地之间建立一个基于源的树实现最短路径的传送。

 

分享到:
评论

相关推荐

    组播知识介绍

    ### 组播知识介绍 #### 一、组播的基本概念 组播作为一种高效的数据传输方式,在网络通信领域扮演着重要角色。与传统的单播(一对一)和广播(一对多但覆盖整个网络)不同,组播允许一个源节点将数据发送到特定的...

    组播模拟工具

    组播模拟工具是一种专门用于测试和模拟网络中组播报文传输的应用程序。在信息技术领域,组播(Multicast)是一种高效的数据传输方式,它允许一个数据源向多个目的地同时发送数据,而无需为每个接收者单独发送。这种...

    IP组播组网与配置,流媒体使用基本知识

    下面将详细阐述IP组播组网与配置以及流媒体使用的基本知识。 首先,IP组播是一种网络通信模式,其中数据包被发送到一个特定的组地址,而不是单一的主机地址。这个组地址属于D类IP地址范围(224.0.0.0到239.255.255....

    组播流测试工具

    本文将深入探讨“组播流测试工具”的相关知识点,包括组播的基本概念、ICMP(Internet Control Message Protocol)的作用以及如何利用微软的组播测试工具进行测试。 1. **组播概念**: - 组播是一种网络通信模式,...

    中兴微方案ONU组播配置

    ### 中兴微方案ONU组播配置详解 #### 一、C300 OLT组播配置概述 本文档详细介绍了如何配置不同类型的ONU(Optical ...通过上述步骤和示例,可以帮助网络管理员更好地理解和掌握中兴微方案ONU组播配置的相关知识点。

    组播测试工具

    在进行组播测试时,通常会关注以下几个关键知识点: 1. **组播地址分配**:组播地址是IP地址的一部分,位于D类地址空间(224.0.0.0到239.255.255.255)。了解如何正确地分配和使用这些地址对于确保数据包正确地到达...

    testcenter组播测试教程.rar

    在进行组播测试时,以下知识点也非常重要: 1. **组播地址分配**:了解IP组播地址的范围(224.0.0.0到239.255.255.255),以及D类地址的使用规则。 2. **IGMP协议理解**:IGMP用于主机与组播路由器之间的交互,管理...

    w5500udp组播.rar

    本文将详细讲解基于W5500芯片实现的UDP组播技术,以及如何在实际操作中应用这些知识。 首先,W5500是一款集成的以太网接口芯片,由韩国Silicon Labs公司生产。它提供了全硬件TCP/IP协议栈,包括TCP、UDP、IP、ICMP...

    组播 CCNP组播实验配置(完整版)

    根据给定文件的信息,我们可以将相关的知识点归纳如下: ### 组播 CCNP 组播实验配置(完整版) ...通过以上知识点的学习,可以深入了解组播技术,并能够在实际网络环境中正确配置和优化组播服务。

    C++ UDP 组播 Multicast 源码

    在C++中实现UDP组播,主要涉及以下几个关键知识点: 1. **套接字编程**:首先,你需要创建一个套接字(socket),这是所有网络通信的基础。在C++中,可以使用`<sys/socket.h>`和`<netinet/in.h>`头文件中的函数来...

    IP组播网络设计开发(第一卷中文)

    描述“IP组播网络设计开发(第一卷中文)组播技术入门:IGMP/PIM/DVMRP/MSDP/MBGP”进一步细化了该书的内容,聚焦于组播技术的基本入门知识。其中,IGMP(Internet Group Management Protocol)是一个网络层协议,...

    VB6.0实现的组播

    在VB6.0中实现组播,主要涉及以下几个关键知识点: 1. **IP多播协议**:组播基于IP多播协议,该协议使用D类IP地址(192.168.3.11-192.168.3.11)来标识组播组。发送者向这个地址发送数据,所有加入该组播组的成员都...

    windows下UDP组播(多播)发送和接收程序

    在Windows环境下,通过C++实现UDP组播发送和接收,我们需要理解以下几个关键知识点: 1. **UDP协议基础**:UDP(User Datagram Protocol)是传输层的一种无连接协议,相比TCP,它更轻量级,不提供连接建立、流量...

    C# udp组播

    1. **UDP组播的基本概念**: - 组播地址:不同于单播和广播,组播使用D类IP地址(范围192.168.3.11到172.16.58.3),这些地址表示一组接收者。 - 组播组:一个特定的组播地址代表一个组播组,所有加入该组的成员都...

    window下组播软件,qt工程

    在Windows环境下,开发一款基于Qt框架的组播软件是一个典型的多网络技术和多线程应用的实践。这个项目,称为“window下组播软件,qt工程”,利用了Qt库的强大功能来构建用户界面,并实现了UDP(用户数据报协议)的组...

    组播学习文档

    ### 组播技术详解 ...通过以上内容的学习,我们可以了解到组播技术的基本概念、关键技术及协议,包括组播地址的划分、IGMP协议的不同版本及其工作机制。这些知识对于理解并应用组播技术至关重要。

    C++组播和单播代码,支持windows和linux,经过72小时不间断测试

    5. **多播套接字选项**:使用`setsockopt()`设置组播相关的选项,如设置组播TTL(Time To Live)、接口选择等。 6. **数据传输**:使用`sendto()`和`recvfrom()`函数在客户端和服务器之间发送和接收数据包,注意...

    网络组播软件

    在压缩包中的文件名"GroupTalk"很可能是一款网络组播软件的名字,或者与之相关的组件或文档。"GroupTalk"暗示了它可能是一个用于群组讨论或协作的平台,支持多人同时参与,可能包含语音聊天、视频会议或者即时消息等...

    cisco组播教程

    ### Cisco组播教程知识点解析 #### 一、组播概览 - **定义与优势**:组播是一种网络通信技术,允许数据包被发送至多个目的地。与传统的单播(一对一)和广播(一对所有)相比,组播更加高效,因为它能够通过单一的...

    基于OpenFlow的互联网视频组播转单播SDN研究.pdf

    根据提供的文件信息,以下为关于“基于OpenFlow的互联网视频组播转单播SDN研究”的详细知识点梳理: 一、研究背景与重要性 随着互联网技术的普及和发展,基于IP网络的OTT(Over-The-Top,指互联网上的视频服务)...

Global site tag (gtag.js) - Google Analytics