引言
在第一节概述中我们提到有三种IP地址:单播地址、广播地址和多播地址。本节将更详细地介绍广播和多播。
广播和多播仅应用于UDP,它们对需将报文同时传往多个接收者的应用来说十分重要。
通常每个以太网帧仅发往单个目的主机,目的硬件地址指明单个接收接口,因而称为单播(unicast)。在这种方式下,任意两个主机的通信不会干扰网内其他主机。然而,有时一个主机要向同一个局域网内的所有其他主机发送帧,这就是广播(broadcast)。多播(multicast)处于单播和广播之间:帧仅传送给属于多播组的多个主机。
下图是主机对接收的以太网帧的过滤过程:
混杂模式,在这种模式下,能接收每个帧的一个复制。tcpdump就是使用这种模式在接口上抓取数据包。
目前,大多数的网卡经过配置都能接收目的地址为多播地址或某些子网多播地址的帧。对于以太网,当地址中最高字节的最低位设置为1时表示该地址是一个多播地址,以太网广播地址 ff:ff:ff:ff:ff:ff可看作是以太网多播地址的特例。
如果网卡收到一个帧,这个帧将被传送给设备驱动程序(如果帧检验和错,网卡将丢弃该帧)。设备驱动程序将进行另外的帧过滤。首先,帧类型中必须指定要使用的协议(IP、ARP等等)。其次,进行多播过滤来检测该主机是否属于多播地址指明的多播组。
设备驱动程序随后将数据帧传送给上一层。比如,当帧类型指定为IP数据报时,就传往IP层。IP根据IP地址中的源地址和目的地址进行更多的过滤检测。如果正常,就将数据报传送给上一层(如TCP或UDP)。
每次UDP收到由IP传送来的数据报,就根据目的端口号,有时还有源端口号进行数据报过滤。如果当前没有进程使用该目的端口号,就丢弃该数据报并产生一个ICMP不可达报文(TCP根据它的端口号作相似的过滤)。如果UDP数据报存在检验和错误,则数据报被丢弃。
广播
广播地址有以下四种:
1. 受限的广播地址是255.255.255.255。该地址用于主机配置过程中IP数据报的目的地址,此时,主机可能还不知道它所在网络的网络掩码,甚至连它的IP地址也不知道。在任何情况下,路由器都不转发目的地址为受限的广播地址的数据报,这样的数据报仅出现在本地网络中。
2. 指向网络的广播地址是主机号为全1的地址。A类网络广播地址为netid.255.255.255,其中netid为A类网络的网络号。一个路由器必须能转发指向网络的广播,但它也必须有一个不进行转发的选择。
3. 指向子网的广播地址为主机号为全1且有特定子网号的地址。作为子网直接广播地址的IP地址需要了解子网的掩码。例如,如果路由器收到发往128.1.2.255的数据报,当B类网络128.1的子网掩码为255.255.255.0时,该地址就是指向子网的广播地址;但如果该子网的掩码为255.255.254.0,该地址就不是指向子网的广播地址。
4. 指向所有子网的广播地址也需要了解目的网络的子网掩码,以便与指向网络的广播地址区分开。指向所有子网的广播地址的子网号及主机号为全1。例如,如果目的子网掩码为255.255.255.0,那么IP地址128.1.255.255是一个指向所有子网的广播地址。然而,如果网络没有划分子网,这就是一个指向网络的广播。
指向子网的广播地址是我们应该使用的。书中给出了几个广播的例子,并得出了一个结论:广播是一种应该谨慎使用的功能,在许多情况下,IP多播被证明是一个更好的选择。
多播
IP多播主要向多个目的地传送数据。有许多向多个接收者传送信息的应用:例如交互式会议系统和向多个接收者分发邮件或新闻的应用。
多播组地址
下图是D类IP地址的格式:
多播组地址包括为1110的最高4位和多播组号。它们通常可表示为点分十进制数,范围从224.0.0.0到239.255.255.255。
主机组(host group)。一个主机组可跨越多个网络。主机组中成员可随时加入或离开主机组。主机组中对主机的数量没有限制,同时不属于某一主机组的主机可以向该组发送信息。
一些多播组地址被IANA确定为知名地址。例如,224.0.0.1代表“该子网内的所有系统组”,224.0.0.2代表“该子网内的所有路由器组”。多播地址224.0.1.1用作网络时间协议NTP等。
多播组地址到以太网地址的转换
与IP多播相对应的以太网地址范围从01:00:5e:00:00:00到01:00:5e:7f:ff:ff。
这种地址分配将使以太网多播地址中的23位与IP多播组ID对应起来,通过将多播组ID中的低23位映射到以太网地址中的低23位实现,这个过程如下图所示:
由于多播组号中的最高5位在映射过程中被忽略,因此每个以太网多播地址对应的多播组是不唯一的。32个不同的多播ID号可被映射为一个以太网地址。
既然地址映射是不唯一的,那么设备驱动程序或IP层就必须对数据报进行过滤。因为网卡可能接收到主机不想接收的多播数据帧。另外,如果网卡不提供足够的多播数据帧过滤功能,设备驱动程序就必须接收所有多播数据帧,然后对它们进行过滤。
单个物理网络的多播是简单的。多播进程将目的IP地址指明为多播地址,设备驱动程序将它转换为相应的以太网地址,然后把数据发送出去。这些接收进程必须通知它们的IP层,它们想接收发往给定多播地址的数据报,并且设备驱动程序必须能够接收这些多播帧。这个过程就是“加入一个多播组”。当一个主机收到多播数据报时,它必须向属于那个多播组的每个进程均传送一个复制。这和单个进程收到单播UDP数据报的UDP不同。
当把多播扩展到单个物理网络以外需要通过路由器转发多播数据时,复杂性就增加了。需要有一个协议让多播路由器了解确定网络中属于确定多播组的任何一个主机。这个协议就是Internet组管理协议(IGMP)。