✅ 操作成功!

组播和广播的区别

发布时间:2023-06-08 作者:admin 来源:文学

组播和广播的区别

组播和广播的区别

波士顿矩阵模型-电位器式传感器

2023年2月23日发(作者:外贸开发信范文)

在第1章中我们提到有三种IP地址:单播地址、广播地址和多播地址。本章将更详细地介绍

广播和多播。

广播和多播仅应用于UDP,它们对需将报文同时传往多个接收者的应用来说十分重要。

TCP是一个面向连接的协议,它意味着分别运行于两主机(由IP地址确定)内的两进程(由

端口号确定)间存在一条连接。

考虑包含多个主机的共享信道网络如以太网。每个以太网帧包含源主机和目的主机的

以太网地址(48bit)。通常每个以太网帧仅发往单个目的主机,目的地址指明单个接收接口,

因而称为单播(unicast)。在这种方式下,任意两个主机的通信不会干扰网内其他主机(可能

引起争夺共享信道的情况除外)。

然而,有时一个主机要向网上的所有其他主机发送帧,这就是广播。通过ARP和RARP

可以看到这一过程。多播(multicast)处于单播和广播之间:帧仅传送给属于多播组的多个主

机。

为了弄清广播和多播,需要了解主机对由信道传送过来帧的过滤过程。图12-1说明了

这一过程。

首先,网卡查看由信道传送过来的帧,确定是否接收该帧,若接收后就将它传往设备

驱动程序。通常网卡仅接收那些目的地址为网卡物理地址或广播地址的帧。另外,多数接口

均被设置为混合模式,这种模式能接收每个帧的一个复制。作为一个例子,tcpdump使用这

种模式。

目前,大多数的网卡经过配置都能接收目的地址为多播地址或某些子网多播地址的帧。

对于以太网,当地址中最高字节的最低位设置为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数据报存在检验和错,将被丢弃。

使用广播的问题在于它增加了对广播数据不感兴趣主机的处理负荷。拿一个使用UDP

广播应用作为例子。如果网内有50个主机,但仅有20个参与该应用,每次这20个主机中的一

个发送UDP广播数据时,其余30个主机不得不处理这些广播数据报。一直到UDP层,收到

的UDP广播数据报才会被丢弃。这30个主机丢弃UDP广播数据报是因为这些主机没有使

用这个目的端口。

多播的出现减少了对应用不感兴趣主机的处理负荷。使用多播,主机可加入一个或多

个多播组。这样,网卡将获悉该主机属于哪个多播组,然后仅接收主机所在多播组的那些多

播帧。

12.2广播

在图3-9中,我们知道了四种IP广播地址,下面对它们进行更详细的介绍。

12.2.1受限的广播

受限的广播地址是255.255.255.255。该地址用于主机配置过程中IP数据报的目的地址,

此时,主机可能还不知道它所在网络的网络掩码,甚至连它的IP地址也不知道。

在任何情况下,路由器都不转发目的地址为受限的广播地址的数据报,这样的数据报

仅出现在本地网络中。

一个未解的问题是:如果一个主机是多接口的,当一个进程向本网广播地址发送数据

报时,为实现广播,是否应该将数据报发送到每个相连的接口上?如果不是这样,想对主机

所有接口广播的应用必须确定主机中支持广播的所有接口,然后向每个接口发送一个数据报

复制。

大多数BSD系统将255.255.255.255看作是配置后第一个接口的广播地址,并且不提供

向所属具备广播能力的接口传送数据报的功能。不过,routed(见10.3节)和rwhod(BSDrwho

客户的服务器)是向每个接口发送UDP数据报的两个应用程序。这两个应用程序均用相似

的启动过程来确定主机中的所有接口,并了解哪些接口具备广播能力。同时,将对应于那种

接口的指向网络的广播地址作为发往该接口的数据报的目的地址。

HostRequirementsRFC没有进一步涉及多接口主机是否应当向其所有的接口发送受限

