Android 局域网组播介绍

前言

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

组播

组播,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地址

你可能感兴趣的:(android,android,studio,Android)