单播、多播和广播


  单播在网络中得到了广泛的应用,网络上绝大部分的数据都是以单播的形式传输的,只是一般网络用户不知道而已。例如,你在收发电子邮件、浏览网页时,必须与邮件服务器、Web服务器建立连接,此时使用的就是单播数据传输方式。但是通常使用“点对点通信”(Point to Point)代替“单播”,因为“单播”一般与“多播”和“广播”相对应使用
   “多播”也可以称为“组播”,在网络技术的应用并不是很多,网上视频会议、网上视频点播特别适合采用多播方式。因为如果采用单播方式,逐个节点传输,有多少个目标节点,就会有多少次传送过程,这种方式显然效率极低,是不可取的;如果采用不区分目标、全部发送的广播方式,虽然一次可以传送完数据,但是显然达不到区分特定数据接收对象的目的。采用多播方式,既可以实现一次传送所有目标节点的数据,也可以达到只对特定对象传送数据的目的。



  IP网络的多播一般通过多播IP地址来实现。多播IP地址就是D类IP地址,即224.0.0.0至239.255.255.255之间的IP地址。Windows 2000中的DHCP管理器支持多播IP地址的自动分配。
  
  “广播”在网络中的应用较多,如客户机通过DHCP自动获得IP地址的过程就是通过广播来实现的。但是同单播和多播相比,广播几乎占用了子网内网络的所有带宽。拿开会打一个比方吧,在会场上只能有一个人发言,想象一下如果所有的人同时都用麦克风发言,那会场上就会乱成一锅粥。



  在网络中不能长时间出现大量的广播包,否则就会出现所谓的“广播风暴”。广播风暴就是网络长时间被大量的广播数据包所占用,正常的点对点通信无法正常进行,外在表现为网络速度奇慢无比。出现广播风暴的原因有很多,一块有故障的网卡,就可能长时间向网络上发送广播包而导致广播风暴。
一、单播:



主机之间“一对一”的通讯模式,网络中的交换机和路由器对数据只进行转发不进行复制。如果10个客户机需要相同的数据,则服务器需要逐一传送,重复10次相同的工作。但由于其能够针对每个客户的及时响应,所以现在的网页浏览全部都是采用IP单播协议。网络中的路由器和交换机根据其目标地址选择传输路径,将 IP单播数据传送到其指定的目的地。
单播的优点:





  1. 服务器及时响应客户机的请求




  2. 服务器针对每个客户不通的请求发送不通的数据,容易实现个性化服务。





单播的缺点:





  1. 服务器针对每个客户机发送数据流,服务器流量=客户机数量×客户机流量;在客户数量大、每个客户机流量大的流媒体应用中服务器不堪重负。




  2. 现有的网络带宽是金字塔结构,城际省际主干带宽仅仅相当于其所有用户带宽之和的5%。如果全部使用单播协议,将造成网络主干不堪重负。现在的P2P应用就已经使主干经常阻塞,只要有5%的客户在全速使用网络,其他人就不要玩了。而将主干扩展20倍几乎是不可能。





二、 广播:



主机之间“一对所有”的通讯模式,网络对其中每一台主机发出的信号都进行无条件复制并转发,所有主机都可以接收到所有信息(不管你是否需要),由于其不用路径选择,所以其网络成本可以很低廉。有线电视网就是典型的广播型网络,我们的电视机实际上是接受到所有频道的信号,但只将一个频道的信号还原成画面。在数据网络中也允许广播的存在,但其被限制在二层交换机的局域网范围内,禁止广播数据穿过路由器,防止广播数据影响大面积的主机。
广播的优点:





  1. 网络设备简单,维护简单,布网成本低廉




  2. 由于服务器不用向每个客户机单独发送数据,所以服务器流量负载极低。





广播的缺点:



1.无法针对每个客户的要求和时间及时提供个性化服务。





  1. 网络允许服务器提供数据的带宽有限,客户端的最大带宽=服务总带宽。例如有线电视的客户端的线路支持100个频道(如果采用数字压缩技术,理论上可以提供 500个频道),即使服务商有更大的财力配置更多的发送设备、改成光纤主干,也无法超过此极限。也就是说无法向众多客户提供更多样化、更加个性化的服务。




  2. 广播禁止在Internet宽带网上传输。