的广播。

12.2.2指向网络的广播

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

中netid为A类网络的网络号。

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

12.2.3指向子网的广播

指向子网的广播地址为主机号为全1且有特定子网号的地址。作为子网直接广播地址的

IP地址需要了解子网的掩码。例如,如果路由器收到发往128.1.2.255的数据报,当B类网

络128.1的子网掩码为255.255.255.0时,该地址就是指向子网的广播地址;但如果该子网的掩

码为255.255.254.0,该地址就不是指向子网的广播地址。

12.2.4指向所有子网的广播

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

分开。指向所有子网的广播地址的子网号及主机号为全1。例如,如果目的子网掩码为

255.255.255.0,那么IP地址128.1.255.255是一个指向所有子网的广播地址。然而,如果网络

没有划分子网,这就是一个指向网络的广播。

当前的看法[Almquist1993]是这种广播是陈旧过时的,更好的方式是使用多播而不是

对所有子网的广播。

[Almquist1993]指出RFC922要求将一个指向所有子网的广播传送给所有子网,但当

前的路由器没有这么做。这很幸运,因为一个因错误配置而没有子网掩码的主机会把它的本

地广播传送到所有子网。例如,如果IP地址为128.1.2.3的主机没有设置子网掩码,它的广

播地址在正常情况下的默认值是128.1.255.255。但如果子网掩码被设置为255.255.255.0,那

么由错误配置的主机发出的广播将指向所有的子网。

1983年问世的4.2BSD是第一个影响广泛的TCP/IP的实现,它使用主机号全0作为广地

址。一个最早提到广播IP地址的是IEN212[GurwitzandHinden1982],它提出用主机号中

的1比特来表示IP广播地址(IENs是互联网试验注释,基本上是RFC的前身)。RFC894

[Hornig1984]认为4.2BSD使用不标准的广播地址,但RFC906[Finlayson1984]注意到对广

播地址还没有Internet标准。RFC编辑在RFC906中加了一个脚注承认缺少标准的广播地址,

并强烈推荐将主机号全1作为广播地址。尽管1986年的4.3BSD采用主机号全1表示广播地址,

但直到90年代早期,操作系统(著名的是SunOS4.x)还继续使用非标准的广播地址。

12.3广播的例子

广播是怎样传送的?路由器及主机又如何处理广播?很遗憾,这是难以回答的问题,

因为它依赖于广播的类型、应用的类型、TCP/IP实现方法以及有关路由器的配置。

首先,应用程序必须支持广播。如果执行

sun%ping255.255.255.255

/usr/etc/ping:unknownhost255.255.255.255

打算在本地电缆上进行广播。但它无法进行,原因在于该应用程序(ping)中存在一

个程序设计上的问题。大多数应用程序收到点分十进制的IP地址或主机名后,会调用函数

inet_addr(3)来把它们转化为32bit的二进制IP地址。假定要转化的是一个主机名,如果转化

失败,该库函数将返回-1来表明存在某种差错(例如是字符而不是数字或串中有小数点)。

但本网广播地址(255.255.255.255)也被当作存在差错而返回-1。大多数程序均假定接收到

的字符串是主机名,然后查找DNS(第14章),失败后输出差错信息如“未知主机”。

如果我们修复ping程序中这个欠缺,结果也并不总是令人满意的。在6个不同系统的

测试中,仅有一个像预期的那样产生了一个本网广播数据报。大多数则在路由表中查找IP

地址255.255.255.255,而该地址被用作默认路由器地址,因此向默认路由器单播一个数据报。

最终该数据报被丢弃。

指向子网的广播是我们应该使用的。在6.3节中,我们向测试网络(见扉页前图)中IP

地址为140.252.13.63的以太网发送数据报,并接收以太网中所有主机的应答。与子网广播

地址关联的每个接口是用于命令ifconfig(见3.8节)的值。如果我们ping那个地址,预期的

