Alex_McAvoy

想要成为渔夫的猎手

IP 组播

【概述】

对于 IP 数据报来说,有三种通信方式:

  • 单播:点对点通信,发送数据报到单个目的地,每次发送都使用单播 IP 作为目的地址
  • 广播:点对多点通信,发送数据报到同一广播域,子网中所有设备都会收到数据
  • 组播(多播):某些用户需要数据时,发送方仅发送一次数据,借助组播路由协议为数据报建立组播分发树,被传送的数据到达距离用户端尽可能近的结点后复制、分发

对于视频点播、视频会议这样的多媒体应用,要将一个分组发送给多个目的主机,如果每个目的主机都要发送一个 IP 数据报,这无疑会引起大量的处理开销与太多的网络通信量

因此,可以令这些目的主机的 IP 地址用一组地址来标识,发送方仅发送时仅发送一份数据,只有数据在传送路径出现分岔时才将分组复制后继续转发,这样对于发送者而言,数据只需要发送一次就可以发送给所有的接受者,极大的减轻了网络负载与发送方的负担

单播与组播的比较示意图如下

【IP 组播的特点】

IP 组播具有如下特点:

  • 组播地址仅可作为目的地址,不能采用源地址(源地址采用单播地址)
  • 对组播数据报不产生 ICMP 差错报文,因此若在 PING 命令后键入组播地址,将永远不会收到响应
  • 组播是基于 UDP 的,其尽最大努力交付,不提供可靠交付
  • 组播分为在本局域网上的硬件组播、在因特网上的组播
  • 组播地址永久不变,由因特网号码指派管理局 IANA 负责指派
  • 组播的组成员是动态的,一个主机可以选择加入或离开一个组,也可以同时属于多个组
  • 组播数据报使用的 D 类 IP 地址仅作为目的地址(源地址为单播地址),且首部中的协议字段值为 $2$,表明使用 IGMP 协议

【IP 组播地址】

IP 组播分为在本局域网上进行的硬件组播和在因特网范围内的因特网组播,但在因特网组播的最后阶段,还是要将组播数据报在局域网上将硬件组播交付给组播组内的所有成员

在 IPv4 中,组播地址在 D 类地址空间中分配,在 IPv6 中,保留了一部分地址空间用于组播地址,这里仅介绍 IPv4 下的组播

因特网组播采用的是 D 类地址,其前四位是 1110,故而其地址范围从 224.0.0.0239.255.255.255,每一个 D 类 IP 地址,都标识了一个组播组

对于硬件组播来说,因特网号码指派管理局 IANA 所拥有的以太网组播地址范围从 01-00-5E-00-00-0001-00-5E-7F-FF-FF,可以发现,给出的每一个地址,只有 $23$ 位可用于组播

由于因特网组播最终要利用硬件组播将组播数据报交付给组播组内的所有成员,因此,对于 IANA 给出的硬件组播地址,与因特网组播中利用的 D 类 IP 地址存在一定的映射关系

由于硬件组播给出的地址只有 $23$ 位用于组播,而 D 类 IP 地址除去前 $4$ 位外,还剩余 $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 协议】

概述

因特网组管理协议(Internet Group Management Protocol,IGMP),是目前最常用组播协议,主机通过运行该协议加入组播组,路由器通过该协议来扩展路由选择与分组转发,从而于因特网上其他组播路由器协同工作,以最小代价将组播数据报传送给所有的组成员

IGMP 并非在因特网范围内对所有多播组成员进行管理的协议,其并不知道 IP 组播组包含的成员数,也不知道这些成员都分布在哪些网络上,只是让连接在本地局域网上的组播路由器知道本局域网上是否有主机参加或退出了某个组播组

组播转发必须动态地适应组播组成员的变化,组播路由器在转发组播数据报时,不能仅仅根据组播数据报中的目的地址,而是还要考虑这个组播数据报从什么地方来和要到什么地方去

组播数据报可以由没有加入组播组的主机发出,也可以通过没有组成员接入的网络

基本原理

IGMP 可视为 TCP/IP 的一部分,其工作过程可分为两个阶段:

1.阶段一

当某个主机加入新的组播组时,该主机应向组播组的组播地址发送IGMP 报文,声明自己要成为该组的成员,本地的组播路由器收到 IGMP 报文后,将组成员关系转发给因特网上的其他组播路由器

2.阶段二

由于组成员关系是动态的,因此本地多播路由器要周期性探询本地局域网上的主机,以便知道这些主机是否还继续是组的成员,默认每 $125$ 秒探询一次

只要对某个组有一个主机响应,那么多播路由器就认为这个组是活跃的

但一个组在经过几次的探询后仍然没有一个主机响应,则不再将该组的成员关系转发给其他的多播路由器

【组播的路由选择与分组转发】

路由选择

组播路由选择协议尚未标准化,由于一个组播组中的成员是动态变化的,随时会有主机加入或离开这个多播组

因此,组播路由选择实际上就是要找出以源主机为根结点的组播转发树,其中每一分组在每条链路上只传输一次,即组播转发树上的路由器不会收到重复的组播数据报,可见,组播转发树很好的避免了路由环路问题

对于不同的组播组,对应于不同的组播转发树;对于同一个组播组,对不同的源点也会有不同的组播转发树

分组转发

组播数据报的分组转发有三种方法:洪泛与剪除隧道技术基于核心的发现技术

1.洪泛与剪除

洪泛与剪除适用于较小的组播组,同时要求所有的组成员接入的局域网是邻接的

最开始,路由器转发组播数据报使用洪泛法进行广播

之后,为了避免兜圈子,采用了叫做反向路径广播(Reverse Path Broadcasting,RPB)的策略

简单来说,路由器收到组播数据报时,先检查是否从源点经最短路径传送来的,若是,就向所有其他方向转发刚才收到的组播数据报;若不是,就丢弃而不转发

若存在几条同样长度的最短路径,就只选择一条最短路径,选择的准则就是看这几条最短路径中的相邻路由器谁的 IP 地址最小

2.隧道技术

组播数据报采用隧道技术进行分组转发,是将组播数据报封装到单播数据报中,然后通过不支持组播的网络

3.基于核心的发现技术

基于核心的发现技术适合组播组的大小在较大范围内变化时的情况

该方法是对每一个多播组 G 指定一个核心路由器,给出它的 IP 单播地址

之后,核心路由器创建出 G 的组播转发树,再进行分组转发

感谢您对我的支持,让我继续努力分享有用的技术与知识点!