IP多播是需要在互联网上增加更多的智能才能提供的一种服务。现在IP多播(multicast)已成为互联网的一个热门课题。
这是由于有许多的应用需要由一个源点发送到许多个终点,即一对多的通信。例如,实时信息的交付(如新闻、股市行情等)、软件更新、交互式会议等。随着互联网的用户数目的急剧增加,以及多媒体通信的开展,有更多的业务需要多播来支持。
与单播相比,在一对多的通信中,多播可大大节约网络资源。
当多播组的主机数很大时,采用多播方式就可明显地减轻网络中各种资源的消耗。
在互联网范围的多播要靠路由器来实现,这些路由器必须增加一些能够识别多播数据报的软件。能够运行多播协议的路由器称为多播路由器。多播路由器当然也可以转发普通的单播IP数据报。
在互联网上进行多播就叫作IP多播。IP多播所传送的分组需要使用多播IP地址。我们知道,在互联网中每一台主机必须有一个全球唯一的IP地址。如果某台主机现在想接收某个特定多播组的分组,那么怎样才能使这个多播数据报传送到这台主机?
显然,这个多播数据报的目的地址一定不能写入这台主机的IP地址。这是因为在同一时间可能有成千上万台主机加入到同一个多播组。多播数据报不可能在其首部写入这样多的主机的IP地址。在多播数据报的目的地址写入的是多播组的标识符,然后设法让加入到这个多播组的主机的IP地址与多播组的标识符关联起来。
其实多播组的标识符就是IP地址中的D类地址。D类IP地址的前四位是1110
,因此D类地址范围是224.0.0.0
到239.255.255.255
。我们就用每一个D类地址标志一个多播组。这样,D类地址共可标志 2 28 2^{28} 228个多播组,也就是说,在同一时间可以允许有超过2.6亿的多播组在互联网上运行。多播数据报也是“尽最大努力交付”,不保证一定能够交付多播组内的所有成员。
因此,多播数据报和一般的IP数据报的区别就是它使用D类IP地址作为目的地址,并且首部中的协议字段值是2,表明使用网际组管理协议IGMP。
显然,多播地址只能用于目的地址,而不能用于源地址。此外,多播数据报不产生ICMP差错报文。因此,若在PING命令后面键入多播地址,将永远不会收到响应。
IP多播可以分为两种。
前一种虽然比较简单,但很重要,因为现在大部分主机都是通过局域网接入到互联网的。在互联网上进行多播的最后阶段,还是要把多播数据报在局域网上用硬件多播交付多播组的所有成员。下面就先讨论这种硬件多播。
IANA(互联网号码分配管理局)拥有的以太网地址块的高24位为00-00-5E
,因此TCP/IP协议使用的以太网多播地址的范围为:
00-00-5E-00-00-00 ~ 00-00-5E-FF-FF-FF
以太网的硬件地址(MAC地址)字段中的第1个字节的最低位为1时即为多播地址,这种多播地址数占IANA分配到的地址数的一半。但IANA只拿出23个地址,即如下范围的地址作为以太网多播地址。
01-00-5E-00-00-00 ~ 01-00-5E-7F-FF-FF
或者说,在48位的多播地址中,前25位都固定不变,只有后23位可用作多播。
但D类IP地址可供分配的有28位。这28位中只有后23位才映射以太网多播地址中的后23位,因此是多对一的映射关系(如下图所示),即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数据报首部的IP地址进行过滤,把不是本主机要接收的数据报丢弃。
下图是在互联网上传送多播数据报的例子。
图中标有IP地址的四台主机都参加了一个多播组,其组地址是226.15.37.123
。显然,多播数据报应当传送到路由器R1,R2和R3,而不应当传送到路由器R4,因为与R4连接的局域网上现在没有这个多播组的成员。但这些路由器又怎样知道多播组的成员信息呢?
这就要利用一个协议,叫作网际组管理协议IGMP(Internet Group Management Protocol)。
上图强调了IGMP的本地使用范围。但IGMP并非在互联网范围内对所有多播组成员进行管理的协议。
IGMP不知道IP多播组包含的成员数,也不知道这些成员都分布在哪些网络上。IGMP协议是让连接在本地局域网上的多播路由器知道本局域网上是否有主机参加或退出了某个多播组。
显然,仅有IGMP协议是不能完成多播任务的。连接在局域网上的多播路由器还必须和互联网上的其他多播路由器协同工作,以便把多播数据报用最小代价传送给所有的组成员。这就需要使用多播路由选择协议。
然而多播路由选择协议要比单播路由选择协议复杂得多。我们可以通过一个简单的例子来说明。
我们假定下图中有两个多播组。多播组M1的成员有主机A,B和C,而多播组M2的成员有主D,E和F。这些主机分布在三个网络上(N1,N2和N3)。
路由器R不应当向网络N3转发多播组M1的分组,因为网络N3上没有多播组M1的成员。但是每一台主机可以随时加入或离开一个多播组。例如,如果主机G现在加入了多播组M1,那么从这时起,路由器R就必须也向网络N3转发多播组M1的分组。这就是说,多播转发必须动态地适应多播组成员的变化(这时网络拓扑并未发生变化)。
单播路由选择通常在网络拓扑发生变化时才需要更新路由。
再看一种情况。主机E和F都是多播组M2的成员。当E向F发送多播数据报时,路由器R把这个多播数据报转发到网络N3。但当F向E发送多播数据报时,路由器R则把多播数据报转发到网络N2。如果路由器R收到来自主机A的多播数据报(A不是多播组M2的成员,但也可向多播组发送多播数据报),那么路由器R就应当把多播数据报转发到N2和N3。由此可见,多播路由器在转发多播数据报时,不能仅仅根据多播数据报中的目的地址,而是还要考虑这个多播数据报从什么地方来和要到什么地方去。
还有一种情况。主机G没有参加任何多播组,但G却可向任何多播组发送多播数据报。例如,G可向多播组M1或M2发送多播数据报。主机G所在的局域网上可以没有任何多播组的成员。显然,多播数据报所经过的许多网络,也不一定非要有多播组成员。总之,多播数据报可以由没有加入多播组的主机发出,也可以通过没有组成员接入的网络。
IGMP已经有了三个版本。IGMP最新版本的协议是IGMPv3。
和网际控制报文协议ICMP相似,IGMP使用IP数据报传递其报文(即IGMP报文加上IP首部构成IP数据报),但它也向IP提供服务。因此,我们不把IGMP看成是一个单独的协议,而是属于整个网际协议IP的一个组成部分。
从概念上讲,IGMP的工作可分为两个阶段。IGMP的工作分为两个阶段:
为了避免了多播控制信息给网络增加大量的开销,IGMP采用的一些具体措施如下:
如果一台主机上有多个进程都加入了某个多播组,那么这台主机对发给这个多播组的每个多播数据报只接收一个副本,然后给主机中的每一个进程发送一个本地复制的副本。
注意:多播数据报的发送者和接收者都不知道(也无法找出)一个多播组的成员有多少,以及这些成员是哪些主机。互联网中的路由器和主机都不知道哪个应用进程将要向哪个多播组发送多播数据报,因为任何应用进程都可以在任何时候向任何一个多播组发送多播数据报,而这个应用进程并不需要加入这个多播组。
多播路由选择协议比单播路由选择协议要复杂得多,目前尚未标准化。
在多播过程中一个多播组中的成员是动态变化的。随时会有主机加入或者离开这个多播组。多播路由选择协议就是要找出以源主机为根节点的多播转发树。
在多播转发树上,每一个多播路由器向树的叶子节点方向转发收到的多播数据报,但在多播转发树上的路由器不会收到重复的多播数据报(即多播数据报不应在互联网中兜圈子)。不难看出:
转发多播数据报的方法,主要有以下三种:
(1)洪泛与剪除
这种方法适用于较小的多播组,所有的组成员接入的局域网也是相邻接的。
一开始,路由器转发多播数据报使用洪泛的方法(这就是广播)。为了避免兜圈子,采用了叫作反向路径广播RPB的策略。
RPB的要点是:每一个路由器在收到一个多播数据报时,先检查数据报是否是从源点经最短路径传送来的。进行这种检查很容易,只要从本路由器寻找到源点的最短路径上的第一个路由器是否就是刚才把多播数据报送来的路由器。
如果本路由器有好几个相邻路由器都处在到源点的最短路径上(也就是说,存在几条同样长度的最短路径),那么只能选择一条最短路径,选择的准则就是看这几条最短路径中的相邻路由器谁的IP地址最小。下图可以说明这一概念:
为简单起见,上图中的网络用路由器之间的链路来表示。我们假定各路由器之间的距离都是1。
- 路由器R1收到源点发来的多播数据报后,向R2和R3转发。
- R2发现R1就在自己到源点的最短路径上,因此向R3和R4转发收到的数据报。
- R3发现R2不在自己到源点的最短路径上,因此丢弃R2发来的数据报。
- 其他路由器也这样转发。
- R7到源点有两条最短路径:
R7→R4→R2→R1→源点
和R7→R5→R3→R1→源点
。我们再假定R4的IP地址比R5的IP地址小,所以我们只使用前一条最短路径。因此R7只转发R4传过来的数据报,而丢弃R5传过来的数据报。
最后就得出了用来转发多播数据报的多播转发树(图中用粗线表示),以后就按这个多播转发树来转发多播数据报。这样就避免了多播数据报兜圈子,同时每一个路由器也不会接收重复的多播数据报。
如果在多播转发树上的某个路由器发现它的下游树枝(即叶节点方向)已没有该多播组的成员,就应把它和下游的树枝一起剪除。例如,在图中虚线椭圆表示剪除的部分。当某个树枝有新增加的组成员时,可以再接入到多播转发树上。
(2)隧道技术
适用于多播组的位置在地理上比较分散的情况。
例如在下图中,网N1和网N2都支持多播。现在N1中的主机向N2中的一些主机进行多播。但路由器R1和R2之间的网络并不支持多播,因而R1和R2不能按多播地址转发数据报。为此,路由器R1就对多播数据报进行再次封装,即再加上普通数据报首部,使之成为向单一目的站发送的单播数据报,然后通过“隧道”从R1发送到R2。
单播数据报到达路由器R2后,再由路由器R2剥去其首部,使它又恢复成原来的多播数据报,继续向多个目的站转发。这种使用隧道技术传送数据报又叫作IP中的IP(IP-in-IP)。
(3)基于核心的发现技术
适用于多播组的大小在很大范围内变化时的情况。
这种方法是对每一个多播组G指定一个核心路由器,给出它的IP单播地址。
核心路由器按照前面讲过的方法创建出对应于多播组G的转发树。如果有一个路由器R1向这个核心路由器发送数据报,那么它在途中经过的每一个路由器都要检查其内容。当数据报到达参加了多播组G的路由器R2时,R2就处理这个数据报。
这样,参加到多播组G的路由器就从核心向外增多了,扩大了多播转发树的覆盖范围。
目前,还没有在整个互联网范围内使用的单播路由选择协议。下面是一些建议使用的多播路由选择协议。
采用“协议无关”这个名词是强调:虽然在建立多播转发树时是使用单播数据报来和远程路由器联系的,但这并不要求使用特定的单播路由选择协议。