结果是:

IP通过目的地址(140.252.13.63)来确定,这是指向子网的广播地址,然后向链路层

的广播地址发送该数据报。

在6.3节提到的这种广播类型的接收对象为局域网中包括发送主机在内的所有主机,因

此可以看到除了收到网内其他主机的答复外,还收到来自发送主机(sun)的答复。

在这个例子中,我们也显示了执行ping广播地址前后ARP缓存的内容。这可以显示

广播与ARP之间的相互作用。执行ping命令前ARP缓存是空的,而执行后是满的(也就

是说,对网内其他每个响应回显请求的主机在ARP缓存中均有一个条目)。我们提到的该以

太网数据帧被传送到链路层的广播地址(0xffffffff)是如何发生的呢?由sun主机发送的

数据帧不需要ARP。

如果使用tcpdump来观察ping的执行过程,可以看到广播数据帧的接收者在发送它的

响应之前,首先产生一个对sun主机的ARP请求,因为它的应答是单播的。在4.5节我们介

绍了一个ARP请求的接收者(该例中是sun)通常在发送ARP应答外,还将请求主机的IP

地址和物理地址加入到ARP缓存中去。这基于这样一个假定:如果请求者向我们发送一个

数据报,我们也很可能想向它发回什么。

我们使用的ping程序有些特殊,原因在于它使用的编程接口(在大多数Unix实现中

是低级插口(rawsocket))通常允许向一个广播地址发送数据报。如果使用不支持广播的应用

如TFTP,情况又如何呢?(TFTP将在第15章详细介绍。)

bsdi%tftp启动客户程序

tftp>connect140.252.13.63说明服务器的IP地址

tftp>试图从服务器或获取一个文件

tftp:sendto:Permissiondenied

tftp>quit终止客户程序

在这个例子中,程序立即产生了一个差错,但不向网络发送任何信息。产生这一切的

原因在于,插口提供的应用程序接口API只有在进程明确打算进行广播时才允许它向广播

地址发送UDP数据报。这主要是为了防止用户错误地采用了广播地址(正如此例)而应用

程序却不打算广播。

在广播UDP数据报之前,使用插口中API的应用程序必须设置SO_BROADCAST插

口选项。

并非所有系统均强制使用这个限制。某些系统中无需进程进行这个说明就能广播UDP

数据报。而某些系统则有更多的限制,需要有超级用户权限的进程才能广播。

下一个问题是是否转发广播数据。有些系统内核和路由器有一选项来控制允许或禁止

这一特性(见附录E)。

如果让路由器bsdi能够转发广播数据,然后在主机slip上运行ping程序,就能够观察

到由路由器bsdi转发的子网广播数据报。转发广播数据报意味着路由器接收广播数据,确

定该目的地址是对哪个接口的广播,然后用链路层广播向对应的网络转发数据报。

我们观察到它的确正常工作了,同时也看到BSD系统中的ping程序检查重复的数据

报序列号。如果出现重复序列号的数据报就显示DUP!,这意味着一个数据报已经在某处重

复了,然而它正是我们所期望看到的,因为我们正向一个广播地址发送数据。

我们还可以从远离广播所指向的网络上的主机上来进行这个试验。在主机

(和我们的网络距离14跳)上运行ping程序,如果路由器sun被设置

为能够转发所指向的广播,它还能正常工作。在这种情况下,这个IP数据报(传送ICMP

回显请求)被路径上的每个路由器像正常的数据报一样转发,它们均不知道传送的实际上是

广播数据。接着最后一个路由器netb看到主机号为63,就将其转发给路由器sun。路由器sun

觉察到该目的IP地址事实上是一个相连子网接口上的广播地址,就将该数据报以链路层广

播传往相应网络。

广播是一种应该谨慎使用的功能。在许多情况下,IP多播被证明是一个更好的解决

办法。

12.4多播

IP多播提供两类服务:

1)向多个目的地址传送数据。有许多向多个接收者传送信息的应用:例如交互式会议

系统和向多个接收者分发邮件或新闻。如果不采用多播,目前这些应用大多采用TCP来完

成(向每个目的地址传送一个单独的数据复制)。然而,即使使用多播,某些应用可能继续

采用TCP来保证它的可靠性。

2)客户对服务器的请求。例如,无盘工作站需要确定启动引导服务器。目前,这项服

务是通过广播来提供的(正如第16章的BOOTP),但是使用多播可降低不提供这项服务主机

的负担。

12.4.1多播组地址

图12-2显示了D类IP地址的格式。

不像图1-5所示的其他三类IP地址(A、B和C),分配的28bit均用作多播组号而不

再表示其他。

多播组地址包括为1110的最高4bit和多播组号。它们通常可表示为点分十进制数,范

围从224.0.0.0到239.255.255.255。

能够接收发往一个特定多播组地址数据的主机集合称为主机组(hostgroup)。一个主机

组可跨越多个网络。主机组中成员可随时加入或离开主机组。主机组中对主机的数量没有限

制,同时不属于某一主机组的主机可以向该组发送信息。

一些多播组地址被IANA确定为知名地址。它们也被当作永久主机组,这和TCP及

UDP中的熟知端口相似。同样,这些知名多播地址在RFC最新分配数字中列出。注意这

些多播地址所代表的组是永久组,而它们的组成员却不是永久的。

例如,224.0.0.1代表“该子网内的所有系统组”,224.0.0.2代表“该子网内的所有路由器

组”。多播地址224.0.1.1用作网络时间协议NTP,224.0.0.9用作RIP-2(见10.5节),224.0.1.2

用作SGI公司的dogfight应用。

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

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。

这里对CSMA/CD或令牌网使用的是Internet标准比特顺序,和在内存中出现的比特

顺序一样。这也是大多数程序设计员和系统管理员采用的顺序。IEEE文档采用了这种比特

传输顺序。AssignedNumbersRFC给出了这些表示的差别。

这种地址分配将使以太网多播地址中的23bit与IP多播组号对应起来,通过将多播组

号中的低位23bit映射到以太网地址中的低位23bit实现,这个过程如图12-3所示。

由于多播组号中的最高5bit在映射过程中被忽略,因此每个以太网多播地址对应的多

播组是不唯一的。32个不同的多播组号被映射为一个以太网地址。例如,多播地址

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)就必须对数据报

进行过滤。因为网卡可能接收到主机不想接收的多播数据帧。另外,如果网卡不提供足够的

多播数据帧过滤功能,设备驱动程序就必须接收所有多播数据帧,然后对它们进行过滤。

局域网网卡趋向两种处理类型:一种是网卡根据对多播地址的散列值实行多播过滤,

这意味仍会接收到不想接收的多播数据;另一种是网卡只接收一些固定数目的多播地址,这

意味着当主机想接收超过网卡预先支持多播地址以外的多播地址时,必须将网卡设置为“多

播混杂(multicastpromiscuous)”模式。因此,这两种类型的网卡仍需要设备驱动程序检查收

到的帧是否真是主机所需要的。

即使网卡实现了完美的多播过滤(基于48bit的硬件地址),由于从D类IP地址到48bit

的硬件地址的映射不是一对一的,过滤过程仍是必要的。

尽管存在地址映射不完美和需要硬件过滤的不足,多播仍然比广播好。

单个物理网络的多播是简单的。多播进程将目的IP地址指明为多播地址,设备驱动程

序将它转换为相应的以太网地址,然后把数据发送出去。这些接收进程必须通知它们的IP

层,它们想接收的发往给定多播地址的数据报,并且设备驱动程序必须能够接收这些多播帧。

这个过程就是“加入一个多播组”(使用“接收进程”复数形式的原因在于对一确定的多播信

息,在同一主机或多个主机上存在多个接收者,这也是为什么要首先使用多播的原因)。当

