什么是单播、多播和广播、广播机制、组播

——★单播★——
单播(Unicast)
单播(Unicast)是在网络中从源地到目的地转发单播通信的过程。单播通信是去往一个独特的地址的。在这种情况下,仅有一个发送者,和一个接受者。这个术语对多播存在对照区别,在一单个发送者和一组被选择的接收者之间的通信,和无限传播,在任何发送者和一组接近在一个网络中的发送者的接收者之间的通信。一个早期的术语,点对点通信,在意义上与单播相似。

网络节点之间的通信就好像是人们之间的对话一样。如果一个人对另外一个人说话,那么用网络技术的术语来描述就是“单播”,此时信息的接收和传递只在两个节点之间进行

单播:一对一
单播在网络中得到了广泛的应用,网络上绝大部分的数据都是以单播的形式传输的,只是一般网络用户不知道而已。例如,你在收发电子邮件、浏览网页时,必须与邮件服务器、Web服务器建立连接,此时使用的就是单播数据传输方式。但是通常使用“点对点通信”(PointtoPoint)代替“单播”,因为“单播”一般与“多播”和“广播”相对应使用。

——★多播★——
多播(Multicast)
多播(Multicast)是在一个网络上一单个发送者和多个接收者之间的通信。多播技术在很多接收者同时想收听或看相同的源通过递送一单个信息流给很多接收者时被用于减少网络通信。对一个团体视频会议,一个(n-1)次低的带宽被需要。“多播”被典型地用于指使用一个多播地址的IP多播。IPv6支持单播,多播,和任意播,但是在IPv6中广播作为一个术语已经消失,但是被认为是一种形式的多播。但是那里有其它协议执行多播概念例如异步传输模式(ATM),它已经嵌入到“点-到-多点”或“多点-到-多点”连接机制中。

“单播”(Unicast)、“多播”(Multicast)和“广播”(Broadcast)这三个术语都是用来描述网络节点之间通讯方式的术语。那么这些术语究竟是什么意思?区别何在?且听下文分解。
“多播”可以理解为一个人向多个人(但不是在场的所有人)说话,这样能够提高通话的效率。如果你要通知特定的某些人同一件事情,但是又不想让其他人知道,使用电话一个一个地通知就非常麻烦,而使用日常生活的大喇叭进行广播通知,就达不到只通知个别人的目的了,此时使用“多播”来实现就会非常方便快捷,但是现实生活中多播设备非常少。


——★广播★——
广播和多播仅应用于UDP,它们对需将报文同时传往多个接收者的应用来说十分重要。TCP是一个面向连接的协议,它意味着分别运行于两主机(由IP地址确定)内的两进程(由端口号确定)间存在一条连接。
考虑包含多个主机的共享信道网络如以太网。每个以太网帧包含源主机和目的主机的以太网地址(48 bit)。通常每个以太网帧仅发往单个目的主机,目的地址指明单个接收接口,因而称为单播(unicast)。在这种方式下,任意两个主机的通信不会干扰网内其他主机(可能引起争夺共享信道的情况除外)。
然而,有时一个主机要向网上的所有其他主机发送帧,这就是广播。通过ARP和RARP可以看到这一过程。多播(multicast) 处于单播和广播之间:帧仅传送给属于多播组的多个主机。
为了弄清广播和多播,需要了解主机对由信道传送过来帧的过滤过程。





什么是广播机制?

