CCIE知识点总结——组播

1、组播概述

(1)组播解决了网络中用户数量不确定的问题,一份信息,多个接收者,相同的组播数据流在每一条链路上最多仅有一份。示意图如下。
CCIE知识点总结——组播
(2)组播的优势与劣势
优势:减轻服务器和CPU负荷,减少了链路带宽资源的占用,减轻了网络设备的负载。
劣势:组播是基于UDP的。

  • 尽力投递:报文丢失是不可避免的。因此组播应用程序不能依赖组播网络进行可靠性保证,必须针对组播网络的这个特点进行特别设计。“可靠组播”目前仍然处于研究阶段。
  • 没有拥塞避免机制: 缺少TCP窗口机制和慢启动机制,组播可能会出现拥塞。如果可能的话,组播应用程序应该尝试检测并避免拥塞。
  • 报文重复: 某些组播协议的特殊机制(如Assert机制和SPT切换机制)可能会造成偶尔的数据包的重复。组播应用程序应该容忍这种现象。
  • 报文失序 : 同样组播协议有的时候会造成报文到达的次序错乱,组播应用程序必须自己采用某种手段进行纠正(比如缓冲池机制等)。

(3)实施组播的三个基本条件
硬件设施:

  1. 组播服务器
  2. 支持组播分发的网络
  3. 能接收组播流的客户端

软件技术:

  1. 必须存在组播地址
  2. 必须有多播路由协议的支持
  3. 客户端必须能自由加入或离开多播组

2、组播地址结构

(1)组播地址
一个组播组就是一个IP地址,不表示具体的主机,而是表示一系列系统的集合,主机加入某个组播组 即声明自己接收某个IP地址的报文。
组播IP地址不会在网络上实际存在。

  • 组播源IP地址:A、B、C类地址
  • 组播目标IP地址:D类地址 224.0.0.0 –239.255.255.255
  • 为网络协议预留的地址段有:224.0.0.0-224.0.0.255
  • 全局范围地址:224.0.1.0-238.255.255.255
  • 指定信源组播地址:232.0.0.0~232.255.255.255
  • GLOP地址:233.0.0.0~233.255.255.255
  • 有限范围地址:239.0.0.0-239.255.255.255

常用组播地址

  • 224.0.0.1 – 组播网络中的所有节点
  • 224.0.0.2 – 所有路由器
  • 224.0.0.13 – 所有运行PIMv2的路由器
  • 224.0.0.5, 224.0.0.6, 224.0.0.9, 224.0.0.10 单播路由协议
  • 224.0.0.25 表示所有的交换机
  • 224.0.1.40 auto-rp

(2)三层组播地址到二层地址的映射
IANA将MAC地址范围01:00:5E:00:00:00~01:00:5E:7F:FF:FF分配给组播使用,这就要求将28位的IP组播地址空间映射到23位的组播MAC地址空间中。
CCIE知识点总结——组播
CCIE知识点总结——组播

3、组播分发树

组播分发树:用来描述IP组播报文在网络中经过的路径。
有源树(最短路径树SPT:Source or Shortest Path Tree)
由组播源到用户间的最短路径构成。路由器必须为每个组播源保存路由信息,占用内存较多 (S,G),但路径最优,接收者到多播源是最佳路径,延迟最小。
共享树(Shared Tree)
以网络上某特定节点为公用根。占用内存较少 (*,G),路径不一定是最优的,多播流转发必须先经过RP,引入额外的延迟。对 RP 的可靠性和处理能力要求很高。
(1)最短路径树(基于源的分发树)
有源树的根是组播数据流的来源,有源树的分支形成了通过网络到达接收站点的分布树。因为有源树以最短的路径贯穿网络,所以也被成为最短路径树(SPT:Shortest Path Tree )。
CCIE知识点总结——组播
(2)共享树
共享树的根不在多播数据流的源头,而位于网络中管理员指定的汇聚点(RP:rendezvous point)。所有多播源先把多播流发送到RP,再由RP分发到各接收站点,目标组地址向他的多个源节点共享多播分布树。
CCIE知识点总结——组播

