1. IP Multicast(组播)特征


  • 组播实现在 IP 网络中点到多点的高效传输,绝大部分的组播应用,都不需要接收流量的设备对数据进行确认
  • 组播是把相同的数据,在每个需要流经的链路上只发送一份
  • 组播源使用目的 IP 地址为组播地址发送组播流量(确保只发送一次数据),需要接收流量的终端都会侦听一个相同组播组的组播 IP 地址(终端的共同特征)
  • 组播流量通常是持续的服务
  • 组播的角色分类(组播流就是组播的流量)
    • 组播源:产生组播流的设备(树根)
    • 组播接收者(主机)/组播组成员:需要接受到组播流量的设备[侦听组播组]
    • 组播路由器:负责转发组播流量的设备
  • 组播源连接的路由器称为第一跳路由器
  • 组播的优势
    • 降低网络流量、减轻硬件负荷[提高效率]
    • 减少冗余流量、节约网络带宽、降低网络负载[优化性能]
    • 可以多点应用[分布式应用]
  • 组播的应用
    • 多媒体
    • 培训、联合作业场合的通信
    • 数据仓库、金融应用
    • 任何 “点到多点” 的数据发布应用
  • 组播模型
    • ASM(Any-Source Multicast):任意源组播[只要是组播流量,并且发送到终端所在组就接收]
    • SFM(Source-Filtered Multicast):源过滤组播[在任意源组播的基础上,添加了允许或禁止来自某些组播源的报文]
    • SSM(Source-Specific Multicast):特定源组播[只有特定的源发送的流量,终端才接收]
  • 组播协议
    • IGMP(域内):运行在组播的接收者和最后一跳路由器(叶路由器)之间
    • PIM(域内):运行在组播路由器之间
    • MSDP(域内/域间)
    • MBGP(域间)
  • 不同的组播流通过组播 IP 地址区分,「其中 D 类 IP 地址(组播地址)没有掩码」。并且不能配置在设备的 NIC 上
  • 对于 IP 组播产生的数据帧,交换机有两种转发行为
    • 具备 IGMP 监听能力的交换机:泛洪
    • 不具备 IGMP 监听能力的交换机:按需转发
  • 组播更关系数据从哪里来(更关心 “源”,因为利用 “反向路径转发检查 RPF” 防环)
  • 组播路由和单播路由是相反的
    • 单播路由关心数据报文去哪里
    • 组播路由关心数据报文从哪里来

      2. IPv4 组播结构


组播 IP 对应需要对应组播 MAC 完成数据封装

1)组播 IP 地址

  • IP 地址中的二进制前 4bit 固定为 “1110” 就是 D 类组播地址
    • 11100000 = 224,组播地址的起始 IP 前缀
    • 11101111 = 239,组播地址的结束 IP 前缀 | D 类组播地址范围 | 作用 | 生效范围 | | —- | —- | —- | | 224.0.0.0 ~ 224.0.0.255 | 协议预留的永久组播地址 | / | | 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 | ASM 临时组地址 | 本地管理组播地址(私有地址) |

2)组播 MAC 地址和 IP 地址的映射

  • 组播 MAC 是第一字节的第八位 = 1
  • 组播 MAC 地址的高 24bit 为 0x01005e,第 25bit 固定为 0,低 23bit 为组播 IP 地址的低 23bit


image.png

  • IPv4 组播地址的前 4 位是固定的 1110,对应组播 MAC 地址的高 25 位。后 28 位中只有低 23 位被映射到 MAC 地址,因此丢失了 5 位的地址信息,直接会导致有 32 个 IPv4 组播地址映射到同一 MAC 地址上。转发时候就会导致乱套(组播 MAC 地址相同就认为是相同流量了)

    3)IPv6 组播地址与 MAC 地址的映射关系

    image.png
  • 以太网环境中,IPv6 组播报文必须执行以太网封装
  • IPv6 组播报文的目的 IPv6 地址和 MAC 地址都需要是组播,需要对应
  • IPv6 组播 MAC 地址前缀**33-33**是为 IPv6 组播预留的,「后 32 位 MAC 地址从对应的 IPv6 组播 IP 的后 32bit 拷贝过来的」
    • 例如IPv6组播地址:FF02::1:FF12:1 → 对应组播 MAC 地址为3333-FF12-0001
    • 例如IPv6组播地址:FF02::1:FF1A:822 → 对应组播 MAC 地址为3333-FF1A-0822
    • 例如IPv6组播地址:FF02::1 → 对应组播 MAC 地 址为3333-0000-0001
    • 例如IPv6组播地址:FF02::2 → 对应组播 MAC 地址为3333-0000-0002

      4)组播协议分层体系

      image.png

      3. IP 组播分发树和组播数据转发


