Loading...
墨滴

jasonj333

2021/03/26  阅读:13  主题:红绯

组播

数据源向特定的多个接收端发送相同的数据时,如果采用单播,数据源需要分多次发送。如果采用广播,广播域内所有主机都能收到。而如果采用组播,只需要发送一份数据给组播路由器,由组播路由器根据组播组复制多份,发送给组播组内的所有主机。由此可见,组播方式解决了单播情况下数据的重复拷贝及带宽的重复占用,也解决了广播方式下带宽资源的浪费

组播

组播,Multicast,又称多播,它允许把所发消息传送给所有可能目的地中的一个经过选择的子集,即向明确指出的多种地址输送信息。是一种在一个发送者和多个接收者之间进行通信的方法。

组播类似于微信群聊,用户申请加入微信群,发送方发信息到微信群,微信群内所有用户收到相同的信息

微信群发的发送方也处于微信群中
微信群发的发送方也处于微信群中

微信群发和组播不是完全相同,微信群发的发送方也需要申请加入微信群,而组播的数据源并不需要如此,但是大致的模式是这样

根据上图,数据源是主机,用户是主机,那中间的组播组呢?是什么承载了组播组?

是组播路由器,用户根据IGMPv2协议发送请求报文,路由器收到IGMP报文后,把用户加入自己的组播组。组播报文到达路由器时,也是路由器根据组播组复制多份发给组内的主机

这里我们说的是路由器收到IGMP报文,而不是发给路由器,要明白区别所在

为什么这么说?

因为IGMP报文的目的ip地址只可能是一个,而从数据源到用户之间可能经历N多的路由器,用户必须加入从数据源到用户这条路径上的所有路由器的组播组,如果想实现这个功能,可以把IGMP报文发给数据源,那么IGMP必定经过这条路径上的所有路由器

为什么要让用户加入路径上的所有路由器的组播组?

因为数据源发组播报文时,组播报文会经过路径上的所有路由器转发,这些路由器的组播组里必须要有用户,才能正确地发出去

所以用户首先要做的就是发IGMP报文给数据源,发送报文给目的主机需要知道它的IP地址,那用户知道数据源的IP地址吗?

RP

想象一下家里的电视收看电视频道CCTV-1,电视只知道这个频道对应的IP地址是238.1.1.1,你并不知道是谁在往这个频道上发送数据,也就是说你并不知道数据源是谁,IP是多少。但是你还是能收看数据源发到这个频道的节目,怎么办到的?Rendezvous Point,简称RP点

RP

Rendezvous Point,集中点,就像是中介机构一样,虽然用户不知道数据源的IP地址,但是可以让数据源知道RP点的IP地址,可以让用户知道RP点的IP地址,让RP在用户和数据源之间架起一座桥梁

如何获取数据源IP

  • 组播源把组播238.1.1.1封装在一个单播(源ip是1.1.1.1,目的ip2.2.2.2)发给RP,称为组播源的单播注册
  • 接收端发一个IGMP请求给RP
  • RP收到后,把数据源发给RP的单播复制一份,发给接收端
  • 接收端收到这条报文,发现源ip是1.1.1.1,就取到了数据源的ip地址

如何实现组播

  • 接收端发IGMP报文给组播源,经过的所有路由器都会把接收端加入组播组238.1.1.1
  • 组播源发送数据,目的IP是组播IP 238.1.1.1
  • 路由器收到数据,具体发给谁,由路由器的OIL(outgoing interface list)来维护

二层组播这里没有涉及到

组播地址

组播并不像单播,有一个明确的目的主机和IP地址,也不像广播,局域网内的所有主机都是目的主机,广播IP地址也明确(主机标识全部置为1)。组播不同,它并不知道要把信息发给谁,因为谁都可能随时加入组播组,谁都可能随时离开,不可能用某一个主机的IP地址作为组播地址

组播IP

组播不可能以某一个主机的IP作为自己的目的IP,但是以太网报文在封装时必须要填入目的IP

怎么办?

回想一下,组播IP不能以某个主机的IP作为自己的目的IP,换句话说,组播IP不需要考虑主机标识,哪个类型的IP地址没有主机标识,D类

由于224.0.0.0/24用于本地链路,239.0.0.0/8为私有组播地址,所以实际可用的组播地址为225.0.0.0/8 - 238.0.0.0/8

组播MAC

同样地,组播报文在数据链路层需要填充目的MAC地址,如何填充正确的MAC地址呢?

单播报文在填入目的MAC时,会通过ARP协议根据目的IP询问目的主机的MAC地址,而组播由于目的IP并不是某个主机的IP,所有无法用ARP协议询问目的MAC。既然ARP寻址方式行不通,组播MAC地址有自己的转换方式

组播IP映射为组播MAC

虽然无法ARP寻址,但是可以借鉴通过目的IP寻找目的MAC的方式,把组播IP映射为组播MAC

IEEE对MAC地址定义:MAC地址的第一个八位组的bit0指明了目标地址是广播/组播地址,还是单播地址

所以在对网卡设置MAC地址时,这一位千万不能设置成1

对于以太网而言,组播MAC地址以0x 01 00 5E为前缀,剩下的24位可以被组播使用,通过把组播IP映射到这24位

如何映射?

组播IP的前四位固定1110,剩下的28位才是有用的信息,而这28位由于某些原因,我们需要把前5位扔掉,取后23位,映射到组播MAC地址的后24位

至于为什么只取23位,有一个有趣的历史


jasonj333

2021/03/26  阅读:13  主题:红绯

作者介绍

jasonj333