一个主机收到多播数据报时,它必须向属于那个多播组的每个进程均传送一个复制。这和单

个进程收到单播UDP数据报的UDP不同。使用多播,一个主机上可能存在多个属于同一多

播组的进程。

当把多播扩展到单个物理网络以外需要通过路由器转发多播数据时,复杂性就增加了。

需要有一个协议让多播路由器了解确定网络中属于确定多播组的任何一个主机。这个协议就

是Internet组管理协议(IGMP),也是下一章介绍的内容。

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

FDDI网络使用相同的D类IP地址到48bitFDDI地址的映射过程[Katz1990]。令牌环

网络通常使用不同的地址映射方法,这是因为大多数令牌控制中的限制。

广播是将数据报发送到网络中的所有主机(通常是本地相连的网络),而多播是将数据

报发送到网络的一个主机组。这两个概念的基本点在于当收到送往上一个协议栈的数据帧时

采用不同类型的过滤。每个协议层均可以因为不同的理由丢弃数据报。

目前有四种类型的广播地址:受限的广播、指向网络的广播、指向子网的广播和指向

所有子网的广播。最常用的是指向子网的广播。受限的广播通常只在系统初始启动时才会用

到。

试图通过路由器进行广播而发生的问题,常常是因为路由器不了解目的网络的子网掩

码。结果与多种因素有关:广播地址类型、配置参数等等。

D类IP地址被称为多播组地址。通过将其低位23bit映射到相应以太网地址中便可实

现多播组地址到以太网地址的转换。由于地址映射是不唯一的,因此需要其他的协议实现额

外的数据报过滤。

(一).基本地址格式(IPv4)

现在的IP网络使用32位地址,以点分十进制表示,如192.168.0.1。

地址格式为:IP地址=网络地址+主机地址或IP地址=网络地址+子网地址+主机地址。

网络地址是因特网协会的ICANN(theInternetCorporationforAssignedNamesand

Numbers)分配的,下有负责北美地区的InterNIC、负责欧洲地区的RIPENIC和负责亚太

地区的APNIC目的是为了保证网络地址的全球唯一性。主机地址是由各个网络的系统管理

员分配。因此,网络地址的唯一性与网络内主机地址的唯一性确保了IP地址的全球唯一性。

(二).保留地址的分配

根据用途和安全性级别的不同,IP地址还可以大致分为两类:公共地址和私有地址。公

用地址在Internet中使用,可以在Internet中随意访问。私有地址只能在内部网络中使用,

只有通过代理服务器才能与Internet通信。

[编辑本段]IP地址的分类

网络号:用于识别主机所在的网络;

主机号:用于识别该网络中的主机。

IP地址分为五类,A类保留给政府机构,B类分配给中等规模的公司,C类分配给任何需

要的人,D类用于组播,E类用于实验,各类可容纳的地址数目不同。

A、B、C三类IP地址的特征:当将IP地址写成二进制形式时,A类地址的第一位总是O,

B类地址的前两位总是10,C类地址的前三位总是110。

1.A类地址

(1)A类地址第1字节为网络地址,其它3个字节为主机地址。

(2)A类地址范围:1.0.0.1—127.255.255.254

(3)A类地址中的私有地址和保留地址:

①10.X.X.X是私有地址(所谓的私有地址就是在互联网上不使用,而被用在局域网络中

的地址)。

范围(10.0.0.0-10.255.255.255)

②127.X.X.X是保留地址,用做循环测试用的。

2.B类地址

(1)B类地址第1字节和第2字节为网络地址,其它2个字节为主机地址。

(2)B类地址范围:128.0.0.1—191.255.255.254。

(3)B类地址的私有地址和保留地址

①172.16.0.0—172.31.255.255是私有地址

②169.254.X.X是保留地址。如果你的IP地址是自动获取IP地址,而你在网络上又没有

