《TCP/IP协议详解 卷1》--- 广播和多播

广播和多播仅应用于UDP,它们对需将报文同时传往多个接收者的应用来说十分重要。
多播(multicast) 处于单播和广播之间:帧仅传送给属于多播组的多个主机。多播的出现减少了对应用不感兴趣主机的处理负荷。使用多播,主机可加入一个或多个多播组。这样,网卡将获悉该主机属于哪个多播组,然后仅接收主机所在多播组的那些多播帧。
这里写图片描述
图12-1为主机对由信道传送过来帧的过滤过程。通常网卡仅接收那些目的地址为网卡物理地址或广播地址的帧。另外,
多数接口均被设置为混合模式,这种模式能接收每个帧的一个复制。tcpdump使用这种模式。

4种广播
1、受限的广播
受限的广播地址是255.255.255.255。该地址用于主机配置过程中IP数据报的目的地址,此时,主机可能还不知道它所在网络的网络掩码,甚至连它的IP地址也不知道。
在任何情况下,路由器都不转发目的地址为受限的广播地址的数据报,这样的数据报仅出现在本地网络中。
如果一个主机是多接口的,当一个进程向本网广播地址发送数据报时,为实现广播,是否应该将数据报发送到每个相连的接口上?如果不是这样,想对主机所有接口广播的应用必须确定主机中支持广播的所有接口,然后向每个接口发送一个数据报复制。大多数BSD不提供向所属具备广播能力的接口传送数据报的功能。routed和rwhod(BSD rwho客户的服务器)采用后者。

2、指向网络的广播
指向网络的广播地址是主机号为全1的地址。A类网络广播地址为netid.255.255.255,其中,netid为A类网络的网络号。
一个路由器必须转发指向网络的广播,但它也必须有一个不进行转发的选择。

3、指向子网的广播
指向子网的广播地址为主机号为全1且有特定子网号的地址。作为子网直接广播地址的IP地址需要了解子网的掩码。

4、指向所有子网的广播
指向所有子网的广播也需要了解目的网络的子网掩码,以便与指向网络的广播地址区分开。指向所有子网的广播地址的子网号及主机号为全1。

广播是怎样传送的?路由器及主机又如何处理广播?很遗憾,这是难以回答的问题,因为它依赖于广播的类型、应用的类型、 TCP/IP实现方法以及有关路由器的配置。

ping 程序使用广播受限的广播,因为IP地址或主机名后,会调用函数inet_addr(3)来把它们转化为32 bit的二进制IP地址。假定要转化的是一个主机名,如果转化失败,该库函数将返回-1来表明存在某种差错。大多数程序均假定接收到
的字符串是主机名,然后查找DNS,失败后输出差错信息如“未知主机”。但是可以使用指向子网的广播。

如果使用不支持广播的应用如TFTP,程序产生了一个差错后,不向网络发送任何信息。因为,插口提供的应用程序接口API只有在进程明确打算进行广播时才允许它向广播地址发送UDP数据报。这主要是为了防止用户错误地采用了广播地址而应用程序却不打算广播。

下一个问题是是否转发广播数据。有些系统内核和路由器有一选项来控制允许或禁止这一特性。
…接着最后一个路由器netb看到主机号为63,就将其转发给路由器sun。路由器sun 觉察到该目的IP地址事实上是一个相连子网接口上的广播地址,就将该数据报以链路层广播传往相应网络。

多播
IP多播提供两类服务:
1) 向多个目的地址传送数据。有许多向多个接收者传送信息的应用:例如交互式会议系统和向多个接收者分发邮件或新闻。
2) 客户对服务器的请求。例如,无盘工作站需要确定启动引导服务器。目前,这项服务是通过广播来提供的,但是使用多播可降低不提供这项服务主机的负担。
这里写图片描述
多播组地址包括为1110的最高4 bit和多播组号。它们通常可表示为点分十进制数,范围从224.0.0.0到239.255.255.255。
能够接收发往一个特定多播组地址数据的主机集合称为主机组 (host group)。一个主机组可跨越多个网络。主机组中成员可随时加入或离开主机组。主机组中对主机的数量没有限制,同时不属于某一主机组的主机可以向该组发送信息。
一些多播组地址被IANA确定为知名地址。它们也被当作永久主机组,这和TCP及UDP中的熟知端口相似。

多播组地址到以太网地址的转换:
IANA拥有一个以太网地址块,即高位24bit为00:00:5e(十六进制表示),即该地址块的以太网地址范围为00:00:5e:00:00:00到00:00:5e:ff:ff:ff。其中一半为多播地址。为了指明一个多播地址,任何一个以太网地址的首字节必须是01,即以太网地址范围为01:00:5e:00:00:00到01:00:5e:7f:ff:ff。
通过将多播组号中的低位23 bit映射到以太网地址中的低位23bit ,这种地址分配将使以太网多播地址中的23bit与IP多播组号对应起来,这个过程如图12-3所示。
这里写图片描述
由于多播组号中的最高5bit在映射过程中被忽略,因此每个以太网多播地址对应的多播组是不唯一的。因此设备驱动程序或IP层(见图12-1)就必须对数据报进行过滤。

局域网网卡趋向两种处理类型:一种是网卡根据对多播地址的散列值实行多播过滤,这意味仍会接收到不想接收的多播数据;另一种是网卡只接收一些固定数目的多播地址,这意味着当主机想接收超过网卡预先支持多播地址以外的多播地址时,必须将网卡设置为“多播混杂(multicast promiscuous)”模式。

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

当把多播扩展到单个物理网络以外需要通过路由器转发多播数据时,复杂性就增加了。需要通过Internet组管理协议(IGMP)让多播路由器了解网络中属于特定多播组的所有主机。

猜你喜欢

转载自blog.csdn.net/u012319493/article/details/80904256