一 IP多播的基本概念
IP多播(multicast,也被译为组播),它是一种一对多的通信方式。与单播相比,多播可以大大节约网络资源。
以视频流媒体服务为例说明单播和多播的区别,如图所示:
(a) 中使用的是单播方式,视频服务器向90台主机传送相同的视频内容,需要发送90个单播数据包,即同一个视频分组需要发送90个副本。
(b) 中使用的是多播方式,视频服务器只需要把视频分组当做多播数据包来发送,并且只需发送一次。路由器R1在转发分组时,需要把收到的分组复制成3个副本,分别向R2、R3、R4各转发一个副本。当分组到达目的局域网时,由于局域网具有硬件多播功能,因此不需要复制分组,在局域网上的多播组成员都能收到这个视频组分组。
可以发现,当多播组的主机数量很大时(如成千上万个),采用多播方式就能很明显地减轻网络中各种资源的消耗。在互联网范围的多播要靠多播路由器来实现,多播路由器运行能够识别多播数据报的软件。当然多播路由器也可以转发普通的单播IP数据包。
在互联网上进行多播传输就叫做IP多播。IP多播所传送的分组需要使用多播IP地址。
- 多播数据报与普通的单播IP数据报的区别
我们知道,在互联网中每一台主机必须有一个全球唯一的 IP 地址。如果某台主机现在想接收某个特定多播组的分组,那么怎样才能使这个多播数据报传送到这台主机呢?
显然,这个多播数据报的目的地址一定不能写入这台主机的 IP 地址。这是因为在同一时间可能有成千上万台主机加入到同一个多播组。多播数据报不可能在其首部写入这么多主机的 IP 地址。因此,在多播数据报的目的地址写入的是一个多播组标志符,然后设法让加入到这个多播组的主机的 IP 地址与多播组的标识符关联起来。
其实多播组的标识符就是 IP 地址中的D类地址。D类地址的前4位是1110,因此D类地址范围为:224.0.0.0 ~ 239.255.255.255。
我们使用每一个D类IP地址标识一个多播组。这样,D类地址一共可以标识2^28个多播组,也就是说,在同一时间允许有超过2.6亿的多播组在互联网上运行。多播数据报也是“尽最大努力交付”,不保证一定能够交付多播组内的所有成员。因此,多播数据报与一般的IP数据报的区别就是它使用D类IP地址作为目的地址,并且首部中的协议字段值是2,表明它使用的是网际组管理协议(IGMP)。
显然,多播地址只能用于目的地址,而不能用于源地址。此外,对多播数据报不产生ICMP(网际控制报文协议)差错报文。因此,若在 ping 命令后面键入多播地址,将永远不会收到响应。
IP 多播可以分为两种。一种是只在本地局域网上进行硬件多播,另一种则是在互联网的范围进行多播(IP多播)。前一种多播比较简单,但很重要,因为现在大部分主机都是通过局域网接入到互联网的。在互联网上进行多播的最后阶段,还是要把多播数据报在局域网上使用硬件多播交付给多播组的所有成员(如上图1(b)所示)。下面就先讨论这种硬件多播。
二 在局域网上进行硬件多播
IANA(互联网号码分配管理局)拥有的以太网地址块的高24位为00-00-5E,因此TCP/IP协议使用的以太网多播地址的范围为:
00-00-5E-00-00-00 ~ 00-00-5E-FF-FF-FF。而以太网的硬件地址(即MAC地址)字段中的第1个字节的最低位为1时即为多播地址。
因此,IANA拥有的以太网多播地址范围为:01-00-5E-00-00-00 ~ 01-00-5E-7F-FF-FF。如下图所示:
可以看到,每一个以太网地址中,只有23位可用作多播。这只能和D类IP地址中的23位有一 一对应关系。D类IP地址可供分配的有28位,可见在这28位中的前5位不能用来构成以太网硬件多播地址。
例如,IP多播地址224.128.64.32(即E0-80-40-20)和另一个IP多播地址224.0.64.32(即E0-00-40-20)转换成以太网的硬件多播地址都是01-00-5E-00-40-20。由于多播IP地址与以太网硬件多播地址的映射关系不是唯一的,因此收到多播数据报的主机,还要在IP层利用软件进行过滤,把不是本主机要接收的数据报丢弃。
三 网际管理协议IGMP和多播路由选择协议
IGMP(Internet Group Management Protocol) 网际组管理协议
在互联网上向多播组上的主机传送多播数据报,需要利用IGMP协议,IGMP使多播路由器知道多播组成员信息。示例如下:
IGMP协议并不是在互联网范围内对所有多播组成员进行管理的协议。IGMP不知道IP多播组包含的成员数,也不知道这些成员都分布在哪些网络上。IGMP协议是让连接在本地局域网上的多播路由器知道本地局域网是否有主机(严格讲,是主机的某个进程)参加或退出了某个多播组。
显然,仅有IGMP协议是不能完成多播任务的。连接在局域网上的多播路由器还必须和互联网上的其他多播路由器协调工作,以便把多播数据报以最小代价传送给所有的多播组成员。这就需要使用多播路由选择协议。
3.1 网际管理协议IGMP
IGMP最新版本的协议是IGMPv3 [RFC3376]
和网际控制报文协议ICMP协议相似,IGMP使用IP数据报传递其报文(即IGMP报文加上IP首部构成IP数据报)。
IGMP的工作分为两个阶段:
第1阶段:当某台主机加入新的多播组时,该主机应向多播组的多播地址发送一个IGMP报文,声明自己要成为该组的成员。
本地的多播路由器收到IGMP报文后,还有利用点播路由选择协议把这种组成员关系转发给互联网上的其他多播路由器。
第2阶段:由于多播组成员是动态的。本地多播路由器要周期性探询本地局域网上的主机,以便知道这些主机是否还继续是组成员。只要有一台主机对某个组响应了,那么多播路由器就认为该组仍是活跃的。但当一个组在经过多次的探询后仍然没有一台主机响应,多播路由器就认为本网络上的主机都已经离开这个多播组了,因此也就不再把这个组的成员关系转发给其他的多播路由器。
备注:IGMP的报文格式可以参阅文档 [RFC3376]。
3.2 多播路由选择协议
多播路由选择协议比单播路由选择协议要复杂得多,目前尚未标准化。
在多播过程中一个多播组中的成员是动态变化的。随时会有主机加入或者离开这个多播组。多播路由选择协议就是要找出以源主机为根节点的多播转发树。在多播转发树上,每一个多播路由器向树的叶子节点方向转发收到的多播数据报,但在多播转发树上的路由器不会收到重复的多播数据报(即多播数据报不应在互联网中兜圈子)。对不同的多播组对应不同的多播转发树。同一个多播组,对不同的源点也会有不同的多播转发树。
转发多播数据报的方法,主要有以下三种:
(1)洪泛与剪除。这种方法适用于较小的多播组,所有的组成员接入的局域网也是相邻接的。
(2)隧道技术(tunneling)。适用于多播组的位置在地理上比较分散的情况。
(3)基于核心的发现技术。适用于多播组的大小在很大范围内变化时的情况。
这种方法是对每一个多播组G指定一个核心(core)路由器,给出它的IP单播地址。
目前,还没有在整个互联网范围内使用的单播路由选择协议。下面是一些建议使用的多播路由选择协议。
- 距离向量多播路由选择协议 DVMRP(Distance Vector Multicast Routing Protocol) [RFC 1075]
- 基于核心的转发树 CBT(Core Based Tree) [RFC 2189, 2201]
- 开放最短通路优先的单播扩展 MOSPR(Multicast extensions to OSPF) 这个协议是单播路由选择协议OSPF的扩充,适用于一个机构内。[RFC 1585]
- 协议无关多播-稀疏方式 PIM-SM(Protocol Independent Multicast-Sparse Mode) [RFC 4601]
- 协议无关多播-密集方式 PIM-DM(Protocol Independent Multicast-Dense Mode) [RFC 3973]
参考
《计算机网络(谢希仁@第7版)》第4章 - 网络层:第4.7节 - IP多播