三、组播:



主机之间“一对一组”的通讯模式,也就是加入了同一个组的主机可以接受到此组内的所有数据,网络中的交换机和路由器只向有需求者复制并转发其所需数据。主机可以向路由器请求加入或退出某个组,网络中的路由器和交换机有选择的复制并传输数据,即只将组内数据传输给那些加入组的主机。这样既能一次将数据传输给多个有需要(加入组)的主机,又能保证不影响其他不需要(未加入组)的主机的其他通讯。
组播的优点:





  1. 需要相同数据流的客户端加入相同的组共享一条数据流,节省了服务器的负载。具备广播所具备的优点。




  2. 由于组播协议是根据接受者的需要对数据流进行复制转发,所以服务端的服务总带宽不受客户接入端带宽的限制。IP协议允许有2亿6千多万个(268435456)组播,所以其提供的服务可以非常丰富。




  3. 此协议和单播协议一样允许在Internet宽带网上传输。





组播的缺点:



1.与单播协议相比没有纠错机制,发生丢包错包后难以弥补,但可以通过一定的容错机制和QOS加以弥补。



2.现行网络虽然都支持组播的传输,但在客户认证、QOS等方面还需要完善,这些缺点在理论上都有成熟的解决方案,只是需要逐步推广应用到现存网络当中



    二层交换机是数据链路层的设备,它能够读取数据包中的MAC地址信息并根据MAC地址来进行交换。交换机内部有一个地址表,这个地址表标明了MAC地址和交换机端口的对应关系.二层交换机对广播包是不做限制的,把广播包复制到所有端口上。

广播分二层广播和三层广播,二层广播是FFFF.FFFF.FFFF(MAC地址),二层交换机遇到这种包就会泛洪到所有同VLAN的端口,不会过滤掉,因为如果二层交换机过滤这种包,arp广播怎么正常工作呢?没有arp,同网段的PC如何通信呢?路由器可以过滤二层广播是因为路由器是三层设备,如果路由器不过滤这种包,任何人发起的二层广播包就会到达Internet的整个范围,这样还要路由器做什么呢?路由器就是为了划分广播域用的阿。

对于三层广播还有本地广播255.255.255.255和特定子网广播比如192.168.1.255/24之分,255.255.255.255这种本地广播是肯定没发跨越路由器的,因为一旦这种广播能跨越路由器的话,同样任何人发起的这种广播就会跑到Internet的任何角落。然而对于特定子网的广播是可以配置为允许跨路由器或者不允许跨路由器的,如果允许的话,我就可以跨越路由器对特定的子网发起三层广播。通常不要允许这类广播,因为你一旦允许了很容易造成icmp sumrf攻击的。


交换机或是路由器的复制功能猜想是:首先接收到数据,进行处理,再进行相应接口的转发,(存储一份转发多份即为复制)



三层交换机接收到数据的处理流程:



使用IP的设备A————————三层交换机————————使用IP的设备B



  比如A要给B发送数据,已知目的IP,那么A就用子网掩码取得网络地址,判断目的IP是否与自己在同一网段。



  如果在同一网段,但不知道转发数据所需的MAC地址,A就发送一个ARP请求,B返回其MAC地址,A用此MAC封装数据包并发送给交换机,交换机起用二层交换模块,查找MAC地址表,将数据包转发到相应的端口。



  如果目的IP地址显示不是同一网段的,那么A要实现和B的通讯,在流缓存条目中没有对应MAC地址条目,就将第一个正常数据包发送向一个缺省网关,这个缺省网关一般在操作系统中已经设好,对应第三层路由模块,所以可见对于不是同一子网的数据,最先在MAC表中放的是缺省网关的MAC地址;然后就由三层模块接收到此数据包,查询路由表以确定到达B的路由,将构造一个新的帧头,其中以缺省网关的MAC地址为源MAC地址,以主机B的MAC地址为目的MAC地址。通过一定的识别触发机制,确立主机A与B的MAC地址及转发端口的对应关系,并记录进流缓存条目表,以后的A到B的数据,就直接交由二层交换模块完成。这就通常所说的一次路由多次转发。



   表面上看,第三层交换机是第二层交换器与路由器的合二而一,然而这种结合并非简单的物理结合,而是各取所长的逻辑结合。其重要表现是,当某一信息源的第一个数据流进行第三层交换后,其中的路由系统将会产生一个MAC地址与IP地址的映射表,并将该表存储起来,当同一信息源的后续数据流再次进入交换环境时,交换机将根据第一次产生并保存的地址映射表,直接从第二层由源地址传输到目的地址,不再经过第三路由系统处理,从而消除了路由选择时造成的网络延迟,提高了数据包的转发效率,解决了网间传输信息时路由产生的速率瓶颈。所以说,第三层交换机既可完成第二层交换机的端口交换功能,又可完成部分路由器的路由功能。即第三层交换机的交换机方案,实际上是一个能够支持多层次动态集成的解决方案,虽然这种多层次动态集成功能在某些程度上也能由传统路由器和第二层交换机搭载完成,但这种搭载方案与采用三层交换机相比,不仅需要更多的设备配置、占用更大的空间、设计更多的布线和花费更高的成本,而且数据传输性能也要差得多,因为在海量数据传输中,搭载方案中的路由器无法克服路由传输速率瓶颈。



   主机开机组播接收程序时,会向TCP/IP协议注册一个组播IP地址,所以当收到目的IP地址是这个组播组的地址时,主机就会接收。  同时它又向工作在数据链路层的网卡也注册了一个二层MAC地址,这样的话,当主机接收到一个组播报文的时候,就可以  直接现在网卡上判断是否是自己所需要的组播报文。  IGMP:Internet组管理协议,用于主机与路由器之间交互信息的一种协议。所有要加入组播组的主机和所有连接到有组播主机的子网中 的路由器都必须使用IGMP。IGMP消息不能被路由转发,只能限制在本地网段内部。IGMP的TTL参数永远是1,保证了IGMP的使用  范围。
组播路由协议的主要功能是将组播数据从一台路由器跨越一个网络传送到另外一台路由器上。 组播路由协议分为域内组播路由协议及域间组播路由协议。
http://wenku.baidu.com/view/b30740553c1ec5da50e27015.html


组播的转发技术:
在单播里面,数据转发的依据是数据包的目的地址,这个目的地址明确表示了一个主机的位置,但是组播数据包并不是基于ip数据包的目的地址的,它没有唯一性,因此它需要采用一种叫RTF(Reverse Path Forwarding逆向路径转发)的方式来转发数据包,它是针对转发的时候做检查,这个检查会决定是否转发还是丢弃输入的信息包,那么它的检查过程是什么样的呢?
首先要了解的是,RPF跟单播协议密切相关,所谓的逆向路径转发是基于察看有关组播源在什么地方,组播源是一个IP的单播地址,因此呢,路由器检查到达的数据包的源地址,然后查看路由表,看这个源地址可以通过哪个接口可达,如果信息包是在可返回原站点的接口上到达,那就说明这个组播数据流是从正确的方向过来的,则RPF检查成功,信息包被转发,但如果说这个数据包的原地址不是从这个接口到达的,那就说明这个组播数据包不是从最佳路经过来的,应该丢弃该数据包。
因为RPF是要结合单播路由表的,因此在构件组播之前应该事先完成有关IP单播路由表的实现。



无组播功能交换机转发组播数据包:
对一些网桥,一些二层设备,他没办法实现路由,也没办法实现RPF,对于一个不能识别组播数据流的二层交换机来说,它收到一个组播数据包会按照广播数据包得处理方法处理。



二层交换机的组播功能实现:
因为无组播功能的交换机在转发组播数据包的时候是跟广播一样,这样就达不到组播的目的了。因此,现在很多二层交换机增加了组播功能,增加了组播功能后就可以识别组播流,并且可以针对组播流来建立有关组播地址和端口的映射。
能识别组播的交换机在它的转发表里面,都会增加一项MAC地址是组播地址,然后端口包含以希望接收组播数据的主机所相连的所有端口。



引言



广播和多播仅应用于UDP,因为TCP是面向连接的协议(IP地址确定)



   单播:以太网帧仅发往单个目的主机,目的地址指明单个接收接口。该模式下,任意两主机通信不会影响网内其他主机(争夺共享信道情况除外)

广播:主机向网上的所有其他主机发送帧。但是只有ARP和RARP可以看到该过程。

组播:帧传送给属于多播组的多个主机。


