TCIP/IP协议:广播与多播

201 阅读6分钟

广播和多播

在了解广播之前,我们先了解下单播。单播是最基本的网络通讯形式,一台主机发送数据帧到另一台主机,两者间的通讯不会影响到网络的其他主机。而如果要将一个数据帧发给局域网上的所有主机要怎么办呢?如果依然采用单播的方式,发送端就要一一给网上的每台主机发送相同的数据帧,局域网有100台主机,就要发送100次。而有了广播,源主机只要发送一次数据帧,该数据就会送达网上的每一台主机,减少重复工作。但广播也有一个缺陷,就是它无脑往网上所有主机发送同一数据,这无疑增加了对此数据帧不感兴趣主机的处理负荷。而多播则介于两者之间,只把数据帧发送给关心它的多播组,一台主机可以加入一个或多个多播组,这样网卡将获悉该主机属于哪个多播组,然后仅接收主机所在多播组的那些数据帧。

主机过滤数据帧过程

网卡查看信道传送过来的数据帧,看该数据帧的目的地址是否为网卡物理地址或者广播地址,如果是才接收并传给设备驱动程序,否则的话就丢弃。设备驱动程序接收数据帧后会进行再次过滤,查看目的地址是否为多播组地址,是的话就解析并发送给网络上的多播组主机。主机收到数据帧后查看数据帧的协议,再传送给下一层协议,比如是数据帧协议类型为IP数据报时就转给IP层处理,是ARP的话转给ARP处理。IP层接收到数据报后,将会进行更多的监测,如果没问题就再次传给下一层协议UDP或TCP。

发送广播数据报过程

主机要发送一个广播数据报,创建一个IP数据报,源地址为本机IP地址,目的地址为指定网络的广播地址。假如某一个主机192.168.3.9,子网掩码为255.255.255.0,因此主机所在的子网广播地址为192.168.3.255。运行ping 192.168.3.255命令,这时主机会封装一个包含ICMP请求的IP数据报,源地址为本机IP地址,目的地址为192.168.3.255发送出去,数据链路层接着再将IP数据报封装为以太网数据帧,目的地址为链路层广播地址ff:ff:ff:ff:ff:ff。

四种广播地址

  • 受限的广播:受限的广播地址为255.255.255.255。该地址用于主机配置过程中IP数据包的目的地址,此时,主机可能还不知道它所在网络的网络掩码,甚至连它的IP地址也不知道。在任何情况下,路由器都不转发目的地址为受限的广播地址的数据报,这样的数据报仅出本地网络中。

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

  • 指向子网的广播:指向子网的广播地址为主机号全为1且有特定子网号的地址。如路由器收到发往128.1.2.255的数据报,且B类网络128.1(128开头的地址是B类网络)的子网掩码为255.255.255.0时,改地址就是指向子网的广播地址。

  • 指向所有子网的广播:指向所有子网的广播地址为子网号和主机号全为1的地址。例如,目的子网掩码为 255.255.255.0,那么128.1.255.255(128.1为网络号)就是一个指向所有子网的广播地址,而如果该网络不划分子网,则为指向网络的广播地址。

多播地址

多播组地址

多播组地址为D类地址,D类地址专用于多播地址。前4bit固定为1110,后28位为多播组ID,用点分十进制表示范围为224.0.0.0到239.255.255.255。就像指明端口号一样,多播组地址也有一些知名多播组地址,这些地址由IANA定义,如244.0.0.1代表“该子网内的所有系统组”,244.0.0.2代表“该子网内的所有路由器组”。

多播Mac地址

IANA拥有一个以太网地址块,前24位为00:00:5e(十六进制),也就是以太网地址范围为00:00:5e:00:00:00-00:00:5e:ff:ff:ff,把这些地址块划分给了多播以太网地址。且为了方便区分多播地址,规定以太网地址的首字节必须为01。因此多播以太网地址就为01:00:5e开头。

多播地址转换

多播组地址可以转化成多播MAC地址,就是将多播组地址的低23位映射到多播MAC地址的低23位。如果多播组地址为224.128.64.32(十六进制e0.80.40.20,低23位为00:40:20),则它的以太网地址为01:00:5e:00:40:20。转换后由于组地址的前9位被忽略了,所以转化后的多播MAC地址并不能唯一对应到一个多播组地址,这时就需要接收多播数据帧的主机作过滤处理了。

多播数据发送过程

一台主机会有多个接口,每个主机接口都可设置为是否接收广播数据帧或者只接收指定多播组的数据帧,在收到网卡送达的数据帧时就可该设置过滤数据帧。当一台主机发送一个数据报到多播组时,会创建一个IP数据报,源IP地址设为本机IP地址,目的IP地址设为多播组地址,然后就发送到数据链路层,经过设备驱动层将目的多播地址转换为多播MAC地址后,把IP数据报再封装为以太网数据帧,源MAC地址设为本机出口的MAC地址,目的MAC地址设为转换后的多播MAC地址,然后发送出去。局域网会将目的地址为多播地址的数据帧广播到局域网上所有主机,这时每一台主机与局域网直接相连的接口网卡会接收目的地址为多播地址的数据帧,再往上传给设备驱动层,而设备驱动层通过IGMP已经记录了本接口所加入的多播组,进而就可以判断本接口是否为送达数据帧的接收方。是的话才往上转发到对应模块,否则就会丢弃。