1.   介绍  
在高速局域网中使用广播是一种通常的作法。因为IP中未指出广播的通用标准,因此协议实现者也就无法使用它了。这里我们考虑的是不可靠的,非串行的,包可重复的广播。我们假设数据链路层支持有效的广播,通常的网络如以太网,令牌网都支持广播。我们不能假设广播传输是可靠的,因为这样做代价太大,但我们假定主机发出的广播大部分还是能够到达目的地的。因为广播会对网络造成过大的负担,因此不能无限制地使用。  
2.   为何采用广播  
广播在主机不知道消息发送者的位置时是有用的,广播在主机需要为许多机器提供数据时也有作用。主机需要的信息可能在它的邻居中,它可以一一询问而得知,而把这些主机的地址固定存储是不合适的,因为主机的邻居可能会变化,这对管理是一个学生的负担。而对所有邻居的地址进行一一询问简直不可能,因为需要询问的主机的数目会太多。使用广播就不会出现这种问题。在主机需要邻居的信息时广播有用,当主机有信息需要向邻居传送时广播也很有用,例如网关就可以通过广播告知邻近的网关它的存在。我们会认为组播可能会代替广播,但是广播在硬件一层(或低层是进行的),而上层软件将不必要的信息过滤掉达到的效果就是组播。  
3.   广播级别  
有下面几种IP广播:  
在本地网上进行单目的地广播:发送主机知道目的机地址,但在数据链路层进行广播,这是可能是为了避免进行路由。因为不是IP广播,所以IP层不需要介入。   
在本地网上对所有主机进行广播:IP的主机号部分可以指定一个特定的值,这个值指出是广播。接收IP必须能够识别这个地址和它本身原有的地址。这是最常用的一种广播形式,它也是ARP,名字服务器,时间服务器等运作的基础。   
对远程网的所有主机进行广播:它的机制和本地广播差不多,数据报在到达此网的网关前还是象平常一样传输,到达网关后再进行广播。   
多子网广播:可以使用IP地址子网号表示这种广播。它的工作原来和对一个远程网进行广播相同,不过是对多个子网而已。   
向整个Internet广播:这种广播可能根本没有用,而且也不会有人使用。   
因为安全和效率的考虑,网关可以不转发广播,在自治系统中最好不要转发广播。  
4.   广播方法  
主机的IP接收层必须能够支持广播。有了广播机制,主机必须能够对接收到的数据报中的目的地址进行比较,看和自己的IP地址是不是一样,而且还必须能够知道这个地址是不是个广播地址,如果是也要接收。因为在数据链路层已经解决了广播问题,所以IP层主机如果需要广播只要发出带有广播地址的包就行了。网关上的算法要复杂一些。  

但是在有子网的网络内进行广播可能比较麻烦。即使如此,也有相应的算法解决这个问题,而且不怎么费事。一个好的广播方法要达到下面几个条件:  
不改变IP数据报格式   
在进行多复本传输和路由选择时代价不能太大   
对网关的改变要小   
传输机制一致   
对于算法来说,RPF(Reverse   Path   Forwarding)比较合适。RPF在代价和可靠性上是中等的,易于实现,而且不需要,对网关修改也比较少。  
5.   网关与广播  
在网关接收到本地广播时,它需要做一些工作,虽然简单,可如果处理不好会造成无限循环。正确处理有赖于下面几项:子网,目标网络,网关地址。  
基本的方法就是不要向接收到广播的硬件地址再发广播了,可是这还不够   ,如果一个网络中有多个网关,可能会造成广播永远不会停止   
如果数据报在硬件网络(也就是低层)上被接收,不应该转发,网关应该把自己看做是数据报的目的地。   
如果数据报未在硬件网络上被接收,而且数据报地址来自于网关相邻的网络上,网关应该在数据链路层上进行广播,网关自己应该被看作是数据报接收的目的地   
如果数据报的目的地在远方网络,网关只需要象平常一样转发这个包到下一个网关就是了   
6.   IP广播地址规范  
如果不同的IP实现能够兼容,必须有规则可以区别所有主机和所有子网。因为本地网络层可以映射IP地址到数据链路层地址,选择IP广播主机号则是比较直接的。简单起见,可以把一个别的机器不用的地址用于广播主机号。全1地址可以。全部子网号也是全1的,因为主机在发送广播到远程网络时并不关心那个网络分不分子网。而255.255.255.255表示本地硬件地址广播,不能进行转发。因此,一台在网络号为36的网络上的主机可以  
向255.255.255.255发包达到向相邻主机广播的目的    
向36.255.255.255发包达到向36网络上所有子网进行广播的目的    
一个好的应用程序应该首先向第一个地址进行广播,如果没有回应,再向第二个地址进行广播。全1地址指广播,那么全0地址指本地,如36.0.0.0指网络36,而36.255.255.255指网络36上的所有主机。



——★组播★——

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





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


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


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





