多播与广播原理分析及区别


 1.0 广播

广播的用途

  • 假定服务器主机在本地局域网上,但不知道它的单播IP地址时对它进行定位,即进行资源发现
  • 当有多个客户和单个服务器通信时,减少局域网上的数据流量

使用广播的因特网应用的例子:

  • ARP协议通过链路层广播定位具有指定IP地址的主机的MAC地址(ip----->mac)
  • 主机通过广播向DHCP服务器申请IP地址    (电脑每次开机运行DHCP ,请求路由器发送ip)

广播地址

1、子网广播地址

  • 所有主机号全为1IP地址是子网广播地址。
  • 向子网广播地址发送的数据报,子网内的所有主机都能收到。
  • 子网广播数据报不会被路由器转发。

2、受限广播地址

  • 255.255.255.255地址为受限广播地址。
  • 路由器不会转发该地址的IP数据报。
  • BOOTPDHCP服务器就是利用这个地址为发出IP地址广播申请的主机分配IP地址 。

3、链路层广播地址

  • MAC地址全1的地址,即FF:FF:FF:FF:FF:FF
  • 带有这样目的MAC地址的帧经过任何该子网上的主机时,都会被其链路层接收。
  •  ARP就是利用这个地址发出广播来确定具有指定IP地址对应主机的MAC地址。

2.0 多播

1.0   为什么要使用多播:

       最开始的时候,设计这一技术的目的是弥补“广播”(Broadcasting)通信的不足。

多播的用途

  • 单播和广播是两个极端,要么一个,要么全部。
  • 多播提供一种折衷方案,多播数据报仅由对该数据报感兴趣的接口接收。
  • 广播一般局限于局域网。
  • 而多播既可以用于局域网也可以跨越广域网

加入多播组

  • 主机要接收多播数据必须预先加入多播组。
  • IP多播组由特定IP地址来区分。
  • 进程通过把UDP套接字(SOCK_DGRAM类型)绑定到一个多播组的IP地址,并设置相应的套接字选项,就可以加入这个多播组。
  • 设置套接字选项通知网络接口该多播地址上到来的消息应该被传送给这个套接字。
  • 如果同一台机器上有多个进程加入该组,则网络接口会把每个消息复制给所有这些进程

 

多播地址

多播是通过D类地址进行的。

D类地址的前4位是1110,后面28位是多播的组标识。  1110   +  

多播地址范围是224.0.0.0 ~ 239.255.255.255

  • 224.0.0.1为全主机组,支持多播的主机必须加入全主机组。
  • 224.0.0.2为全路由组,支持多播的由器必须加入全路由组。

 

•多播组按照多播范围(多播的消息会从源开始被传送多远)被分为四类:

链路-本地多播地址224.0.0.0 ~ 224.0.0.255

  •   这些地址是给那些在网络拓扑的最底层相连的机器的。
  •   多播路由器不会转发这些地址的多播消息。

–全局多播地址:224.0.1.0 ~ 238.255.255.255

  该地址范围内的消息应该被所有多播路由器传播。

管理范围内的多播地址239.0.0.0 ~ 239.255.255.255

  这些地址用在专门组织内部,并且不应该被传递到组织范围之外。

 

多播IP地址与多播MAC地址的转换

  • 多播MAC地址前24位固定为:00000001 00000000 01011110
  • 多播MAC地址第25为固定为0

多播MAC地址后23位取多播IP地址后23

IP地址                                       11100000 10000000 00000001 00000001                               

MAC址   00000001 00000000  010111100 0000000 00000001 00000001                                                                      

                      01            00             5e


3.0  多播与广播区别

广播与多播的比较

  • – 广播数据报的接收是被动的。
  • – 连接到子网上的所有主机都要接收广播数据报,这会增加网络流量,并且子网上的主机增加额外的负担。
  • 多播数据报的接收是主动的。主机主动加入指定的多播组,才会接收该组的多播数据报。
  • 采用多播方式可以只把数据报发送给对数据报感兴趣的主机。

 

  • 发送广播数据报,只需要处理发送端
  • 只要将目的地址设置为网络的广播地址,设置套接字选项SO_BROADCAST
  • –接收多播数据报,只需要处理接收端
  • –多播数据报D类地址进行发送,在发送端不用设置套接字选项,但在接收端需要指出主机加入哪一个多播组。

多播与广播原理分析及区别_第1张图片

多播与广播原理分析及区别_第2张图片 


下面是一些转载

        网卡从网络上接收到目标物理地址对应的所有bit位都为1的数据报时,会收到这条消息并将其上传给驱动程序,网卡的这种工作模式称为广播模式,网卡的缺省工作模式包含直接模式和广播模式。