找到可用的DHCP服务器。就会得到其中一个IP。

3.C类地址

(1)C类地址第1字节、第2字节和第3个字节为网络地址,第4个个字节为主机地址。另

外第1个字节的前三位固定为110。

(2)C类地址范围:192.0.0.1—223.255.255.254。

(3)C类地址中的私有地址:

192.168.X.X是私有地址。(192.168.0.0-192.168.255.255)

4.D类地址

(1)D类地址不分网络地址和主机地址,它的第1个字节的前四位固定为1110。

(2)D类地址范围:224.0.0.1—239.255.255.254

5.E类地址

(1)E类地址不分网络地址和主机地址,它的第1个字节的前四位固定为1111。

(2)E类地址范围:240.0.0.1—255.255.255.254

IP的概念是非常广泛的,包括品牌、商标、版权,还有很重要的就是商业秘密、商业模

式、商业标准等。IP拥有量的多少,是区分制造与创造的最主要标志,一个国家拥有的IP

太少,它的产业或者企业在国际分工中就只能扮演初级加工者的角色。

[编辑本段]特殊的IP地址

在IP地址空间中,有的IP地址不能为设备分配的,有的IP地址不能用在公网,有的IP

地址只能在本机使用,诸如此类的特殊IP地址众多:

受限广播地址

广播通信是一对所有的通信方式。若一个IP地址的2进制数全为1,也就是

255.255.255.255,则这个地址用于定义整个互联网。如果设备想使IP数据报被整个Internet

所接收,就发送这个目的地址全为1的广播包,但这样会给整个互联网带来灾难性的负担。

因此网络上的所有路由器都阻止具有这种类型的分组被转发出去,使这样的广播仅限于本地

网段。

直接广播地址

一个网络中的最后一个地址为直接广播地址,也就是HostID全为1的地址。主机使用这

种地址把一个IP数据报发送到本地网段的所有设备上,路由器会转发这种数据报到特定网

络上的所有主机。

注意:这个地址在IP数据报中只能作为目的地址。另外,直接广播地址使一个网段中可

分配给设备的地址数减少了1个。

IP地址是0.0.0.0

若IP地址全为0,也就是0.0.0.0,则这个IP地址在IP数据报中只能用作源IP地址,这

发生在当设备启动时但又不知道自己的IP地址情况下。在使用DHCP分配IP地址的网络

环境中,这样的地址是很常见的。用户主机为了获得一个可用的IP地址,就给DHCP服务

器发送IP分组,并用这样的地址作为源地址,目的地址为255.255.255.255(因为主机这时

还不知道DHCP服务器的IP地址)。

NetID为0的IP地址

当某个主机向同一网段上的其他主机发送报文时就可以使用这样的地址,分组也不会被路

由器转发。比如12.12.12.0/24这个网络中的一台主机12.12.12.2/24在与同一网络中的另一

台主机12.12.12.8/24通信时,目的地址可以是0.0.0.8。

环回地址

127网段的所有地址都称为环回地址,主要用来测试网络协议是否工作正常的作用。比如

使用ping127.1.1.1就可以测试本地TCP/IP协议是否已正确安装。另外一个用途是当客户

进程用环回地址发送报文给位于同一台机器上的服务器进程,比如在浏览器里输入

127.1.2.3,这样可以在排除网络路由的情况下用来测试IIS是否正常启动。

专用地址

IP地址空间中,有一些IP地址被定义为专用地址,这样的地址不能为Internet网络的设

备分配,只能在企业内部使用,因此也称为私有地址。若要在Internet网上使用这样的地址,

必须使用网络地址转换或者端口映射技术。

这些专有地址是:

10/8地址范围:10.0.0.0到10.255.255.255共有2的24次方个地址

172.16/12地址范围:172.16.0.0至172.31.255.255共有2的20次方个地址

192.168/16地址范围:192.168.0.0至192.168.255.255共有2的16次方个地址

👁️ 阅读量:0