(1)组播解决了网络中用户数量不确定的问题,一份信息,多个接收者,相同的组播数据流在每一条链路上最多仅有一份。示意图如下。
(2)组播的优势与劣势
优势:减轻服务器和CPU负荷,减少了链路带宽资源的占用,减轻了网络设备的负载。
劣势:组播是基于UDP的。
(3)实施组播的三个基本条件
硬件设施:
软件技术:
(1)组播地址
一个组播组就是一个IP地址,不表示具体的主机,而是表示一系列系统的集合,主机加入某个组播组 即声明自己接收某个IP地址的报文。
组播IP地址不会在网络上实际存在。
常用组播地址
(2)三层组播地址到二层地址的映射
IANA将MAC地址范围01:00:5E:00:00:00~01:00:5E:7F:FF:FF分配给组播使用,这就要求将28位的IP组播地址空间映射到23位的组播MAC地址空间中。
组播分发树:用来描述IP组播报文在网络中经过的路径。
有源树(最短路径树SPT:Source or Shortest Path Tree)
由组播源到用户间的最短路径构成。路由器必须为每个组播源保存路由信息,占用内存较多 (S,G),但路径最优,接收者到多播源是最佳路径,延迟最小。
共享树(Shared Tree)
以网络上某特定节点为公用根。占用内存较少 (*,G),路径不一定是最优的,多播流转发必须先经过RP,引入额外的延迟。对 RP 的可靠性和处理能力要求很高。
(1)最短路径树(基于源的分发树)
有源树的根是组播数据流的来源,有源树的分支形成了通过网络到达接收站点的分布树。因为有源树以最短的路径贯穿网络,所以也被成为最短路径树(SPT:Shortest Path Tree )。
(2)共享树
共享树的根不在多播数据流的源头,而位于网络中管理员指定的汇聚点(RP:rendezvous point)。所有多播源先把多播流发送到RP,再由RP分发到各接收站点,目标组地址向他的多个源节点共享多播分布树。
组播路由转发和单播路由转发是相反的
a、单播路由转发关心数据报文要到哪里去。
b、组播路由转发关心数据报文从哪里来。
组播路由转发使用 “反向路径转发”机制避免环路,多播数据流从多播路由器入口路由到出口转发出去。
a、入口:由RPF决定
b、出口:由IGMP和多播路由协议决定的
反向路径转发(RPF, Reverse Path Forwarding)
何谓RPF?
路由器收到组播数据报文后,只有确认这个数据报文是从自己到源的出接口上到来的,才进行转发,否则丢弃报文。
RPF检查
在单播路由表中查找到组播报文源地址的路由,如果该路由的出接口就是报文的入接口,RPF成功,否则RPF失败。
(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离开组播组过程:
IGMP v2离开组播组过程:
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)IGMP Snooping
IGMP Snooping为了解决在多路访问网络中,将组播只发送到需要接收的主机。IGMP Snooping 是交换机的特性,允许交换机“监听”用户和路由器之间的IGMP流量。运行IGMP Snooping的二层设备通过对收到的IGMP报文进行分析,为端口和MAC组播地址建立起映射关系,并根据这样的映射关系转发组播数据。
当二层设备没有运行IGMP Snooping时,组播数据在二层被广播。当二层设备运行了IGMP Snooping后,已知组播组的组播数据不会在二层被广播,而在二层被组播给指定的接收者。
IGMP Snooping通过二层组播将信息只转发给有需要的接收者,可以带来以下好处:
1)减少了二层网络中的广播报文,节约了网络带宽;
2)增强了组播信息的安全性;
3)为实现对每台主机的单独计费带来了方便。
路由器端口(Router Port):交换机上朝向三层组播设备(DR或IGMP查询器)一侧的端口,如Switch A和Switch B各自的Ethernet1/1端口。交换机将本设备上的所有路由器端口都记录在路由器端口列表中。
成员端口(Member Port):又称组播组成员端口,表示交换机上朝向组播组成员一侧的端口,如Switch A的Ethernet1/2和Ethernet1/3端口,以及Switch B的Ethernet1/2端口。交换机将本设备上的所有成员端口都记录在IGMP Snooping转发表中。
IGMP Snooping配置:
ip igmp snooping 全局使能,默认使能所有vlan
ip igmp snooping vlan 69 使能单个VLAN
ip igmp snooping vlan 1 mrouter interface f0/7 设置接口为静态路由连接口
ip igmp snooping vlan 1 static 0100.5e01.0101 interface Fa1/2
show ip igmp snooping
show ip igmp snooping mrouter
show ip igmp snooping groups
clear ip igmp snooping group
(7)IGMP querier
IGMP v1:DR就是querier;
IGMP v2:比较IP地址,IP地址小的就是querier。
(8)IGMP filter
(9)IGMP Profiles
(10)IGMP Proxy
简化的组播末端协议,其核心是在运行环境简单的组播协议末端,不运行复杂的PIM/DVMRP等组播路由协议,通过IGMP/MLD代理的方式与组播协议对话,从而简化在低端设备上的组播实现。其优点是当网络中没有路由器时,IGMP Proxy设备可以起到查询者的作用。Proxy设备的上联端口执行主机的角色,下联端口执行路由器的角色。MLD(Multicast Listener Discover),组播侦听发现协议。
IGMP/MLD协议是用来在组播路由器和客户端间通信的协议,同时也存在组播路由器和客户端两种协议行为,IGMP/MLD代理设备在配置上明确上游接口和下游接口。对于上游接口,运行IGMP/MLD的HOST端协议,收集下游接口的组播成员关系,把从下游收集的IGMP/MLD加入信息汇聚后,以IGMP/MLD客户端的身份发送加入、离开消息给上层的组播路由器。在下游接口,则运行IGMP/MLD的ROUTER端协议,周期性发送查询,并处理组播成员关系报告。IGMP proxy 功能与 PIM 及 DVMRP的功能是互斥的。
IGMP Proxy与IGMP Snooping实现功能相同但原理相异:
IGMP Snooping只是通过侦听IGMP的消息来获取有关信息。
IGMP Proxy则拦截了终端用户的IGMP请求并进行相关处理后,再将它转发给上层路由器. 所以在IGMP snooping里面形成的table是组成员和交换机接口的对应关系,在IGMP Proxy里面形成的是(组播路由表)。
PIM(Protocol Independent Multicast)称为协议无关组播。
组播依靠的单播路由协议: 静态路由、RIP、IGRP、IS-IS、BGP、OSPF,总之,单播路由协议是什么都没关系。
密集模式(Dense-mode)
稀疏模式(Sparse-mode)
(1)PIM-DM协议原理
使用逆向路径转发(RPF)机制,先向网络洪泛(Flood),然后根据组播组成员关系进行剪枝 (Prune),使用Assert机制来剪枝重复的数据流(MA网络中,存在多台路由器,选择一台最优路由器向上游发送加入组的消息)。适合于小规模的网络。
(2)PIM-DM的五种包:
(3)PIM-DM协议运行过程:
PIM邻居发现
每个多播路由器在连入多播网络时,在启动了PIM-DM的接口每隔30秒(缺省)都用多播PIM hello消息以宣布它的连入。105秒内收不到邻居hello,则认为邻居失效。起始PIM-DM在多播转发时经过RPF检测后会将多播流发给所有PIM邻居路由器。
PIM-DM 泛滥与剪枝
多播树的生成
PIM-DM以flood-and-prune方式生成多播分布树。
多播路由器prune的典型原因:
新接收节点加入多播组
当有新的多播组成员要加入时,它所连入的当前路由器要加入多播树,由于当前路由器以前被prune过,但仍保留有(S,G)信息,所以它可以向它的上游PIM邻居单播Graft (嫁接)消息,上游路由器回送Graft ACK。Graft嫁接消息一直逐跳向上游发送,直到成功加入多播树上。
多路访问环境下的多播转发—PIM转发路由器选举
路由器从其“出接口列表” 中的某个接口收到数据,只有其中一个路由器应该继续发送数据,以避免重复。
路由器发送 “PIM Assert”消息。
查看单播路由表,计算distance和metric值,谁到源的路由最优谁获胜,如果distance和metric相等,IP地址大的获胜,成为forwarder转发多播数据流量,输的就停止转发 (prune修剪接口)。
(4)PIM-DM 评价
对于小型网络来说非常有效,用于实验室、设备性能测试。
优势:
潜在问题:
(5)PIM-DM配置实施
首先保证单播路由通信正常
在网络设备上配置组播协议
ip multicast-routing
ip pim dense-mode
配置接收节点
查看与排错
Ip pim dense-mode //在接口上启用PIM-DM,配置PIM-DM的时候需要
注意:
在多路访问接入网络中,理解IGMP查询路由器、PIM指派路由器(DR)以及PIM转发路由器(IP地址越小的是查询路由器、最大的是指派路由器(PIM-DM协议本身不需要一个DR,在IGMPv1中有意义,因为IGMPv1本身没有查询进程,要靠路由协议来选出DR以管理IGMP查询)和转发路由器。
Show ip igmp interface interface-type //查看接口运行组播的情况
(1)PIM-SM协议概述
支持共享树和源树。
假设没有主机需要接收组播数据,除非它们明确地发出了请求使用“汇聚点”(RP, Rendezvous Point),发送者和接收者在RP处进行汇聚,发送者的第一跳路由器把发送者注册到RP上,接收者的DR(直连网络上的负责人)为接收者加入到共享树 (树根在RP)。
适合于大规模的企业网络,是任何网络的优选方案,不管其规模和成员密集程度。
(2)PIM-SM的9种包
(3)PIM-SM与PIM-DM异同
相同点:
不同点:
(4)PIM-SM协议运行过程
创建共享树
创建从源到RP的SPT
SPT切换
(5)配置PIM-SM
Ip pim sparse-mode
对PIM-SM的配置,惟一的要求是RP的标识。路由器获知RP的地址的方法?也就是RP的常见确定机制有下列3种:
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的命令需要在所有组播路由器上配置。
静态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-discovery
和send-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
即可)
动态方式通告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部署在同一台路由器上。
选举规则:
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)场景
为了增强 PIM-SM 中 RP 节点的可靠性,以及对网络中的组播流量进行分担,可在网络中选取若干 RP 点,运行 Anycast RP,达到冗余备份,负载分担的目的。
(2)原理
多个 RP 配置一个相同的 Anycast RP 地址,这个地址使用 RP 上的一个接口(通常是逻辑接口,如 LoopBack 接口)。之后 RP 使用这个接口地址对外发布组到 RP 的映射信息。由于使用的是 Anycast RP 地址,所以组成员在加入时,会向拓扑距离最近的一个 RP 发起。在这些 RP 之间使用各自不同的地址建立 MSDP 连接,利用 MSDP 实现多播源信息在所有 RP 之间的同步。Anycast RP 实际上是 MSDP 在域内的一个特殊应用。
(MSDP:多播源发现协议,作用是在其他PIM域中发现多播源)
(3)Anycast RP操作原理
1)SA:source-active (包括多播源、多播组、RP地址信息)。
2)当有一个源注册到RP1时,RP1会通过MSDP将该源的信息告诉RP2,RP2便可反向建立SPT到该源,这样保证了加入RP2的组成员也能够收到该多播源发送的多播流。
3)RP1down后,单播路由收敛,所有组成员会加入到RP2上,原来注册到RP1上的源也会注册到RP2上,保证多播网络的稳定,快速failover。收敛时间即单播路由的收敛时间。
4)在不同的PIM-SM域之间建立MSDP连接时,是使用TCP 639, IP地址高的初始化TCP连接,60秒一次keepalive,75秒后没数据或keepalive则重建TCP。
5)组播源向RP注册之后,那么RP将这些源信息通过在MSDP连接上发送Source-Active (SA)到远程RP,以提供组播源的信息。因为RP收到Source-Active (SA)后,也是要做RPF检测。
6)MSDP只能在PIM-SM下使用。
(4)SA filter
1)对于SA,无论是发出去的还是收到的,无论是源自其它MSDP Peer还是自己产生的,都可以通过Filter List来做过滤,所过滤的条件可基于ACL、route map、RP access list、RP route map,这里的ACL必须是扩展ACL。
2)对接收的SA做过滤的命令为:ip msdp sa-filter in xxx yyy
(xxx为对端MSDP路由器地址,yyy为ACL、route map、RP access list、RP route map,如果不跟yyy,则表示所有SA);
3)对发送出去的SA做过滤的命令为:ip msdp sa-filter out xxx yyy
(xxx为对端MSDP路由器地址,yyy为ACL、route map、RP access list、RP route map,如果不跟yyy,则表示所有SA)。
4)SA Filter配置
ip msdp peer 200.0.0.1 connect-source Loopback1 remote-as 200
ip msdp sa-filter out 200.0.0.1 list 110
ip msdp originator-id Loopback1
access-list 110 deny ip host 10.1.1.13 host 224.100.100.100
access-list 110 permit ip any any
ip msdp peer 100.0.0.1 connect-source Loopback1 remote-as 100
ip msdp originator-id Loopback1
(1)组播双向树简介
PIM-SM:SPT+RPT (*,G) (S,G)
Bidirectional PIM:RPT
使用相同的转发树(RPT)为源到RP和RP到接收者转发组播流量。
在Bidirectional-PIM运行模式下,无需建立任何源树条目(S,G),所有的组播流量都使用共享树转发,在该模式下,没有任何源注册消息,组播源和接收者都加入到同一棵共享树。
(2)组播双向树的运行过程
通过静态或者动态的方式为双向树指定RP。组播流量逐跳发送给RP,而不是发送注册报文。DF:Designated Forwarded,指定转发器。
接收者沿着RP方向发送加入组消息。通告RPF检测,朝着RP方向为IIF。
在MA网络中,发往RP的组播流量又由RF转发。如果接收者和组播源处于一个网段内,可以直接向着感兴趣的接收者发送,而不需要经过RP。
每条链路中,拥有到达RP最佳路径的路由器将被选为DF(Designated Forwarder),DF负责响应和转发发往RP的流量,对于本地源和接收者无需转发。
DF 转发所有发往上游RP的流量,存在接收者的下游路由器往DF发送Join消息。
(3)DF的选举
DF的选举(选择到达RP最佳路径的路由器):
1)比较到达RP的AD值;
2)比较到达RP的Metric;
3)当Metric一样,IP地址大的优先。
DF选举Messages:
1)Offer:用于通告到达RP的Metric;
2)Winner:DF 用于通告或者重新确立它的地位;
3)Backoff:DF 收到一个更优的offer报文,自己退避;
4)Pass:DF 发送Pass报文给发出更优Offer的报文的路由器。
发送offer报文,包含到达RP的Metric值。
选举过程:
1)发送offer报文,包含到达RP的Metric值。
2)邻居收到后和自己的Metric比较,收到更优的则自己退避。
3)连续3次无争议的Offers,则发送一个Winner并宣称自己是DF。
(4)组播双向树的配置
Router(config)#ip pim bidir-enable
Router(config)#ip pim rp-address 2.2.2.2 bidr
组播边界机制被用来限制组播流量的转发的域。
组播边界配置:
access-list 10 deny 224.10.10.0 0.0.0.255
access-list 10 permit any
interface FastEthernet0/0
ip multicast boundary 10 out
access-list 100 deny ip any 123.1.1.0 0.0.0.255 224.10.10.0 0.0.0.255
access-list 100 permit ip any any
interface FastEthernet0/1
ip multicast boundary 100 out