组播协议的要素 </P>
<P>通过和广播,单播的数据传输方式的比较,我们可以发现组播中最关键的两个部分:</P>
<P>1.组的管理和维护</P>
<P>在组播这套协议中,在网络设备和所连接的子网需要有一套协议或机制来保证网络设备知道所连接的子网中,有多少台主机属于一个特定的组。</P>
<P>2.组播报文的路由</P>
<P>要组播路由协议有什么用?</P>
<P>(1)是发现上游接口,离源最近的接口。因为组播路由协议只关心到源的最短路径。</P>
<P>(2)通过(S,G)对来决定真正的下游接口,当所有的路由器都知道了他们的上下游接口,那么一颗多播树就已经建立完成。根是源主机直连的路由器,而树枝是通过IGMP发现有组员的子网直连的路由器(转载注明出处n et130)</P>
<P>(3)管理多播树</P>
<P>单播路由只需要知道下一跳的地址,就可以进行报文得转发。而组播,是把从一个由源产生得报文发送给一组目的。在一个特定的路由器上,一个包得多个备份可能从多个接口上发出。如果有环路得存在,那么一个或多个包会返回到其输入的接口,而且这个包也会经复制发到其他的端口上。这一结果可能导致多播风暴,这个包不断在路由器与交换机间复制,直到TTL减为0。由于这是个复制过程,它的危害会比单播环路严重的多,所以所有的多播路由器必须知道多播包的源,并且需要保证多播包不能从源接口发出。所以他必须知道哪些是上游接口和下游接口,可以分辨出数据包的流向。如果在不是在源的上游接口收到数据包,就会把它丢弃掉。而多播路由协议必须关心到源的最短路径,或者说它关心到源的上游接口。同时,除了关心上游接口,但是在转发的时候,不能把数据包从除了上游接口的其他接口发送出去。所以,另外,他还要关心(S,G)下游接口。当关于一个(S,G)的上下游接口都被判断出来了,那么一颗多播树就形成了。</P>
<P>稀疏和密集模式的比较?</P>
<P>什么是稀疏模式?它是指在一个整体网络中,参与组播的主机相对来少的一种拓扑,主要出现在WAN中。</P>
<P>什么是密集模式?和以上相反,主要出现在交换式LAN或校园网中</P>
<P><BR>隐式加入和显示加入的比较?</P>
<P>组员可以在多播会话存活的时候,加入或退出一个组,而其相连的路由器必须动态的根据直连子网内组员的存在或退出来决定要加入或剪除多播树的树枝。这就是通过显式或隐式加入两种方式来完成。</P>
<P>隐式加入试用于密集模式,它是采用广播/剪除模式来去除多播树上的没有组播成员的树枝,也就是说,它是通过先把网际网络上的所有路由器都加入到多播树上,然后由每个路由器通过IGMP来查询是否有组员在直连的子网上,如果没有,就发出一条剪除消息,来剪除多余的树枝。</P>
<P>而显示加入适用于稀疏模式,它是由每个路由器先查询子网内有无组员,然后才看是否要发加入信息给上游路由器。</P>
<P>基于源的树和共享树的比较?</P>
<P>基于源的树是针对一个源就会有一颗多播树构成,也就说,如果网络中有多个可以产生组播报文的源主机,那么就会有多少颗组播树组成,在组播表里,会有组数×每组的成员数的项目条数。这种拓扑主要适用于密集模式。</P>
<P>共享树是在整个网络中选一个RP,或叫集中点,所有的组播报文都需要从这个点来进行传送,所以它没有(S,G)项,只有(*,G)项,表明所有有多个源。RP是预先设定的一个路由器,承担转发所有的多播报文的责任。所有要发送组播报文的源主机在发送组播报文前,都需要到RP上进行注册,然后通过直连的路由器来确定到RP的最短路径,通过RP路由器来确定到目的地的最短路径。RP成为了多播树的根结点。</P>
<P>相对于基于源的树,共享树的多播表项更为精简,适合在稀疏模式下使用。但是也有一些缺点。共享树在RP上的选择,会导致从源主机到各个组地址的路由并非最优路径。</P>
<P>如果在整个局域网里同时有多条耗带宽的组播链路,会导致RP成为整个网络的瓶颈。并且在共享树中,采用选取RP来转发组播报文,会增加产生单点故障的可能。</P>
<P>三、如何来维护组成员</P>
<P>现在有IGMP和CGMP(Cisco专有的)两种协议,可以进行主机和网络设备之间的组员关系的维护。</P>
<P>IGMP是路由器和内部子网之间通信的方式,也就是说它是三层设备对直连子网的组关系的维护机制。它可以分成两个部分,主机部分和路由器部分,每个部分可以完成不同的工作。但是它有一个限制,就是IGMP报文只能在本地子网内传送,使三层设备不能前转到其他的设备上,它的TTL总是1。</P>
<P>IGMPv2主机部分的功能:</P>
<P>运行IGMPv2的主机会产生以下3种信息:</P>
<P>* Member Report消息</P>
<P>用来指示一台主机想要加入一个组播组,这个消息在一个主机第一次加入组的时候会发出,也可以用来响应三层设备发出Membership Query消息。由于Membership Query消息的目的地址是组地址,除了路由器,网内其他的组员主机都会收到这个报文,一旦其他主机收到报文,他们将会抑制自己的Membership Query报文,避免了内部局域网充斥了Membership Query报文。它只需要让路由器知道网内还有一个组员。</P>
<P>* Version 1 Membership Report消息</P>
<P>是为了IGMPv2主机的向后兼容性,用于检测和支持子网中IGMPv1主机和路由器&nbsp;&nbsp; (转载注明出处n et130) </P>
<P>* Leave Group消息</P>
<P>主机发出的,目的地址为224.0.0.2(所有路由器),告诉路由器主机离开了一个组。</P>
<P>IGMPv2路由器功能:</P>
<P>主要是查询功能,它会有两种查询报文,General Query和Group-Specific Query</P>
<P>General Query每隔一段时间就会向局域网内发送,目的地址是224.0.0.1(网内所有主机),所以子网里的每一个主机都会收到这个报文,并且会以Member Report报文回应,如果在一定的时间间隔内设备没有收到任何Member Report,它就会认为子网内没有组员。</P>
<P>Group-Specific Query报文,当路由器收到一个Leave Group报文的时候,它会发送这样一个具体包含有组地址的报文来查询这个组是否有组成员存在。</P>
<P>当如果在一个子网上同时有两个多播路由器,他们一开始都会认为自己是组播成员的查询者,当他们发送General Query报文时,通过比较从对端收到的报文源IP地址的大小来决定谁是查询者谁不是查询者,IP地址大的成为查询者。如果在一段时间内没有收到查询的报文,就会认为查询者down掉了,它就会充当起查询者的角色。</P>
<P>&nbsp;</P>
<P>CGMP(Cisco专有)</P>
<P>考虑到了如果有交换机存在的情况,考虑到了在三层设备和主机中有二层设备,而IGMP是一个三层协议,二层设备如果收到这样一个类型的报文,只会向除了源端口以外的所有端口进行转发,这样会对网络的带宽和整体性能造成影响。解决的方法是希望交换机可以对有组播成员的端口进行组播报文的转发。</P>
<P>在交换式网络上,对组播流的控制有三种方法:</P>
<P>(1)手工配置的交换式多播树</P>
<P>在交换机的桥接表上配置静态的组播MAC地址和端口映射。</P>
<P>(2)GMRP(802.1p)</P>
<P>他让MAC层的多播组地址动态地在交换机上注册和取消。</P>
<P>(3)IGMP侦听</P>
<P>通过在交换机端口上配置,可以使交换机进行IGMP消息地检查,可以知道多播路由器和组员地位置。但是,检测IGMP消息意味着所有地IP包都要进行检查。尤其当这些如果是在软件地方式来实施,会严重降低交换机的性能。</P>
<P>CGMP的做法是通过路由器来告诉交换机,组播成员的组MAC地址和主机MAC地址,让交换机可以知道在那个端口上有组员,并且可以进行转发。</P>
<P>四、组播报文如何来进行路由</P>
<P>现下常用的组播路由协议有一下几种,由于现在主流的路由器产品只支持Pim,其他的路由器协议都不支持,所以只会对PIM做个详细的解释。</P>
<P>DVMRP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 它是通过RIP来发现到源的最短路径,采用广播/剪除的方式来构建一颗多播树。</P>
<P>MOSPF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 它是通过OSPF协议来发现到源的最短路径,也是用在密集方式的拓扑下。</P>
<P>CBT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 是一个与协议无关的,基于稀疏模式的,共享树协议。他和DVMRP和MOSPF的区别有两点:它无需要在组播中在加入一个路由协议,可以在现有的任何协议上查找到到源的最短路径;它是基于共享树的协议,所以必须要在网络里设置一个网络的核心来确保组播包的前转;更适合使用在稀疏模式下。</P>
<P>PIM-DM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 它是个与协议无关的组播协议,同时又是基于密集拓扑的组播协议。采用广播/剪除的方法来进行多播树的构造。</P>
<P>功能:</P>
<P>* 通过交换Hello报文发现邻居</P>
<P>* 当单播路由发生变化时,重新计算RPF接口</P>
<P>* 在多路访问的网络中选举指定路由器</P>
<P>* 在多路访问的网络中使用剪除覆盖</P>
<P>* 在多路访问的网络中用Assert消息选举指定前转器</P>
<P>其中会产生一下5中PIMv2消息:</P>
<P>* Hello</P>
<P>周期性地发送用来发现PIM邻居。和OSPF中的Hello报文有着类似点,如果没有在一定的时间内收到,就会认为邻居已经死亡。</P>
<P>* Join/Prune</P>
<P>这是一个合成的报文,其中有要加入组播树的路由器信息,也有要被剪除路由器信息,都会在这样一个报文里列出来。</P>
<P>当源在发送多播报文的时候,PIM-DM用扩散与剪除的方式建立多播树。那些没有组员连接的路由器通过发送Prune消息可以把自己变成处于剪除状态。</P>
<P>当处在剪除状态的路由器,它收到了所直连的子网所发出的IGMP加入信息,就会发出这样一个join的报文给上游路由器,通知列出了需要加入多播树的子网列表。</P>
<P>* Graft</P>
<P>当一个下游路由器发送给上游路由器一个Prune报文时,上游路由器不会马上把通告的子网从多播前转表中删除,而是会等待一段时间,如果下游路由器所直连的子网又要加入多播树时,需要发出一个Graft报文,通知上游路由器来加入多播树。&nbsp;&nbsp; </P>
<P>* Graft-Ack</P>
<P>上游路由器收到一个Graft信息,必须要回一个Ack信息,这样才会使下游路由器接受组播报文</P>
<P>* Assert</P>
当有两台设备同时连在同一个广播网络上,并且有相同的上游路由器接口,如果两台路由器同时负责前转多播报文的话,会造成网络资源的浪费,所以需要可以在两台路由器中选出一个来作为唯一的前转报文路由器,Assert报文就是在两个路由器中互相通信,选出一个前转器的报文,通过优先权值,IP地址等参数来协商前转器。
PIM-SM
采用共享树的拓扑方式,建立起多播树。使用显示加入的方式来加入多播树。
查找汇聚点:
* 自举协议
* 自动RP协议
* 静态设置
PIM-SM和共享树:
PIM-SM由于是单向传输协议,所以组播流量只能从RP向外发送,而不能向RP发送,而源是通过把组播报文封装在PIM Register报文里,发送RP接口,然后再由RP进行剥头,对其中的组播报文进行处理。如果组播报文比较多,通过封装Register报文对设备来说是一种负担,所以可以在RP和源之间建立一个基于源的树,进行源到RP的组播报文传送。
PIM-SM和最短路径树
在大型网络中,共享树的路径未必是最短路径,PIM-SM可以通过在源和目的地之间建立一个基于源的树实现最短路径的传送。
&nbsp;
&nbsp;
&nbsp;
有四台路由器<BR>R1模拟组播源,R4 模拟接受端
第一步:在R2R3上运行单播路由协议,例如:EIGRP 将网络做通,在R1R4<BR>上做两条静态路由
R2上:<BR>router eigrp 100<BR>no au<BR>net 0.0.0.0
R3上<BR>router eigrp 100<BR>no au<BR>net 0.0.0.0
R1上<BR>ip route 0.0.0.0 0.0.0.0 12.0.0.2
R4<BR>ip route 0.0.0.0 0.0.0.0 34.0.0.3