利用这一特性,UDP(用户数据报协议)还提供了向多个目标地址发送广播数据包的能力。

广播数据即数据从一个工作站上发出,只要将数据包的目标物理地址对应的所有bit位都设为1,局域网内的所有工作站网卡都会收到这条消息并将其上传给驱动程序。这一特征适用于无连接协议,因为局域网(LAN)上的所有机器都可获得并处理广播消息。

2.0   使用广播消息的不利之处是每台机器都必须对该消息进行处理。广播的处理过程:

比如,

  • 一用户在LAN上广播一条消息。  ---------->发送
  • 每台机器上的网卡都会收到这条消息------------->网卡接收
  • 并把它上传到网络堆栈(驱动程序完成)-------->上传网络堆栈
  • 然后,堆栈将这条消息的目标端口号与该主机上运行的所有的网络应用程序中所指定的端口号依次比较,看它们是否相等,
  • 从而决定哪个网络应用程序应该接收这条消息。--------->匹配网络与端口

通常,这个局域网上的多数机器对该消息都不感兴趣,草草地一弃了之。但是,各台机器在驱动程序中都仍需花时间来处理这个数据包,看是否有应用程序对它感兴趣。结果,高广播通信流使LAN上的机器陷入困境,因为每个工作站都要检查这个数据包。



 什么为网卡的多播传送模式?

有一些特殊的物理地址,他们不能作为任何网卡的实际物理地址使用,但网卡能够设定为不过滤从网络上接收到的一个以这些物理地址中的一个和若干个作为目的物理地址的帧。这些物理地址称为多播传送地址,网卡的这种工作模式称为多播传送模式。

 

“多播”亦称“多点传送”(multicast),也就是一台主机发出的包可以同时被其他多个有资格的主机接收,这台主机和那些有资格的主机就形成了一个组,他们在组内的通信是广播式的

多播的工作原理是,

将一个网络上的某些主机的网卡设置成多播传送工作模式,指定其不过滤以某一个多播传送地址作为目的物理地址的数据帧,这样,这些主机的驱动程序中就可以同时接收以该多播传送地址作为目的物理地址的数据帧,而其他主机的驱动程序却接收不到,这些主机在逻辑上便形成了一个“多播”组。

采用这种技术,相对广播而言,可有效减轻网络上“多播”组之外的其他主机的负担,因为发送给“多播”组的数据不会被传送到它们的驱动程序中去处理,避免资源的无谓浪费。最开始的时候,设计这一技术的目的是弥补“广播”(Broadcasting)通信的不足。

多播有两种实现方式:
1.设置网卡为混杂模式,然后通过驱动对收到的所有数据包进行过滤,留下指定的多播地址的数据包。
  这种方式效率比较低,适合不支持多播模式的网卡。(驱动过滤)
2.设置网卡为多播模式,网卡本身有多播过滤器,网卡自己能够判断进入的数据包是否属于多播数据。
  由于多播过滤是由硬件完成的,所以效率比较高。(网卡过滤)

网卡只接收目的地址为网卡自身物理地址多播地址(广播是多播的一种)的帧。对于以太网,多播的地址的最高字节的最低位为1(01:00:00:00:00:00)


对于IP多播,IP多播地址会转换成以太网多播地址,一个以太网多播地址可以对应多个IP多播地址。???

因此,设备驱动程序或IP层必须对数据报进行过滤,因为网卡可能收到主机不想接收的多播数据帧。当网卡不提供足够多播数据帧过滤功能时,就必须把网卡设置成“混杂模式”,由驱动检查收到的数据帧是否为主机需要的。
也就是说多播的两种实现模式,都需要由驱动程序参与过滤,只不过如果先由网卡过滤,可以减轻驱动程序的工作量。

 多播地址(multicast address)是一组主机的标示符,它已经加入到一个多播组中。在以太网中,多播地址是一个48位的标示符,命名了一组应该在这个网络中应用接收到一个分组的站点。在IPv4中,它历史上被叫做D类地址,一种类型的IP地址,它的范围从224.0.0.0到239.255.255.255。D类地址用于组播。

    Broadcast Address(广播地址)是专门用于同时向网络中所有工作站进行发送的一个地址。在使用TCP/IP 协议的网络中,主机标识段host ID 为全1 的IP 地址为广播地址,广播的分组传送给host ID段所涉及的所有计算机。例如,对于10.1.1.0 (255.255.255.0 )网段,其广播地址为10.1.1.255 (255 即为2 进制的11111111 ),当发出一个目的地址为10.1.1.255 的分组(封包)时,它将被分发给该网段上的所有计算机。

 

 

你可能感兴趣的:(网络编程)