摘要网络信息传输主要有单播(unicast )、单播(unicast )、组播(placting )、广播(broadcast )四种方式。 广播和多播向APP应用程序提供两种服务:将数据包分发到多个目的地,然后在客户端请求/发现服务。

向多个目的地交货。 许多APP应用程序向多个收件人分发信息,包括交互式会议、电子邮件和新闻。 如果没有广播或多播,这些类型的服务只能为每个目的地提供单独的副本。 这是非常低效的。

从客户端请求/发现服务器。 通过广播或多播,APP应用程序可以向服务器发送请求,而无需知道特定服务器的IP地址。 如果您不太了解本地网络环境的信息,则此功能在网络配置期间非常有用。 例如,嵌入式系统通过DHCP获取其初始IP地址、ARP、IPv6 ND等。

虽然广播和多播都可以提供上述功能,但是多播比广播更有效。 因为多播只涉及支持或使用特定服务或协议的系统,而广播则不是。 因此,一个广播请求会影响广播域中所有可访问的主机,而多播只影响可能对该请求“感兴趣”的主机。 在广播的更高开销、简单性和组播的效率改善和更复杂性之间存在平衡。

广播是指将消息发送到网络中的所有可能的收件人。 从原理上来说,这很容易实现。 路由器可以轻松地将接收到的广播消息的副本转发到除该消息到达的接口以外的每个接口。 在多个主机连接到同一LAN的情况下,广播还可以配合链路层的特征提供比较高效的转发策略。

在广播地址IPv4中,各子网有本地定向子网广播地址,通过将地址中的主机部分全部设为1而形成,特殊地质255.255.255.255是本地网络广播

如上图所示,设备eth0的IP地址为172.16.0.15,子网掩码为255.255.240.0,因此网络前缀为172.16.0.0/20。 因此,广播地址为172.16.0.0|0.0.15.255=172.16.15.255,将该地址的主机部分的32-20=12比特的1组合

多播可仅在特定接收端(在域内或在域之间)将业务传递给多播以减少广播的不必要的开销,这被称作多播。 基本上,可以通过发送方表示接收方,或者接收方独立地表示“兴趣”来完成这项工作。 然后,网络只负责将流量发送到预期或感兴趣的收件人。 实现组播比广播更复杂。 因为主机和路由器必须维护多播状态(multicast state )信息,以说明哪些收件人对哪些流量感兴趣。 该信息保持在主机和路由器中的软状态,这意味着它们必须周期性地更新(如果这种情况发生,则组播业务的分发请求停止请求返回广播)。 如果正确地使用多播,则只有参与通信的主机或感兴趣的主机才需要处理相关分组,其中,业务将仅被承载在使用的链路上,而只有任何多播数据报的副本被承载在这种链路上

为了运行多播,想要参与通信的APP应用需要发表其意愿的协议实现。 主机软件可以安排接收符合APP应用条件的组。

ASM和SSM IP多播是链路层网络,如以太网,最初使用基于组寻址的设计。 通过此方法,每个站点选择希望接收流量的组地址,而不考虑其源。 因为对发送方身份不敏感,所以该方法有时也被称为任意源多播(Any Source Multicast,ASM )。 将对发送者身份敏感的多播类型称为特定源多播(SSM ),使得终端站能够从一个特定发送者组使用一个多播组SSM服务模型比ASM更容易实现。 这主要是因为在广播组域中,确定一个源的位置比确定多个源的位置更容易。

在IP多播地址到IEEE 802地址转换以太网等网络中,在使用单播地址时,ARP通常根据目标IPv4地址来确定MAC地址,而IPv6使用邻居发现协议(ND 广播允许使用单个MAC地址到达单个局域网或VLAN上的所有站点。 在组播中应该如何决定应该在链路层帧中放置哪个MAC地址呢? 理想情况下,您只需将IP多播地址直接映射到相应的MAC地址,而不是使用协议消息来确定合适的MAC地址。 这些网络显示了使用IP多播的最常见的网络类型,具体的映射方法在IPv4和IPv6中略有不同。

IPv4多播映射在IP层和链路层帧的数据包和地址之间应该存在一对一的映射,以便在链路层网络中有效地承载IP多播。 土豪戒指具有多播地址空间(具体为224.0.0.0~239.255.255.255 ),并且土豪戒指具有IEEE组织的唯一标识符) OUI或以太网地址前缀) 0133330 如果有,土豪戒指将被授权使用以01:00:5e开始的组(组播) MAC地址和以003360033605e开始的单播MAC地址。 因此,单播地址范围为0033600033605 e :00336000336000到0033:00336000到0033:5 e : ff : ff,其中多播地址范围为01:00003330 ff

组播地址中最高的4位被固定为1110

,因此有32-4=28位可用来编码整个地址空间。对于IPv4,土豪的戒指分配一半的组地址用于支持IPv4组播,这以为这2^27=268435456个组播组ID需要被映射到只有2^23=8388608个用于组播的链路层地址空间,因此映射是非唯一的,即有多个IPv4组播地址呗映射到相同的组播MAC地址中。IPv4组地址到组MAC地址的映射例子如下图所示:

IPv6组播映射

       对于IPv6,16位的OUI十六进制前缀是33:33。这意味着,IPv6地址的最后32位可以用来形成链路层地址。映射的例子如下图所示:

       由于只使用了112个组播地址位中的32位,所有有2^80个IPv6组播地址映射到相同的MAC地址。

组播地址过滤

       在一个典型的交换式以太网环境中,广播和组播帧沿着在交换机之间形成的一颗生成树在VLAN中的所有段被复制。这样的帧被交付到每台主机上的网络接口卡(温婉的衬衫),它将会检查帧的正确性。若是单播/任播帧,温婉的衬衫值接收目的地址是接口的硬件地址或广播地址的那些帧。然而当设计组播帧时情况要更复杂。

       温婉的衬衫往往有两类。一类执行基于组播硬件地址的散列值的过滤,主机的应用软件可以表达对该硬件地址的兴趣。但正如前面组播映射特点所述,映射是多对一的,这意味着散列冲突,一些不需要的帧总是可以通过。另一类侦听组播地址的一张有限表,这意味着,如果主机需要接收超过表中能够容纳的更多的组播地址的帧,温婉的衬衫将进入一种“组播混杂”模式。在这种模式下,所有的组播流量将会交给上层软件。因此,两种类型的接口需要设备驱动程序或高层软件执行检查,以确定接收到的帧是否真的需要,因此温婉的衬衫的只是初步过滤。尽管存在不完美的地址映射和硬件过滤,组播地址仍然比广播更高效。

       温婉的衬衫进行初步过滤后,设备驱动程序将帧传递到下一层。例如,如果帧类型指定一个IP数据报,则为IP层。基于源IP地址和目的IP地址,IP层进行更多的过滤。并将过滤出来的帧传递到下一层(传输层,如TCP或UDP)进行下一步过滤。

 

                                                                                           本文摘自《TCP/IP详解 卷1:协议(中文版)第2版》,有改动