主机对帧过滤过程:



网卡查看由信道传送过来的帧,确定是否接收该帧。若接收则将它传往设备驱动程序。通常网卡接收目的地址为网卡物理地址或广播地址的帧。多数接口均被设置为混合模式,这种模式能接收每个帧的一个复制。 大多数网卡经过配置,都能接收目的地址为多播地址或某些子网多播地址的帧。对于以太网,当地址中最高字节的最低位设置为1时表示该地址是一个多播地址。用十六进制可表示为01:00:00:00:00:00。(广播地址ff:ff:ff:ff:ff)
网卡收到帧后传递给设备驱动程序(如果帧检验和错,网卡将丢弃该帧)。设备驱动程序会进行另外的帧过滤。首先,帧类型中必须指定要使用的协议(IP、ARP等)。其次,进行组播过滤来检测该主机是否属于多播地址说明的多播组
设备驱动程序将数据帧传送给下一层,比如,当帧类型指定为IP数据报时,就传给IP层。IP根据IP地址中的源地址和目的地址进行更多的过滤监测。若正常,则将数据报传送给下一层(TCP或UDP)
UDP或这IP收到传送来的数据报,就根据目的端口号,有时还有源端口号进行数据报过滤。若当前没有进程使用该目的端口号,就丢弃数据报,并产生ICMP不可达报文。若UDP数据报存在检验和错,则会被丢弃。
多播的作用:减少对广播内容不感兴趣主机的处理负荷。



使用多播,主机可加入一个或多个多播组。



2、广播
2.1 受限广播 ——————-系统初始启动时使用



受限广播地址为255.255.255.255。该地址用于主机配置过程中IP数据报的目的地址。原因:此时主机还不知道自己所在网络的网络掩码,和自己的IP地址。



任何情况下,路由器都不转发目的地址为受限广播地址的数据报,这样的数据报仅出现在本地网络中。



2.2 指向网络的广播



指向网络的广播地址是主机号全为1的地址。例如A类网络广播地址为netid.255.255.255,其中netid为A类网络的网络号。



一个路由器必须转发指向网络的广播,但它也必须有一个不进行转发的选择。



2.3 指向子网的广播 ——————最常用



指向子网的广播地址为主机号为全1且有特定子网号的地址。作为子网直接广播地址的IP地址需要了解子网的掩码。



2.4 指向所有子网的广播
指向所有子网的广播也需要了解目的网络的子网掩码,以便与指向网络的广播地址区分开。



指向所有子网的广播地址的子网号以及主机号全为1。例如,若目的子网掩码为255.255.255.0,则IP地址128.1.255.255是一个指向所有子网的广播地址。然而,如果网络没有划分子网,则这就是一个指向网络的广播。



3、多播



3.1 多播提供两类服务



向多个目的地址传送数据,例如交互式会议系统和想多个接收者分发邮件或新闻。然而,即使使用多播,某些应用可能继续采用TCP来保证它的可靠性(?)
客户对服务器的请求。例如无盘工作组需要确定启动引导服务器
3.2 多播组地址
分配的28bit均作为多播组号



多播组地址范围是224.0.0.0 到239.255.255.255



能够接收发往一个特定多播组地址数据的主机集合称为主机组。一个主机组可跨越多个网络。主机组中成员可随时加入或离开主机组。主机组中对主机的数量没有限制,同时不属于某一主机组的主机可以向该组发送信息。



注:一些多播组地址被IANA确定为知名地址。他们被当作永久主机组,这些多播地址所代表的组是永久组,他们的组成员却不是永久的。例如:224.0.0.1表示该子网内的所有系统组



3.3 多播组地址到以太网地址的转换



IANA拥有高位24bit为00:00:5e的以太网地址块,即该地址块所拥有的地址范围是从00:00:5e:00:00:00到00:00:5e:ff:ff:ff。IANA将其中一半分为i多播地址。任何以太网地址首字节为01的,为一个多播地址。因此,IP多播相对应的以太网地址范围从01:00:5e:00:00:00到01:00:5e:7f:ff:ff(为什么是7f)。



这种地址分配将使以太网多播地址中的23bit与IP多播组号对应起来。通过将多播组号中的低23bit映射到以太网中的低位23bit实现。
由于多播组号中的最高5bit在映射过程中被忽略,因此每个以太网多播地址对应的多播组是不唯一的。32(2^5)个不同的多播组号被映射为一个以太网地址。



