计算机网络-4-11-IP多播

IP多播

IP多播的基本概念

与单播相比,在一对多的通信中,多播可以大大减少网络资源。在互联网上进行多播就叫做IP多播,IP多播所传送的分组需要使用多播IP地址。能够运行多播协议的路由器叫做多播路由器,当然多播路由器也可以转发普通的IP数据报。

在互联网中的每一台主机都必须有一个全球唯一的IP地址,如果某台主机现在想接受某个特定多播组的分组,那么怎样才能使这个多播数据报传送到这台主机呢?

其实多播组的标识符就是 IP 地址中的 D 类地址。D 类 IP 地址的前四位是 1110,因此D 类地址范围是 224.0.0.0 到 239.255.255.255。我们就用每一个 D 类地址标志一个多播组。这样,D 类地址共可标志 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。在第3章讲过,以太网硬件地址字段中的第 1 字节的最低位为 1 时即为多播地址,这种多播地址数占 IANA 分配到的地址数的一半。因此 IANA 拥有的以太网多播地址的范围是从01-00-5E-00-00-00到01-00-5E-FF-FF-FF。不难看出,在每一个地址中,只有23位可用作多播。这只能和D类IP 地址中的23位有一一对应的关系。D类 IP 地址可供分配的有 28 位,可见在这 28 位中的前 5 位不能用来构成以太网硬件地址(图 4-54)。例如,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 层三利 片用软件进滤,把不是本主机要接收的数据报丢弃。

image

下面就讨论IP多播所需要的协议

网际组管理协议IGMP和多播路由选择协议

IP多播需要两种协议

如图4-55是互联网传送多播数据的例子。图中标有IP地址的四台主机都参加了一个多播组,其地址是226.15.37.123。显然多播数据报应当传送到路由器R1、R2、R3,而不是R4,因为R4连接的局域网并没有成员接入到多播组中。但这些路由器又怎么知道多播组的成员呢?这就要利用一个协议,叫做网际组管理协议IGMP(Internet Group Managerment Protocol)

image

图 4-55 强调了 IGMP 的本地使用范围。请注意,IGMP 并非在互联网范围内对所有多播组成员进行管理的协议。IGMP 不知道 IP 多播组包含的成员数,也不知道这些成员都分布在哪些网络上,等等。IGMP 协议是让连接在本地局域网上的多播路由器知道本局域网上是否有主机(严格讲,是主机上的某个进程)参加或退出了某个多播组。

显然,仅有 IGMP 协议是不能完成多播任务的。连接在局域网上的多播路由器还必须和互联网上的其他多播路由器协同工作,以便把多播数据报用最小代价传送给所有的组成员。这就需要使用多播路由选择协议。

网际组管理协议IGMP

与网际控制报文协议ICMP类似,IGMP使用IP数据报传送报文(即在IGMP首部加上IP数据首部构成了IP数据报),但它也向IP提供服务。因此,我们不能把IGMP看成是一个单独的协议,而是属于整个网际协议IP的一个组成部分。从概念上来讲,IGMP的工作可分为两个阶段:

  1. 第一个阶段:当某台主机加入新的多播组的时候,该主机应向多播组的多播地址发送一个IGMP报文,声明自己要成为该组的成员。本地的多播路由器收到IGMP报文后,还要利用多播路由选择协议把这种组成员关系转发给互联网上的其它多播路由器。

  2. 第二个阶段:组成员关系是动态的。本地多播路由器要周期性地探询本地局域网上的主
    机,以便知道这些主机是否还继续是组的成员。只要有一台主机对某个组响应,那么多播路由器就认为这个组是活跃的。但一个组在经过几次的探询后仍然没有一台主机响应,多播路由器就认为本网络上的主机已经都离开了这个组,因此也就不再把这个组的成员关系转发给其他的多播路由器。

IGMP协议设计的很仔细,避免了多播控制信息给网络增加大量的开销,IGMP采用的具体措施如下:

  1. 主机和多播路由器之间的所有通信都是使用IP多播。只要有可能,携带IGMP报文的数据报都用硬件多播来传送。因此在支持硬件多播的网络上,没有参加IP多播的主机不会接收到IGMP报文。

  2. 多播路由器在探询组成员关系时,只需要对所有的组发送一个请求信息的询问报文,而不需要对每一个组发送一个询问报文(虽然也允许对一个特定组发送询问报文)。默认的询问速率是每 125 秒发送一次(通信量并不太大)。

  3. 当同一个网络上连接有几个多播路由器时,它们能够迅速和有效地选择其中的一个来探询主机的成员关系。因此,网络上多个多播路由器并不会引起IGMP通信量的增大。

  4. 在 IGMP 的询问报文中有一个数值 N,它指明一个最长响应时间(默认值为 10秒)。当收到询问时,主机在 0 到 N 之间随机选择发送响应所需经过的时延。因此,若一台主机同时参加了几个多播组,则主机对每一个多播组选择不同的随机数。对应于最小时延的响应最先发送。

  5. 同一个组内的每一台主机都要监听响应,只要有本组的其他主机先发送了响应,自己就可以不再发送响应了。这样就抑制了不必要的通信量。