用来描述 IP 组播报文在网络中所经过的路径(组播分发树),我们将整个组播流量流经的链路以及其中的所有节点统称为组播分发树

  • 组播分发树有两种方式形成
    • 从叶路由器向树根形成树形结构
    • 从树根向叶路由器形成树形结构(STP)
  • 分发树的基本类型
    • 源路径树(适用 PIM-DM/SM)
      • 树根到每个接收者的最短路径结合起来构成的转发树(适合小型网络)
      • 路径最优、延迟最小、占内存较多
    • 共享树(适用 PIM-SM)
      • 对应某个组播组,网络中只有一颗树(适合大型网络)
      • 路径不是最优的、延迟相比较高、占用内存较少

        1)源路径树(SPT)

        以组播源为根,组播组成员为叶子的组播分发树,每个树根与接收者之间建立一颗独立的 SPT

image.png

  • SPT 组播路由表(组播路由器转发组播流量所需要的关键元素):
    • SPT 组播路由表用于判断组播流(匹配组播流)
      • S = 源地址
      • G = 组地址
    • iif:组播流量的入接口(通常只有一个,用于做 RPF 检查)
    • oiflist:出接口列表(所有需要这个源组流量的接口列表)

      2)共享树(RPT)

      以 RP 为根,组播组成员为叶子的组播分发树,RP、叶路由器、接收者、流量经过的链路结合为共享树

image.png

  • RP(汇聚点):全网所有的组播路由器都知道该点的所在位置(RP 是共享树的树根)
  • 第一跳路由器和叶路由器之间建立 SPT 后,则组播流量就可以正常转发了
    • 第一跳路由器支持树根在哪
    • 叶路由器知道接收者在哪
  • 共享树的形成(反向形成共享树—->组播流量的反向形成的共享树)
    • 接收者通过 IGMP 通知叶路由器自己需要哪些组播流量
    • 叶路由器向 RP 方向做 PRF 检查(叶路由器以及知道 RP 的位置),逐跳向上游加入组播组
  • RPT 组播路由表(与 SPT 相比,没有 S):
    • (*,G):用于判断组播流(匹配组播流)
      • * = 任何源地址(不知道谁是树根)
      • G = 组地址
    • iif:组播流量的入接口(通常只有一个,用于做 RPF 检查)
    • oiflist:出接口列表(所有需要这个源组流量的接口列表)

      5. RPF 检查


反向转发路径检查 PRF 是「组播基本防环机制和避免接收到重复的组播流」

  • 依靠单播反向转发路径执行检查,以确保组播数据转发没有环路(理想状态)
  • 组播路由器收到组播流后,只有确认这个组播流是从自身与上游路由器(单播路由的出接口)相连的接口收到,才进行转发,否则丢弃自身
    • 在单播路由表中查找组播报文源地址的路由,如果该路由的出接口就是组播报文的入接口,RPF检查成功。否则PRF检查失败,报文丢弃
      • 当从多个接口收到相同流量时,转发和丢弃哪个接口的流量是通过 iff(入接口)进行 RPF 检查后决定的(通过单播路由表查找去往树根的出接口,进行转发)

        1)检查过程

        除单播路由外,也可以以 MBGP 路由、组播静态路由(Huawei AD =1,Cisco AD = 0),作为RPF检查依据

  1. 通过报文源地址,分别从三个路由表中各选出最优的一条路由进行 RPF 检查(默认情况下,采用优先级选取路由来进行 RPF 检查)
    • 如果配置了按照最长匹配选择路由,则从这三条路由中选出最长匹配的作为 PRF 路由 multicast longest-match
    • 如果前缀和掩码相同,则选取路由优先级最高的路由
    • 按照组播静态路由、MBGP 路由、单播路由的顺序选择
  2. 选出来后将报文的入接口与 RPF 路由的出接口进行 RPF 检查(可以根据源地址或者是 RP 的地址进行检查),如果通过,则向下游转发;如果失败,则丢弃

    2)PRF 检查举例

    ① PRF 检查失败

    image.png

    ② RPF 检查成功

    image.png