组播简介
前言
“数据源向特定的多个接收端发送相同的数据时,如果采用单播,数据源需要分多次发送。如果采用广播,广播域内所有主机都能收到。而如果采用组播,只需要发送一份数据给组播路由器,由组播路由器根据组播组复制多份,发送给组播组内的所有主机。由此可见,组播方式解决了单播情况下数据的重复拷贝及带宽的重复占用,也解决了广播方式下带宽资源的浪费”
组播
组播,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)来维护
二层组播这里没有涉及到
更多汽车网络诊断内容,请关注:汽车网络诊断通信