由于地址映射是不唯一的,因此设备驱动程序或IP层需要对数据报进行过滤。因为网卡可能接收到主机不想接收的多播数据帧。若网卡不提供足够的多播数据帧过滤功能,设备驱动就必须接收所有多播数据帧,并对它们进行过滤。



局域网网卡趋向两种处理类型:一种是网卡根据对多播地址的散列值实行多播过滤,可能会接收到不想接收的多播数据;另一种是网卡只接收一些固定数目的多播地址,当主机想接收超过网卡预先支持多播地址外的多播地址时,必须将网卡设置为“多播混杂”模式。这两种类型的网卡人需要设备驱动程序检查收到的帧是否为主机所需要的。



多播传送接收过程



多播进程将目的IP地址指明为多播地址,设备驱动程序将它转化为相应的以太网地址,然后把数据发出去。而这些接收进程需要通知他们的IP层,他们想接收的发往给定多播地址的数据报,并且设备驱动程序必须能够接收这些多播帧。这个过程就是“加入一个多播组”(在同一个主机或多个主机上存在多个接收者)。当一个主机收到多播数据报时,他必须向属于那个多播组的每个进程均传送一个复制,这和单个进程收到单播UDP数据报的UDP不同。使用多播,一个主机上可能存在多个属于同一多播组的进程。



当把多播扩展到单个物理网络以外需要通过路由器转发多播数据时,需要一个协议让多播路由器了解确定网络中属于确定多播组的任何一个主机,此协议为IGMP协议(Internet组管理协议)



3.4 FDDI和令牌环网络中的多播



FDDI网络使用相同的D类IP地址到48bit FDDI地址的映射过程。令牌环网络通常使用不同的地址映射方法。



使用UDP协议进行信息的传输之前不需要建议连接。换句话说就是客户端向服务器发送信息,客户端只需要给出服务器的ip地址和端口号,然后将信息封装到一个待发送的报文中并且发送出去。至于服务器端是否存在,或者能否收到该报文,客户端根本不用管。



 单播用于两个主机之间的端对端通信,广播用于一个主机对整个局域网上所有主机上的数据通信。单播和广播是两个极端,要么对一个主机进行通信,要么对整个局域网上的主机进行通信。实际情况下,经常需要对一组特定的主机进行通信,而不是整个局域网上的所有主机,这就是多播的用途。


  通常我们讨论的udp的程序都是一对一的单播程序。本章将讨论一对多的服务:广播(broadcast)、多播(multicast)。对于广播,网络中的所有主机都会接收一份数据副本。对于多播,消息只是发送到一个多播地址,网络知识将数据分发给哪些表示想要接收发送到该多播地址的数据的主机。总得来说,只有UDP套接字允许广播或多播。



回到顶部(go to top)
一、UDP广播
  广播UDP与单播UDP的区别就是IP地址不同,广播使用广播地址255.255.255.255,将消息发送到在同一广播网络上的每个主机。值得强调的是:本地广播信息是不会被路由器转发。当然这是十分容易理解的,因为如果路由器转发了广播信息,那么势必会引起网络瘫痪。这也是为什么IP协议的设计者故意没有定义互联网范围的广播机制。



广播地址通常用于在网络游戏中处于同一本地网络的玩家之间交流状态信息等。



  其实广播顾名思义,就是想局域网内所有的人说话,但是广播还是要指明接收者的端口号的,因为不可能接受者的所有端口都来收听广播。
  
  1、多播(组播)的概念
  多播,也称为“组播”,将网络中同一业务类型主机进行了逻辑上的分组,进行数据收发的时候其数据仅仅在同一分组中进行,其他的主机没有加入此分组不能收发对应的数据。



  在广域网上广播的时候,其中的交换机和路由器只向需要获取数据的主机复制并转发数据。主机可以向路由器请求加入或退出某个组,网络中的路由器和交换机有选择地复制并传输数据,将数据仅仅传输给组内的主机。多播的这种功能,可以一次将数据发送到多个主机,又能保证不影响其他不需要(未加入组)的主机的其他通 信。



