广播和多播仅应用于 UDP. 为了弄清广播和多播,需要了解主机对由信道传送过来帧的过滤过程。首先,网卡查看由信道传送过来的帧,确定是否接收 该帧,若接收后就将它传往设备驱动程序。通常网卡仅接 收那些目的地址为网卡物理地址或广播地址的帧。另外多数接口均被设置为混合模式,这种模式能接收每个帧的一个复制。目前,大多数的网卡经过配置都能接收目的地址为多 播地址或某些子网多播地址的帧。对于以太网,当地址中最高字节的最低位设置为1时表示该地址是一个多播地址,用十六进制可表示为 01:00:00:00:00:00(以太网广播地址ff:ff:ff:ff:ff:ff可看作是以太网多播地址的特例)。
如果网卡收到一个帧,这个帧将被传送给设备驱动程序(如果帧检验和错,网卡将丢弃 该帧)。设备驱动程序将进行另外的帧过滤。首先,帧类型中必须指定要使用的协议(IP、ARP等等)。其次,进行多播过滤来检测该主机是否属于多播地址说明的多播组。
设备驱动程序随后将数据帧传送给下一层,比如,当帧类型指定为 IP数据报时,就传往 IP层。IP根据IP地址中的源地址和目的地址进行更多的过滤检测。如果正常,就将数据报传送 给下一层(如 TCP或UDP)。
每次 UDP收到由 IP传送来的数据报,就根据目的端口号,有时还有源端口号进行数据报过滤。如果当前没有进程使用该目的端口号,就丢弃该数据报并产生一个ICMP不可达报文(TCP根据它的端口号作相似的过滤)。如果UDP数据报存在检验和错,将被丢弃。
四种 IP广播地址
受限的广播地址是 255.255.255.255。该地址用于主机配置过程中IP数据报的目的地址, 此时,主机可能还不知道它所在网络的网络掩码,甚至连它的 IP地址也不知道。
在任何情况下,路由器都不转发目的地址为受限的广播地址的数据报,这样的数据报仅 出现在本地网络中。
一个未解的问题是:如果一个主机是多接口的,当一个进程向本网广播地址发送数据报时, 为实现广播,是否应该将数据报发送到每个相连的接口上?如果不是这样,想对主机所有接口 广播的应用必须确定主机中支持广播的所有接口,然后向每个接口发送一个数据报复制。
大多数 BSD系统将 255.255.255.255看作是配置后第一个接口的广播地址,并且不提供向 所属具备广播能力的接口传送数据报的功能。不过, routed(见 10.3节)和 rwhod(BSD rwho客户的服务器)是向每个接口发送 UDP数据报的两个应用程序。这两个应用程序均用相 似的启动过程来确定主机中的所有接口,并了解哪些接口具备广播能力。同时,将对应于那 种接口的指向网络的广播地址作为发往该接口的数据报的目的地址。
指向网络的广播地址是主机号为全 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) 客户对服务器的请求。例如,无盘工作站需要确定启动引导服务器。目前,这项服务 是通过广播来提供的(正如第 16章的BOOTP),但是使用多播可降低不提供这项服务主机的负担。
多播组地址包括为 1110的最高 4 bit 和多播组号。它们通常可表示为点分十进制数,范围 从224.0.0.0到239.255.255.255。
能够接收发往一个特定多播组地址数据的主机集合称为主机组 (host group)。一个主机组 可跨越多个网络。主机组中成员可随时加入或离开主机组。主机组中对主机的数量没有限制, 同时不属于某一主机组的主机可以向该组发送信息。
一些多播组地址被 IANA确定为知名地址。它们也被当作永久主机组,这和 TCP及UDP中 的熟知端口相似。同样,这些知名多播地址在 RFC最新分配数字中列出。注意这些多播地址 所代表的组是永久组,而它们的组成员却不是永久的。
IANA拥有一个以太网地址块,即高位 24 bit 为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。
这里对CSMA/CD或令牌网使用的是Internet标准比特顺序,和在内存中出现的比特 顺序一样。这也是大多数程序设计员和系统管理员采用的顺序。 IEEE文档采用了这种 比特传输顺序。Assigned Numbers RFC给出了这些表示的差别。
这种地址分配将使以太网多播地址中的 23bit与IP多播组号对应起来,通过将多播组号中 的低位23bit映射到以太网地址中的低位 23bit实现,这个过程如图 12-3所示。
由于多播组号中的最高 5 bit 在映射过程中被忽略,因此每个以太网多播地址对应的多播 组是不唯一的。3 2 个不同的多播组号被映射为一个以太网地址。例如,多播地址 224.128.64.32(十六进制 e0.80.40.20)和224.0.64.32(十六进制 e0.00.40.20)都映射为同一以 太网地址 01:00:5e:00:40:20。
既然地址映射是不唯一的,那么设备驱动程序或 IP层(见图 12-1)就必须对数据报进行过 滤。因为网卡可能接收到主机不想接收的多播数据帧。另外,如果网卡不提供足够的多播数 据帧过滤功能,设备驱动程序就必须接收所有多播数据帧,然后对它们进行过滤。