【计算机网络】广播和多播

   IP地址由三类:单播地址(目的端为单个主机),广播地址(目的端为给定网络上的全部主机)以及多播地址(目的端为同一组内的全部主机)。服务器

   广播和多播仅应用于UDP,它们须要将报文同时传往多个接收者的应用十分重要。TCP是一个面向链接的协议,它意味着分别运行于两主机(由IP地址肯定)内的两进程(由端口号肯定)间存在一条链接。  网络

  考虑包含多个主机的共享信道网络如以太网。每一个以太网帧包含源主机和目的主机的以太网地址(48bit)。一般每一个以太网帧仅发往单个目的主机,目的地址指明单个接收接口,于是称为单播(unicast)。在这种方式下,任意两个主机的通讯不会干扰网内的其余主机(可能引发争夺共享信道的状况除外)。
spa

  然而,有时一个主机要向网上的全部其余主机发送帧,这就是广播经过ARP和RARP能够看到这一过程。多播(multicast)处于单播和广播之间:帧仅传送给属于多播组的多个主机。
对象

  为了弄清广播和多播,须要了解主机对由信道传送过来的帧的过滤过程。下图说明了这一点。
blog

  

                                                     协议栈各层对收到的帧的过滤过程

接口

  首先,网卡查看由信道传送过来的帧,肯定是否接收该帧,若接收后就将它传往设备驱动程序。一般网卡仅接收那些目的地址为网卡物理地址或广播地址的帧。另外,多数接口均被设为混杂模式,这种模式能接收每一个帧的一个复制。进程

  目前,大多数的网卡通过配置都能接收目的地址为多播地址或某些子网多播地址的帧。对于以太网,当地址中以最高字节的最低位设置为1时表示该地址是一个多播地址,用十六进制表示为01:00:00:00:00:00(以太网广播地址 ff:ff:ff:ff:ff:ff可看做是以太网多播地址的特例)。路由

  若是网卡收到一个帧,这个帧将被传送给设备驱动程序(若是帧检验和错误,网卡就丢弃该帧)。设备驱动程序将进行另外的帧过滤。首先,帧类型中必须制定要用的协议(IP、ARP等等)。其次,进行多播过滤来检测该主机是否属于多播地址说明的多播组)。it

  设备驱动程序随后将该数据帧传送给下一层,好比,当帧类型指定为IP数据报时,就传往IP层。IP根据IP地址中的源地址和目的地址进行更多的过滤。若是正常,就将数据报传送给下一层(如TCP或UDP)。
ast

  每次UDP收到由IP传来的数据报,就根据目的端口号,还有源端口号进行数据报过滤。若是当前没有进程使用该目的端口号,就丢弃该数据报并产生一个ICMP不可达报文(TCP根据它的端口号作类似的过滤).若是UDP数据报存在检验和错误,将被丢弃。

  使用广播的问题在于它增长了对广播数据不感兴趣主机的处理负荷拿一个使用UDP广播报文应用做为例子。若是网内有50个主机,但仅仅有20个参与该应用,每次这20个主机中的一个发送UDP广播数据时,其他30个主机不得不处理这些广播数据报。一直到UDP层,收到的UDP广播数据报才会被丢弃。这30个主机丢弃UDP广播数据报是由于这些主机没有使用这个目的端口。

  多播的出现减小了对应用不感兴趣主机的处理负荷。使用多播,主机可加入一个或多个多播组。这样,网卡将获悉该主机属于哪一个多播组,而后仅接收主机躲在多播组的多播帧。

 

广播

  广播有四种类型:受限的广播,指向网络的广播,指向子网的广播,指向全部子网的广播。

 

受限的广播

  受限的广播地址是255.255.255.255。该地址用于主机配置过程当中IP数据报的目的地址,此时,主机可能还不知道它所在的网络的网络掩码,甚至连它的IP地址也不知道。

  在任何状况下,路由器都不转发目的地址为受限的广播地址的数据报,这样的数据仅仅出如今本地网络中。这就是为何称为受限的网络地址。这种广播类型接收对象为局域网中包括发送主机在内的全部主机。

  一个未解的问题是:若是一个是多接口的,当一个进程向本网广播地址发送数据报时,为实现广播,是否应该将数据报发送到每一个相连的接口上?若是是这样,想对主机全部接口广播的应用必须肯定主机中支持广播的全部接口,而后向每一个接口发送一个数据报复制。

 

指向网络的广播

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

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

 