第二步在每台路由器上开启组播路由器<BR>全局下用命令:ip multicast-routing
第三步:配置PIM 为DM
R2
int s2/1<BR>ip pim dense-mode<BR>int s2/2<BR>ip pim dense-mode
R3<BR>int s2/1<BR>ip pim dense-mode<BR>int s2/2<BR>ip pim dense-mode
第四步:在R4上配置IGMP 并且在R1上ping

<BR>R4 <BR>int s2/1<BR>ip igmp join-group 224.1.1.1<BR>R1<BR>ping 224.1.1.1 repeat 5

查看R2组播路由表
show ip mroute
&nbsp;
<BR>第五步:将配置的DM改为SM

R2<BR>int s2/1<BR>no ip pim dense-mode<BR>ip pim spanrse-mode<BR>int s2/2<BR>no ip pim dense-mode<BR>ip pim sparse-mode
<BR>R3

int s2/1<BR>no ip pim dense-mode <BR>ip pim sparse-mode<BR>int s2/2<BR>no ip pim dense-mode <BR>ip pim sparse-mode

<BR>第六步:配置RP的方法
第一种:静态指定
R2上全局下<BR>ip pim rp-address 2.2.2.2<BR>int lo0<BR>ip pim sparse-mode
R3上全局下
ip pim rp-address 3.3.3.3<BR>int lo0<BR>ip pim sparse-mode
第二种:配置autorp
R2上全局下<BR>ip pim send-rp-announce 2.2.2.2 scope +范围参数 <BR>??配置候选RP
ip pim send-rp-discovery scope +范围参数<BR>??配置候选RP映射代理
<BR>用show ip pim autorp

猜你喜欢

转载自cqphper.iteye.com/blog/679706
今日推荐