作为 IP
传输三种方式之一,组播指的是报文从一个源发出,被转发到一组特定的接收者,相同的报文在每条链路上最多有一份。相较于传统的单播和广播,组播可以有效地节约网络带宽、降低网络负载,所以被广泛应用于 IPTV
、实时数据传送和多媒体会议等网络业务中。
1.单播、组播和广播定义比较
通讯模式 | 定义 | 工作原理 | 特点 |
---|---|---|---|
单播 | 主机间一对一的通讯模式 | 网络设备根据报文中的目的地址选择传输路径,将报文传送到指定目的地,只转发接收到的数据,不进行复制 | 针对每台主机及时响应,网页浏览采用此模式 |
组播 | 主机间一对多的通讯模式 | 组播源将报文发送到特定的组播地址,该地址属于一组主机,接收者加入该群组以接收组播报文 | 允许多个接收者接收同一报文,提高传输效率 |
广播 | 主机间一对所有的通讯模式 | 设备将报文发送到网络中的所有可能接收者,复制并转发所有收到的广播报文到除到达接口外的每个接口 | 处理流程简单,无需选择路径 |
2.用户主机如何区分组播、单播和广播
用户主机是通过识别 IP
地址,区分 IP
传输的方式。IP
地址被分为三类,分别是:
地址分类 | IP地址描述 |
---|---|
单播IP地址 | 一个单播IP 地址只能标识一台用户主机。一份使用单播 IP 地址为目的地址的IP 报文,只能被一台用户主机接收。 |
广播IP地址 | 一个广播IP 地址能够标识某确定网段内的所有用户主机。一份使用广播 IP 地址为目的地址的IP 报文,能够被该网段内的所有用户主机接收。IP 广播报文不能跨网段传播。 |
组播IP地址 | 一个组播IP 地址能够标识网络不同位置的多个用户主机,一台用户主机可以同时识别多个组播IP 地址。一份使用组播 IP 地址为目的地址的IP 报文,能够被网络不同位置的多个用户主机接收。 |
用户主机使用不同的类别的IP地址,就选用了不同的传输方式:单播方式、广播方式、组播方式。
3.组播、单播和广播传输方式的差异
如下图,点到多点组网图中有用户A,用户B,用户C,用户D和用户E,但现在只有用户A,用户B和用户C有流量需求,想接收数据源发送的报文,现分别采用单播、组播、广播方式进行报文的传输。
# 单播方式
如下图,采用单播传输方式后,要确保有流量需求的用户都能收到流量,数据源需要发送三份流量,相应的网络中设备B也需要承载三份流量。
# 广播方式
如下图,采用广播传输方式后,数据源仅发送一份流量,有流量需求的用户可以收到流量,但是从图中可以看出,因为广播的传输机制,无流量需求的用户D和用户E也收到了流量,存在流量的冗余。
# 组播方式
如下图,采用组播传输方式后,数据源仅发送一份流量,有流量需求的用户就可以收到流量,而且无流量需求的用户D和用户E也不会收到冗余的流量。
从上面的比较中,可以看出组播点对多点传输网络场景中更具优势,这三种 IP
传输方式比较表如下:
4. IP组播地址的范围
为了使组播源和组播组成员进行通信,需要提供网络层组播使用的IP
组播地址。
# IPv4组播地址
IANA
将D类
地址空间分配给IPv4
组播使用。IPv4
地址一共32
位,D类
地址最高4
位为1110
,地址范围从224.0.0.0
到239.255.255.255
,具体分类及含义如下表:
地址范围 | 含义 | 描述 |
---|---|---|
224.0.0.0~224.0.0.255 | 永久组地址 | IANA 为路由协议预留的IP 地址(也称为保留组地址),用于标识一组特定的网络设备,供路由协议、拓扑查找等使用,不用于组播转发。 |
224.0.1.0~231.255.255.255 233.0.0.0~238.255.255.255 | ASM 组地址 | 全网范围内有效。 |
232.0.0.0~232.255.255.255 | - | 缺省情况下的SSM 组地址范围,全网范围内有效。 |
239.0.0.0~239.255.255.255 | 本地管理组地址 | 仅在本地管理域内有效。在不同的管理域内重复使用相同的本地管理组地址不会导致冲突。 |
# IPv6组播地址
IPv6
地址长度是128
位,IPv6
组播地址格式如图所示:
IPv6组播地址格式:
IPv6
组播地址总是以FF
开头,高8位取值为11111111
。Flags
字段(4位
)用来标识组播地址的状态。例如取值为0
表示保留组地址,取值为1或2
表示ASM
范围内的组播地址,取值为3
表示SSM
范围内的组播地址。Scope
字段(4位
)用来标识组播组的应用范围,指示组播组应用范围是只包含同一本地网络、同一站点、同一机构中的节点,还是包含全球地址空间内的任何节点。Group ID(112位)
组播组标识符,用在由Scope
字段所指定的范围内标识组播组。
固定的 IPv6
组播地址的范围及含义如下表:
地址范围 | 描述 |
---|---|
FF0x::/32 | 这是一个保留的组地址。 |
FF1x:/32 FF2x::/32 | ASM(Any-Source Multicast) 组地址,全网范围内有效。其中“x”代表除了1和2 之外的任意数字。 |
FF3x::/32 | 缺省的SSM (Source-Specific Multicast )组地址范围,全网范围内有效。其中x 代表除了1和2 之外的任意数字。这两个范围都用于SSM 组地址。 |
5.组播MAC地址的范围
为了在本地物理网络上实现组播信息的正确传输,需要在链路层使用组播MAC
地址。组播数据传输时,其目的地不是一个具体的接收者,而是一个成员不确定的组,所以需要一种技术将IP
组播地址映射为组播MAC
地址。
# IPv4组播MAC地址
以太网传输IPv4
单播报文的时候,目的MAC
地址使用的是接收者的MAC
地址。但是在传输组播数据时,其目的地不再是一个具体的接收者,而是一个成员不确定的组,所以要使用IPv4
组播MAC
地址,即IPv4
组播地址映射到链路层中的地址。
IANA
规定,IPv4
组播MAC
地址的高24
位为0x01005e
,第25
位为0
,低23
位为IPv4
组播地址的低23
位,映射关系如图所示。例如组播组地址224.0.1.1
对应的组播MAC地址为01-00-5e-00-01-01
。
IPv4
组播地址的前4
位是固定的1110
,对应组播MAC
地址的高25
位,后28
位中只有23
位被映射到MAC
地址,因此丢失了5
位的地址信息,直接结果是有32
个IPv4
组播地址映射到同一MAC
地址上。例如IP
地址为224.0.1.1、224.128.1.1、225.0.1.1、239.128.1.1
等组播组的组播MAC
地址都为01-00-5e-00-01-01
。
# IPv6组播MAC地址
IPv6
组播MAC
地址的高16
位为0x3333
,低32
位为IPv6
组播地址的低32
位。如图所示,是IPv6
组播地址的MAC
地址映射关系。
可见IPv6
中会有更多的组地址使用同一个MAC
地址。
6.组播协议
在IP
组播传输模型中,发送者不关心接收者所处的位置,只要将数据发送到约定的目的地址,剩下的工作就交给网络去完成。网络中的组播设备必须收集接收者的信息,并按照正确的路径实现组播报文的转发和复制。在组播的发展过程中,形成了一套完整的协议来完成此任务。
7.组播实现机制
组播的实现机制,使得组播在点到多点场景中,比单播和广播具有强大的优势。组播的实现机制有哪些呢?
我们这里通过详细对比组播和单播的实现过程来展开介绍一下组播的实现机制。
# 单播实现机制
如上图所示,单播组网中要实现用户A,用户B,用户C能接收数据源的流量,需要做如下配置:
全网设备相连的接口都需要配置单播
IP
地址。全网要部署单播路由协议,确保数据源和用户A、用户B和用户C之间路由互通。
数据源发流的时候,对用户A发送的流量IP
报文头封装的目的地址是用户A的主机地址10.1.2.1
;
对用户B发送的流量IP
报文头封装的目的地址是用户B的主机地址10.1.3.1
;
对用户C发送的流量是IP
报文头封装的目的地址是用户C的主机地址10.1.4.1
。
# 组播实现机制
如上图所示,组播组网实现用户A,用户B和用户C能接收到数据源的流量,需要做如下部署:
全网设备相连的接口都需要配置单播
IP
地址。全网要部署单播路由协议,确保数据源和用户A、用户B和用户C之间路由互通。
全网部署组播
PIM协议
(PIM-SM
或者PIM-DM
),并配置相应的BSR和RP
,图中配置设备B为RP
和BSR
。用户A,用户B,用户C必须发送
IGMP
组加入报文,组加入报文中包含其需要加入的组IP
地址225.1.1.1
。
数据源发送数据流,该数据流二层目的MAC
地址是组播的MAC
地址,IP
报文的目的地址为225.1.1.1
。
组播实现机制总体来说就是接收者告诉一个中心节点(在组播协议里面称为RP
),它需要哪些组地址的流量;RP
需要被告之数据源(在组播场景中我们称之为组播源,它的特点是流量二层头中目的MAC
地址是组播MAC
地址,IP
报层IP
报文头目的地址是组播IP
地址)在哪,数据源往哪些组地址发流。RP
知道了接收方和发送方的所有信息后,就会根据需要把流量发送到特定位置(它发送的过程中建立了组播分发树)。
通过单播和组播的实现机制可能会存在如下疑问,组播部署的时候为什么要先部署好单播呢?
因为在组播部署的时候,源注册过程组播源必须知道RP的路由,才能发送过去,源注册报文是单播报文。
另外组播分发树建立的过程中,是需要查到组播源(或者RP
)的路由的,在组播中我们称为RPF
检查,这个也需要单播路由的支持。