4、组播数据转发

组播路由转发和单播路由转发是相反的
a、单播路由转发关心数据报文要到哪里去。
b、组播路由转发关心数据报文从哪里来。
组播路由转发使用 “反向路径转发”机制避免环路,多播数据流从多播路由器入口路由到出口转发出去。
a、入口:由RPF决定
b、出口:由IGMP和多播路由协议决定的
反向路径转发(RPF, Reverse Path Forwarding)
何谓RPF?
路由器收到组播数据报文后,只有确认这个数据报文是从自己到源的出接口上到来的,才进行转发,否则丢弃报文。
RPF检查
在单播路由表中查找到组播报文源地址的路由,如果该路由的出接口就是报文的入接口,RPF成功,否则RPF失败。

5、IGMP协议

(1)IGMP协议概述
IGMP协议:Internet组管理协议,IGMP是一个三层协议,协议号为2,直接被封装在IP中,运行于路由器与主机之间。
IGMP版本:
RFC 1112 – IGMP版本1,Windows 95支持。
RFC 2236 – IGMP版本2(默认),Windows98后的版本及大多数UNIX系统。
IGMP版本3目前仍然是一个草案(draft),Win XP支持。
(2)IGMP基本原理
IGMP原理:采用路由器查询、主机报告两种方式维持组成员关系。
a、路由器查询:路由器周期性每60秒发送查询(D=224.0.0.1 ttl=1)试图发现感兴趣的组成员(主机每次都回复)。
b、主机报告:主机主动发送一个IGMP报告(D=组播组 ttl=1) 表示要加入某个多播组(包含了要加入的多播组地址),也可以用来回复路由器的queries。同一个网段中,只需要一台主机发送report报文,避免网络种充斥大量的report报文。
抑制机制:倒数报告计时器,默认是10s。
(3)IGMP的三个版本
IGMP v1离开组播组过程:

  1. 主机“默不作声”地离开组(不发报告了)
  2. 路由器发送3个普遍组查询(间隔60秒)
  3. 路由器没有收到这个组的IGMP报告
  4. 组播组超时(离开)

IGMP v2离开组播组过程:

  1. 主机向224.0.0.2发送离开组消息(包含离开的组)
  2. 路由器向这个组(239.1.1.1)发送特定组查询
  3. 发送特定组查询的时间间隔为1s,发送特定组查询的次数为2次,默认在超时时间大约2.5s内,没有收到组成员的成员报告,那么组(239.1.1.1)超时离开,路由器删除这个组

IGMP v3
数据结构变了:D=224.0.0.22,可以有选择的加入特定多播源发送的多播流。
IGMP 三个版本的比较:

  IGMPv1 IGMPv2 IGMPv3
查询器选举 依靠组播路由协议 自己选举 自己选举
成员离开方式 默默离开 主动发出离开报文 主动发出离开报文
指定组查询 不支持 支持 支持
指定源、组加入 不支持 不支持 支持

(4)IGMP 查询器
同一网段上有多个组播路由器时,选择一台组播路由器作为查询器。
IGMP v1:默认DR 就是 IGMP 查询器。DR是通过PIM协议选择。
IGMP v2:拥有最低的IP地址被选举为IGMP 查询器。
(5)IGMP相关配置
Ip multicast routing //开启组播路由功能
Ip igmp version {1 | 2 | 3}
Ip igmp query-interval seconds //default 60s
Ip igmp query-max-response-time seconds //default 10s
Ip igmp query-timeout seconds //defaut 2*query-interval
No ip mroute-cache //在接口上禁止IP多播包的快速交换
ip igmp last-member-query-count <1-7> //default 2
ip igmp last-member-query-interval milliseconds //default 1000ms