指向子网的广播

  指向子网的广播地址为主机号全1且有特定子网号的地址。做为子网直接广播地址的IP地址须要了解子网的掩码。例如,若是路由器接到发往128.1.2.255的数据报,当B类网络128.1的子网掩码为255.255.255.0时,该地址就是指向子网的广播地址;但若是该子网的掩码为255.255.254.0,该地址就不是指向子网的广播地址。

 

指向全部子网的广播

  指向全部子网的广播也须要了解目的网络的子网掩码,以便与指向网络的广播地址区分开。指向全部子网的广播地址的子网号及主机号为全1.例如,若是目的子网掩码为255.255.255.0.那么IP地址128.1.255.255是一个指向全部子网的广播地址。然而,若是网络没有划分子网,这就是一个指向网络的广播。

 

  

多播

  IP多播提供两类服务:

  1)向多个目的地址传送数据。有许多向多个接收者传送信息的应用:例如交互式会议系统向多个接收者分发邮件或新闻。若是不采用多播,目前这些应用大多采用TCP来完成(向每一个目的地址传送一个单独的数据复制)。然而,即便使用多播,某些应用可能继续采用TCP来保证它的可靠性。

  2) 客户对服务器的请求。例如,无盘工做站的须要肯定的启动引导服务器。目前,这项服务是经过广播提供的,可是使用多播可下降不提供这项服务的负担。

 

多播组地址

  

  多播组地址包括为1110的最高4bit和多播组号。它们一般可表示为点分十进制数,范围从224.0.0.0到239.255.255.255。

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

  一些多播组地址被IANA肯定为知名地址。它们也被看成永久主机组,这和TCP和UDP的熟知端口类似。一样,这些知名多播地址在RFC最新分配数字中列出。注意这些多播地址所表明的组是永久组,而它们的组成员却不是永久的。

  

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

  IANA拥有一个以太网地址块,即高位24bit为00:00:5e(十六进制表示),这意味着该地址快所拥有的地址范围从00:00:5e:00:00:00到00:00:5e:ff:ff:ff。IANA将其中的一半分配为多播地址。为了指明一个多播地址,任何一个以太网地址的首字节必须是01,这意味着与IP多播相对应获得以太网地址范围从01:00:5e:00:00:00到01:00:5e:7f:ff:ff.

  这种地址分配将使以太网多播地址中的23bit与IP多播组号对应起来,经过将多播组号中的低位23bit映射到以太网中地址中的低位23bit实现,这个过程以下图所示

 

 

  单个物理网络的多播是简单的。多播进程将目的IP地址指明为多播地址,设备驱动程序将它转换为响应的以太网地址,而后把数据发送出去。接收进程必须通知它们的IP层,它们想接收的发往给定多播地址的数据报,而且设备驱动程序必须可以接收这些多播帧。这个过程就是“加入一个多播组”(使用“接收进程”复数形式的缘由在于对一肯定的多播信息,在同一主机或多个主机上存在多个接收者,这也是为何要首先使用多播的缘由)。当一个主机接收到多播数据报时,它必须向属于那个多播组的每一个进程均传送一个复制。这和单个进程收到单播UDP数据报的UDP不一样。使用多播,一个主机上可能存在多个属于同一多播组的进程。

  当把多播扩展到单个物理网络之外须要经过路由器转发多播数据报时,复杂性就增长了。须要有一个协议让多播路由器了解肯定网络中属于肯定多播组的任何一个主机。这个协议就是Internet组管理协议(IGMP)。

 

小结

  广播是将数据报发送到网络中的全部主机(一般是本地相连的网络),而多播是将数据报发送到网络的一个主机组。这两个概念的基本点在于当收到送往上一个协议栈的数据帧时采用不一样类型的过滤。这个协议层都可以由于不一样的理由丢弃数据报。

  目前有四种类型的广播地址:受限的广播,指向网络的广播,指向子网的广播和指向全部子网的广播。最经常使用的是指向子网的广播。受限的广播一般只在系统初始启动时才会用到。

  试图经过路由器进行广播而发生的问题,经常是由于路由器不了解目的网络的子网掩码。结果与多种因素有关:广播地址类型、配置参数等等。

  D类IP地址被称为多播组地址。经过将其低23 bit映射到相应以太网地址中即可以实现多播组地址到以太网地址的转换。因为地址映射是不惟一的,所以须要其余的协议实现额外的数据报过滤。

  

参考文献:

1. 《TCP/IP详解 卷1:协议》  机械工业出版社