考虑一个场景,某公司用远程视频会议软件开一个会议,BOSS在总部发言而其他分部员工接收视频,这时如果还是使用单播模式的话,总部的视频将通过网络传给每个分部员工,它有一个特点是有多少客户端就需要传送多少次,当客户端的数量越来越大时可能会导致网络阻塞,而且这种传送效率极低。于是引入了组播通信概念。
![](https://box.kancloud.cn/2016-01-15_5698bd8cf3da8.jpg)
如图,上为单播模式,S1向S2、S3和S4发送消息时必须发送三次,且每次都是从S1出发到各自目的地,传输效率低且浪费网络资源。下图为组播模式,S1向S2、S3和S4发送消息只需S1发送一次到路由器,连接S2、S3、S4客户端的路由器将负责往他们发送消息,解决了传输效率及浪费网络资源问题。
所以组播其实是为了优化单播在某些使用场景的局限性,它是一种一对多的传播方式,假如某个主机结点想接受相关的信息只需要向路由器或交换机申请加入某组即可,路由器或交换机在接受到相关信息后就会负责向组内所有成员发送信息,总结起来组播有以下特点:①节省不必要的网络资源;②有针对性地向组内成员传播;③可以在互联网上进行传播;④没有可靠传输协议导致数据不可靠。
组播中最重要的内容是如何维护路由器与主机之间的关系,其主要是通过IGMP协议进行维护,它主要维护不同路由器与不同主机之间的成员关系,具体的维护方式比较复杂,因为涉及到多个路由器且路由之间互相连接组成一个树状网络,而组内成员可能处于任何一个路由中,即树的任何树叶结点,所以需要复杂的算法去维护这些关系才知道信息要网哪发送。IGMP协议主要负责组成员的加入和退出、组内成员查询等功能,具体实现不再展开,只要明白使用组播就需要通过IGMP协议申请加入组成员才能接收组播出来的消息,而退出组后将接收不了消息。
组播相当于把主机与主机之间的通信压力转嫁到了路由器上面,所以要得到路由及网络的支持才能进行组播,整个传输过程中涉及的路由器或交换机都要支持组播,否则将无法使用组播通信。另外你的主机得支持组播,TCP/IP层面支持组播发送与接收。
在IP层面需要一个组播地址指定组播,它被称为D类地址,从224.0.0.0-239.255.255.255,这些地址根据范围大致分为局域网和因特网地址,224.0.0.0-244.0.0.255用于局域网,224.0.1.0-238.255.255.255用于因特网。Tomcat默认的组播地址为228.0.0.4,而Tomcat为何会涉及到组播则要归到集群的概念,因为集群涉及到内存的共享问题,所以需要使用组播进行内存同步,在集群相关章节将进行更加深入的探讨。
喜欢研究java的同学可以交个朋友,下面是本人的微信号:
![](https://box.kancloud.cn/2016-01-15_5698bd8d22882.jpg)