验证
R1#show ip igmp interface f0/0

6、组播路由协议PIM

PIM(Protocol Independent Multicast)称为协议无关组播。
组播依靠的单播路由协议: 静态路由、RIP、IGRP、IS-IS、BGP、OSPF,总之,单播路由协议是什么都没关系。
密集模式(Dense-mode)

  1. 使用“推”(Push)模型(先给你,管你要不要)
  2. 组播数据流整网络的洪泛(Flood)
  3. 下游不想接收的话则剪枝(Prune)
  4. 洪泛、剪枝、洪泛、剪枝…周而复始 (每隔3分钟泛洪一次)

稀疏模式(Sparse-mode)

  1. 使用 “拉”(Pull)模型(你要了,才给你)
  2. 组播数据流只发送到有需要的地方
  3. 有显式的加入(Join)过程

7、PIM-DM协议

(1)PIM-DM协议原理
使用逆向路径转发(RPF)机制,先向网络洪泛(Flood),然后根据组播组成员关系进行剪枝 (Prune),使用Assert机制来剪枝重复的数据流(MA网络中,存在多台路由器,选择一台最优路由器向上游发送加入组的消息)。适合于小规模的网络。
(2)PIM-DM的五种包:

  • Hello:发现和维护邻居关系
  • Join/prune:加入和修剪树
  • Graft:嫁接。重新加入多播树(以前被修剪过)
  • Graft ACK:嫁接成功后的确认
  • Assert:声明。在多路访问环境下用来协商哪台多播路由器来往该多路访问网络中转发多播数据流。

(3)PIM-DM协议运行过程:
PIM邻居发现
每个多播路由器在连入多播网络时,在启动了PIM-DM的接口每隔30秒(缺省)都用多播PIM hello消息以宣布它的连入。105秒内收不到邻居hello,则认为邻居失效。起始PIM-DM在多播转发时经过RPF检测后会将多播流发给所有PIM邻居路由器。
PIM-DM 泛滥与剪枝
多播树的生成
PIM-DM以flood-and-prune方式生成多播分布树。

  1. 多播源产生多播流,收到多播流的第一台路由器执行RPF检查后记载下(S,G),并洪泛给所有PIM邻居。
  2. 如果末端路由器有直连的感兴趣组成员,路由器会加入多播树。
  3. 如果末端路由器没有直连的组成员,会向上游路由器发送prune信息,上游路由器首先将收到prune信息的接口标记为prune状态。如果上游路由器本身存在组成员或存在其他需要转发多播流的下游路由,不会做进一步反映,如果上游路由器本身不存在组成员且不存在其他需要转发多播流的下游路由器,将重复prune。

多播路由器prune的典型原因:

  1. 该接口下没有接收者
  2. 没有下游PIM邻居
  3. 非RPF接口收到多播流(当前路由器向上游路由器发送prune)
  4. 多路访问环境下由于Assert原因,自己不能转发多播流,重复prune 之前会等待3秒延时来等待有无join

新接收节点加入多播组
当有新的多播组成员要加入时,它所连入的当前路由器要加入多播树,由于当前路由器以前被prune过,但仍保留有(S,G)信息,所以它可以向它的上游PIM邻居单播Graft (嫁接)消息,上游路由器回送Graft ACK。Graft嫁接消息一直逐跳向上游发送,直到成功加入多播树上。
多路访问环境下的多播转发—PIM转发路由器选举

  1. 路由器从其“出接口列表” 中的某个接口收到数据,只有其中一个路由器应该继续发送数据,以避免重复。

  2. 路由器发送 “PIM Assert”消息。

  3. 查看单播路由表,计算distance和metric值,谁到源的路由最优谁获胜,如果distance和metric相等,IP地址大的获胜,成为forwarder转发多播数据流量,输的就停止转发 (prune修剪接口)。

