什么是组播通信?组播通信是一种一对多的通信方式,组播报文(目的IP地址为组播IP地址的报文)发向一组接收者,这些接收者需要加入到相应的组播组中才会收到发往该组播组的报文。
针对某个特定的组播组,即使网络中存在多个接收者,对于组播源而言,每次也只需发送一份报文,网络中的组播转发设备负责拷贝组播报文并向有需要的接口转发。一般而言,网络设备在收到组播报文后,缺省并不会对其进行转发,这些设备需要激活组播路由功能,并且维护组播路由表项,然后依据这些表项对组播报文进行合理转发。因此,组播流量的传输,需要一个组播网络来承载。
在图1中,Server是一台多媒体服务器,而PC1、PC2、PC3及PC4是网络中的主机。现在Server开始播放视频,用户期望在PC1、PC2及PC3上实时收看Server所播放的视频。
图1 PC1、PC2及PC3期望看到Server直播的视频节目
这是一种典型的一对多的通信模型。简单地说,在每一个时刻,Server需要将相同的数据同时发送给多个接收者。如果采用单播的方式来实现上述需求,那么由于网络中存在多个接收者,对于Server而言,就需要为每个接收者各创建一份数据,每一份数据都被发往一台单独的PC(如图2所示)。
设想一下如果网络中存在大规模的接收者,那么Server就不得不每次都创建大量的数据拷贝,而且每份拷贝的内容是完全相同的,只是目的IP地址各不相同,这显然是极其低效的,同时也造成了链路带宽及设备性能的浪费。不仅如此,Server在发送数据前,还需要明确所有接收者的IP地址,否则它将无法构造数据包,而如果用户要求PC可以自由地接入或离开,或者PC的IP地址并不固定,那么显然单播通信在该场景中就不适用了。
图2 Server为三个接收者分别创建一份报文,而报文的内容是相同的
如果Server采用广播的方式发送这些数据,那么所有的接收者就不得不与Server处在相同的广播域内,因为广播报文在网络中的泛洪范围非常有限。再者从网络优化角度考虑,广播流量又是应该尽可能被减少的,毕竟,这些流量会造成其他设备不必要的性能损耗,因此在这种场景中使用广播通信显然并非最佳方案。
接下来看看组播是如何解决这个问题的。当Server开始播放视频时,组播报文从Server源源不断地被发送出来,无论网络中存在多少接收者,Server每次都仅需发送一份数据。
Server发出的组播报文的源IP地址是192.168.100.1,而目的IP地址则是组播IP地址(此处以224.1.1.1为例)。如图3所示,Server发送的组播报文到达路由器R1后,R1将组播报文进行拷贝,然后将组播报文从有需要的接口转发出去(给R2及R3),至于不需要该报文的接口,路由器是不会向其转发组播报文的。
R2及R3收到组播报文后,继续进行拷贝及转发,直到报文到达接收者。只有加入组播组224.1.1.1的接收者才会收到这些组播报文。PC1、PC2及PC3需要通过某种机制宣告自己加入组播组224.1.1.1。
组播源并不关心一个组播组中存在多少个接收者,或者这些接收者处于网络中的什么位置、它们的IP地址是什么,它只管将组播报文发送出去,组播网络设备负责将组播报文根据需要进行拷贝及转发。
在图3中,没有加入组播组224.1.1.1的PC4是不会收到组播流量的,事实上R5并没有连接任何接收者,因此它自己也不会收到发往该组播组的流量,R3及R4不会将组播流量转发给它。
图3 Server不需要为每一个接收者单建报文,它每次只需发送一份报文即可,网络中的组播设备会对组播报文进行拷贝并转发到需要该报文的接口组播技术适用于一对多的通信场景,在多媒体直播、在线会议、股票金融等领域有着广泛的应用。