多播路由器并不需要保留组成员关系的准确记录,因为向局域网上的组成员转发数据报是使用硬件多播。多播路由器只需要知道网络上是否至少还有一台主机是本组成员即可。实际上,对询问报文每一个组只需有一台主机发送响应。

如果一台主机上有多个进程都加入了某个多播组,那么这台主机对发给这个多播组的每个多播数据报只接收一个副本,然后给主机中的每一个进程发送一个本地复制的副本。最后我们还要强调指出,多播数据报的发送者和接收者都不知道(也无法找出)一个多播组的成员有多少,以及这些成员是哪些主机。互联网中的路由器和主机都不知道哪个应用进程将要向哪个多播组发送多播数据报,因为任何应用进程都可以在任何时候向任何一个多播组发送多播数据报,而这个应用进程并不需要加入这个多播组。

多播路由选择协议

虽然TCP/IP中IP多播协议已经成为了建议标准,但多播路由选择协议尚未标准化。

在多播过程中,一个多播组的成员是动态变化的。多播路由选择协议实际上是找出以源主机为根节点多播转发树,在多播转发树上,每一个多播路由器向树的叶节点方向转发收到的多播数据报,但在多播转发树上的多播路由器上不会收到重复的多播数据报(即多播数据报不会在互联网中兜圈子)。不难看出,对于不同的多播组对应于不同的多播转发树,同一个多播组,对不同的源点也会有不同的多播转发树。

已有了多种实用的多播路由选择协议,它们在转发多播数据报的时候使用了以下三种方法:

  1. 洪泛与剪除:这种方法适用于较小的多播组,而所有的组成员接入的局域网也是相邻的。一开始,路由器转发多播数据报使用的是洪泛的方法(也就是广播)。为了避免兜圈子,采用了叫做反向广播路径RPB(Reverse Path Broadcasting)的策略。RPB的要点是:每一个路由器在收到一个多波数据报的时候,先检查数据报是否从源点经最短路径传来,进行这种检查很容易,只要从本路由器寻找到源点的最短路径上(之所以叫做反向路径,因为在计算最短路径的时候把源点当做终点)的第一个路由器是否就是刚才把多播数据报送来的路由器。若是,就向所有其他地方转发刚才收到的多播数据报(进入的方向除外),否则就丢弃而不转发。如果本路由器有好几个相邻路由器都处在源点的最短路径上(也就是说,存在多条同样长度的最短路径),那么只能选择一条最短路径,选择的转则是看这几条最短路径中谁的IP地址最小吗,如图4-57:

image

为了简单起见,在图4-57中的网络用路由器之间的链路来表示,我们假定各路由器之间的距离都是1。路由器R1在收到源点发来的多播数据报之后,向R2和R3进行转发。R2发现R1就在自己到源点的最短路径上,因此向R3和R4转发收到的多播数据报,R3发现R2不在自己的源点的最短路径上,因此丢弃R2发送过来的数据报。其他路由器也照样转发。R6到源点有两条最短路径:R7->R4->R2->R1->源点;R7->R5->R3->R1->源点。我们假定R4的IP地址比R5的IP小,所以我们只使用前一条最短路径。因此R7只转发R4发过来的IP数据报。而丢弃R5传过来的数据报。最后就得到了用来转发多播数据报的多播转发树(图中粗线),以后就按照这个多播转发树来转发多波数据报。这样就避免了多播数据报兜圈子问题。

如果在多播转发树上的某个路由器发现它的下游树枝(即叶节点方向)已没有该多播组成员,就应该把它和下游的树枝一起剪除,例如,在图4-57中虚线椭圆表示剪除的部分,当某个树枝有新增加的组成员的时候,可以再接入到多播转发树上。

  1. 隧道技术(tunneling):隧道技术适用于多播组的位置在地理上很分散的情况。例如在图4-58中,网1和网2都支持多播,现在网1的一些主机向网2的一些主机进行多播。但路由器R1和R2之间的网络并不支持多播,因而R1和R2路由器不能按多播地址进行转发数据报。为此。R1路由器就对多播数据报进行再封装,再加上普通数据报首部,使之成为一个向单一目的站发送的单播(unicast)数据报,然后通过隧道(tunnel)从R1发送到R2。

image

单播数据报到达路由器R2后,再由路由器R2剥去其首部,使之又恢复成原来的多播数据报,继续向多个目的站进行转发。使用隧道技术传送数据报又叫做IP中的IP(IP in IP)。

  1. 基于核心的发现技术:这种方法对于多播组的大小在较大范围内变化都合适。这种方法是对每一个多播组G指定一个核心路由器,给出它的IP单播地址。核心路由器按照前面讲过的方法创建出对应于多播组G的转发树。如果有一个路由器R1向这个核心路由器发送数据报,那么它在途中经过的每一个路由器都要检查其内容。当数据报到达参加了多播组G2的组地址时候,R2就向多播组G的成员转发这个多波数据报。如果R1发送的数据报是一个请求加入多播组G的数据报,R2就把这个信息加到它的路由中,并用隧道技术向R1转发每一个多播数据报副本。这样,参加组G的路由器就从核心向外增多了。扩大了多播转发树的范围。
posted @ 2022-01-06 12:04  LilyFlower  阅读(1272)  评论(0编辑  收藏  举报