(4)PIM-DM 评价
对于小型网络来说非常有效,用于实验室、设备性能测试。
优势:

  1. 易于配置–总共只有两条命令
  2. 实现机制简单(洪泛修剪)

潜在问题:

  • 洪泛修剪过程不够高效
  • 复杂的Assert机制
  • 控制和数据平面混合
  • 导致网络内部的所有路由器上都有(S, G)
  • 可能会导致非确定性的拓扑行为
  • 不支持共享树

(5)PIM-DM配置实施

  1. 首先保证单播路由通信正常
  2. 在网络设备上配置组播协议

    1. 全局下启用组播:ip multicast-routing
    2. 三层接口上启用PIM-DM:ip pim dense-mode
  3. 配置接收节点
  4. 查看与排错

Ip pim dense-mode //在接口上启用PIM-DM,配置PIM-DM的时候需要
注意:

  1. 必须运行单播路由协议,否则PIM将无法确定RPF接口。
  2. 配置了PIM的时候,必须每个接口上都启用该协议,否则可能出现RPF故障。

在多路访问接入网络中,理解IGMP查询路由器、PIM指派路由器(DR)以及PIM转发路由器(IP地址越小的是查询路由器、最大的是指派路由器(PIM-DM协议本身不需要一个DR,在IGMPv1中有意义,因为IGMPv1本身没有查询进程,要靠路由协议来选出DR以管理IGMP查询)和转发路由器。
Show ip igmp interface interface-type //查看接口运行组播的情况

8、PIM-SM协议

(1)PIM-SM协议概述
支持共享树和源树。
假设没有主机需要接收组播数据,除非它们明确地发出了请求使用“汇聚点”(RP, Rendezvous Point),发送者和接收者在RP处进行汇聚,发送者的第一跳路由器把发送者注册到RP上,接收者的DR(直连网络上的负责人)为接收者加入到共享树 (树根在RP)。
适合于大规模的企业网络,是任何网络的优选方案,不管其规模和成员密集程度。
(2)PIM-SM的9种包

  • Hello
  • Join/prune
  • Assert
  • RP-Announce
  • RP-discovery
  • Bootstrap
  • Candidate-RP-Advertisement
  • Register
  • Register-stop

(3)PIM-SM与PIM-DM异同
相同点:

  1. 邻居发现机制
  2. 单播路由表变化时RPF的重新选择
  3. DR的选择
  4. Prune-override:剪除覆盖
  5. Forwarder的选择

不同点:

  1. SM使用了显示加入模式,起初时由组成员发起的。
  2. SM即支持共享树又支持SPT(最短路径树)。

(4)PIM-SM协议运行过程
创建共享树

  1. 组成员(接收节点)首先通过发送IGMP报告消息申请加入感兴趣组
  2. 相连路由器收到IGMP信息后记录下(*,G),将接口加入到多播组出口列表。并检查RP-Group-Map,找出该多播组的RP(RP是一个IP地址代表的,通过查找单播路由表找出RPF接口)。然后向上游路由器发送PIM
    join消息,其目的是要创建根于RP的该组的一个共享树(*,G)。
  3. 上游路由器做出反应。

创建从源到RP的SPT

  1. 多播源发送多播流,与之相连的第一跳路由器(First Hop)首先会找出该多播组的RP,然后以PIM register消息把多播包重新封装在单播包中发送到RP。
  2. 如果有该多播组的共享树, RP收到PIM register消息包后去封装提取出多播流并沿着该多播组的共享树转发多播流,然后RP通过RPF向上游发送PIM join最终形成从源到RP的SPT,此时多播流直接沿SPT发送到RP,不必封装在单播中,RP随后发送PIM register-stop消息单播到第一跳路由器,停止第一跳向RP发单播流。
  3. 如果没有该组的共享树,RP立刻发送PIM register-stop消息单播到第一跳路由器,停止第一跳向RP发单播流。

SPT切换

  1. 最后一跳路由器一旦发现了正在转发多播流量的源节点IP,可以通过向源节点方向的上游路由器发送PIM join消息,从而迅速创建或加入该多播组的SPT(S,G)。
  2. 当多播路由器不需要从RP接收多播流时,会发送PIM prune消息到RP修剪来自共享树的多余流量。

(5)配置PIM-SM
Ip pim sparse-mode
对PIM-SM的配置,惟一的要求是RP的标识。路由器获知RP的地址的方法?也就是RP的常见确定机制有下列3种:

  • 手工静态指定:需要在每台多播路由器上手工配置RP信息,同时还要定义group-rp的映射关系。

SPOTO(config)# ip pim rp-address 192.168.1.1 1 [ override ]
SPOTO(config)# access-list 1 permit 239.1.1.0 0.0.0.255

192.168.1.1是RP的地址,建议用RP路由器loopback 0接口的地址来标识RP。
239.1.1.0 0.0.0.255表示是这些多播组地址。
注意:以上静态指定RP的命令需要在所有组播路由器上配置。

  • Auto-RP:Cisco专有的协议。

静态RP带来的一些问题:
a、需要更改RP地址。
b、RP失效时,静态配置的PIM域无法轻易地切换到备用RP上。

配置Auto-RP的步骤:
a、必须配置所有的C-RP。
b、必须配置所有的映射代理。

采用ip pim send-rp-announce即可配置C-RP,使用该命令需要指定接口(路由器通过该接口取得RP地址)和TTL值。当路由器被配置为C-RP之后,该路由器每隔60s向保留地址224.0.1.39发送一条RP-Announce消息,超时时间为180s。
采用ip pim send-rp-discovery配置映射代理,映射代理负责侦听来自C-RP的 RP-Announce消息并选举出RP,之后通过RP-Discovery消息(每隔60s向保留的地址224.0.1.40发送 )将RP宣告到PIM域中。
特别注意:必须在send-rp-discoverysend-rp-announce上指定的接口配置ip pim sparse-mode。对应的在静态RP的配置时没必要再RP的接口上配置PIM-SM。
候选RP向映射代理发送竟选消息(RP-Announce),最后映射代理从候选RP的竟选消息中选出IP地址最高的为活动RP,然后发送RP-Discovery通告给每台路由器,竟选活动RP只根据IP地址大小,没有优先级之分。
所有的C-RP向映射代理发送竟选消息,使用目的地址为224.0.1.39,每60秒发送一次,而映射代理从众多C-RP中选出活动RP后,以目的地址为224.0.1.40发给每台路由器,也是每60秒发送一次。
debug ip pim auto-rp来显示auto-rp的全部操作过程。
show ip pim rp可以显示路由器正在接收的多播组以及这些多播组所映射到的RP情况。
采用ip pim send-rp-announce中加入关键字interval可以修改C-RP发送RP announce消息的时间间隔,默认为60s。
eg:ip pim send-rp-announce loopback 0 scope 5 interval 10修改间隔为10s。
采用ip pim send-rp-announce中加入关键字group-list可以指定路由器为特定组播组的RP。
eg:ip pim send-rp-announce loopback 0 scope 5 group-list 10
access-list 10 permit 224.0.0.0 7.255.255.255

show ip pim rp mapping可以查看路由器映射到某个RP的所有组播组(不同的多播映射到不同的RP)。
show ip pim rp mapping in-use显示该路由器上正在使用的多播组地址范围。
show ip pim rp-hash显示某特定组将要被映射到那个RP。
通过设置RP通告过滤器(announcement filter),可以防止映射代理接收未经授权的路由器,这些路由器可能被有意或者无意的配置成为C-RP。采用命令:ip pim rp-announce-filter
eg:ip pim rp-announce-filter rp-list 1 group-list 11
access-list 1 permit 10.224.1.1
access-list 1 permit 10.224.1.2
access-list 11 permit 224.0.0.0 15.255.255.255

在稀疏模式应用环境,多播包必须首先在共享树上进行转发,这就意味着侦听224.0.1.40的路由器为了接收RP-Discovery消息,就必须向他们的RP通告希望加入该多播组,现在的情况是路由器连RP-Discovery消息都没有接收到,那么又怎么知道谁是RP呢?解决的办法是采用稀疏-密集模式。
配置稀疏-密集模式,接口上配置:ip pim sparse-dense-mode
(备注:在环回口上无需配置ip pim sparse-dense-mode,只要配置ip pim sparse-mode即可)

  • BSR(bootstrap router 自举路由器协议)

动态方式通告RP信息, 只需在RP和BSR路由器上做配置即可,其他PIM多播域内的路由器会自动学习到RP的信息。BSR是标准的RP选举与维护机制,所有支持PIM-SM的设备都会支持BSR机制。
作用:负责在PIM-SM网络启动后,收集网络内的RP信息,然后将RP集(即组-RP映射数据库)发布到整个PIM-SM网络。
配置:可以配置多个候选BSR (C-BSR),主备作用,优先级值大的成为BSR,优先级
值相同的话,IP地址大的优先。候选RP(C-RP)将C-RP通告消息发送到BSR (缺省周期60秒),C-RP通告消息通过单播发送(C-RP优先级、IP地址、组地址),BSR将RP集存储所有的 C-RP通告。
通告:BSR周期性(缺省周期60秒)地向所有路由器发送BSR消息(224.0.0.13),BSR消息包含整个RP-set和 BSR地址,消息一跳一跳地自BSR向整个网络洪泛(flood)所有的路由器使用收到的RP集来确定RP,所有路由器都使用相同的RP选择算法,选择的RP也是一致的。
RP的选举
为获得汇聚点(RP)信息,所有普通路由器都要收集自举(Bootstrap)消息,即普通路由器接收并保存由自举路由器发送来的自举消息,它采用在自举消息中发布的一组可用汇聚点来获得合适的组播组到汇聚点的映射。不同组映射到不同RP可以实现RP负载分担。如果为了简化部署,可以将RP和BSR部署在同一台路由器上。
选举规则:

  1. 如果组中只有一个C-RP,则直接选为RP。
  2. 存在多个C-RP,拥有最小优先级值的C-RP成为RP。
  3. 优先级相同,运行一个hash函数(这个函数输入的参数有:组的前缀、hash掩码和C-RP的地址,输出为:hash值),有最大结果的C-RP成为RP。
  4. 如果hash值相同,有最大IP地址的C-RP成为RP。

C-RP接收到BOOTSTRAP消息确定BSR地址之后,以单播方式向BSR发送候选RP通告与Auto-RP不同BSR并不选举RP,PIMV2路由器接收到BOOTSTRAP消息之后选举RP。
采用BSR动态选举RP配置:
配置C-BSR
SPOTO(config)# ip pim bsr-candidate loopback 0 30 10
SPOTO(config)# int loopback 0
SPOTO(config-if)# ip pim sparse-mode

配置C-RP
SPOTO(config)# ip pim rp-candidate loopback 0 [ group-list 1 ] priority #
SPOTO(config)# access-list 1 permit 239.0.0.0 0.255.255.255
SPOTO(config)# int loopback 0
SPOTO(config-if)# ip pim sparse-mode
Show ip pim bsr-router:显示PIMV2域的BSR
Show ip pim rp-hash:显示某特定组将要被映射到那个RP

(6)PIM-SM评价
对于稀疏和密集应用都很高效。
优势:

  1. 数据流仅沿着“加入”的分支向下发送,可以根据流量等条件动态地切换
  2. 到源树与具体的单播路由协议无关,域间组播路由的基础和MBGP、MSDP
  3. 共同结合使用可以完成跨AS域的组播