相对于传统的一对一的单播,多播具有如下的优点:



  1、具有同种业务的主机加入同一数据流,共享同一通道,节省了带宽和服务器的优点,具有广播的优点而又没有广播所需要的带宽。



  2、服务器的总带宽不受客户端带宽的限制。由于组播协议由接收者的需求来确定是否进行数据流的转发,所以服务器端的带宽是常量,与客户端的数量无关。



  3、与单播一样,多播是允许在广域网即Internet上进行传输的,而广播仅仅在同一局域网上才能进行。



组播的缺点:



  1、多播与单播相比没有纠错机制,当发生错误的时候难以弥补,但是可以在应用层来实现此种功能。



  2、多播的网络支持存在缺陷,需要路由器及网络协议栈的支持。



  3、多播的应用主要有网上视频、网上会议等。



2、广域网的多播
  多播的地址是特定的,D类地址用于多播。D类IP地址就是多播IP地址,即224.0.0.0至239.255.255.255之间的IP地址,并被划分为局部连接多播地址、预留多播地址和管理权限多播地址3类:



  1、局部多播地址:在224.0.0.0~224.0.0.255之间,这是为路由协议和其他用途保留的地址,路由器并不转发属于此范围的IP包。



  2、预留多播地址:在224.0.1.0~238.255.255.255之间,可用于全球范围(如Internet)或网络协议。



  3、管理权限多播地址:在239.0.0.0~239.255.255.255之间,可供组织内部使用,类似于私有IP地址,不能用于Internet,可限制多播范围。



  多播的程序设计使用setsockopt()函数和getsockopt()函数来实现,组播的选项是IP层的,其选项值和含义参见11.5所示。



                                  表11.5 多播相关的选项



getsockopt()/setsockopt()的选项



含 义



IP_MULTICAST_TTL



设置多播组数据的TTL值



IP_ADD_MEMBERSHIP



在指定接口上加入组播组



IP_DROP_MEMBERSHIP



退出组播组



IP_MULTICAST_IF



获取默认接口或设置接口



IP_MULTICAST_LOOP



禁止组播数据回送



3、多播程序设计的框架
要进行多播的编程,需要遵从一定的编程框架。多播程序框架主要包含套接字初始化、设置多播超时时间、加入多播组、发送数据、接收数据以及从多播组中离开几个方面。其步骤如下:



(1)建立一个socket。



(2)然后设置多播的参数,例如超时时间TTL、本地回环许可LOOP等。



(3)加入多播组。



(4)发送和接收数据。



(5)从多播组离开



三、UDP广播与单播
广播与单播的比较
  广播和单播的处理过程是不同的,单播的数据只是收发数据的特定主机进行处理,而广播的数据整个局域网都进行处理。



  例如在一个以太网上有3个主机,主机的配置如表11.4所示。



                                  表11.4 某局域网中主机的配置情况



主 机



A



B



C



IP地址



192.168.1.150



192.168.1.151



192.168.1.158



MAC地址



00:00:00:00:00:01



00:00:00:00:00:02



00:00:00:00:00:03



  单播流程:主机A向主机B发送UDP数据报,发送的目的IP为192.168.1.151,端口为 80,目的MAC地址为00:00:00:00:00:02。此数据经过UDP层、IP层,到达数据链路层,数据在整个以太网上传播,在此层中其他主机会 判断目的MAC地址。主机C的MAC地址为00:00:00:00:00:03,与目的MAC地址00:00:00:00:00:02不匹配,数据链路层 不会进行处理,直接丢弃此数据。



  主机B的MAC地址为00:00:00:00:00:02,与目的MAC地址00:00:00:00:00:02一致,此数据会经过IP层、UDP层,到达接收数据的应用程序。



  广播的流程:主机A向整个网络发送广播数据,发送的目的IP为192.168.1.255,端口为 80,目的MAC地址为FF:FF:FF:FF:FF:FF。此数据经过UDP层、IP层,到达数据链路层,数据在整个以太网上传播,在此层中其他主机会 判断目的MAC地址。由于目的MAC地址为FF:FF:FF:FF:FF:FF,主机C和主机B会忽略MAC地址的比较(当然,如果协议栈不支持广播,则 仍然比较MAC地址),处理接收到的数据。



  主机B和主机C的处理过程一致,此数据会经过IP层、UDP层,到达接收数据的应用程序


Category linux