1. 组播概述
单播数据包传输的路径是利用“逐跳”(hop-by-hop)转发原理在IP网络中传输。相较于IP单播,IP组播通信的特点是数据包的目的地址不是一个特定的单一IP地址,而是一个特定组地址。
为了实现信息源和组播组成员跨越互联网进行通讯,需要提供网络层组播,组播数据包的目的IP地址使用组播IP地址。也就是说组播源不关注接收者的位置信息,只要将数据发送到特定组IP地址即可。
1.1. 组播方式的优势
- 无重复流量,提高效率,优化性能
- 节省设备与带宽资源,分布式应用
- 安全性高
- 有偿性有保障
1.1. 组播方式的劣势
- 组播是UDP,采用尽力而为的传输方式
- 没有拥塞避免机制
- 可能出现报文重复/报文失序的现象
1.2. 组播基本架构
- 组播源到路由器
- 路由器到路由器
- 路由器到接收端
1.3. 组播服务模型
-
ASM(any-source multicast)任意源组播
ASM全称为Any-Source Multicast,译为任意源组播。在ASM模型中,任意发送者都可以成为组播源,向某组播组地址发送信息。接收者加入该组播组后,能够接收到发往该组播组的所有信息。在ASM模型中,接收者无法预先知道组播源的位置,接收者可以在任意时间加入或离开该组播组。 -
SSM(source-specific multicast)指定源组播
SSM全称为Source-Specific Multicast,译为指定源组播。在现实生活中,用户可能仅对某些源发送的组播信息感兴趣,而不愿接收其它源发送的信息。SSM模型为用户提供了一种能够在客户端指定信源的传输服务。SSM模型和ASM模型的根本
1.4. 组播构成
组播网络由组播源,组播组成员与组播路由器组成。
- 组播源的主要作用是发送组播数据。
- 组播组成员的主要作用是接收组播数据,因此需要通过IGMP让组播网络感知组成员位置与加组信息。
- 组播路由器的主要作用是将数据从组播源发送到组播组成员。
1.5. 组播网络基本架构
- 组播网络大体可以分为三个部分:
源端网络:将组播源产生的组播数据发送至组播网络。
组播转发网络:形成无环的组播转发路径,该转发路径也被称为组播分发树(Multicast Distribution Tree)。
成员端网络:通过IGMP协议,让组播网络感知组播组成员位置与加入的组播组。
- 成员端网络通过IGMP协议可以让组播网络感知组播组成员位置与加入的组播组。
- 组播转发网络形成组播分发树,需要组播路由协议的支持。
- 通过组播路由协议有多种,最常用的是PIM协议,也就是本文的重点。
1.6. 组播协议介绍
组播网络需要基于多种组播协议才能建立转发路径:
-
工作在成员端网络的主要是IGMP(Internet Group Management Protocol,因特网组管理协议)协议,用于告知组播网络,组成员的位置与所加组播组。
交换机第二层优化:CGMP、IGMP Snooping或RCMP -
工作在组播转发网络的协议主要是PIM,MSDP,MBGP。
- PIM(Protocol Independent Multicast,协议无关组播)协议主要作用是生成AS域内的组播分发树。
- MSDP(Multicast Source Discovery Protocol,组播源发现协议)主要作用是帮助生成AS域间的组播分发树。
- MBGP(Multicast BGP,组播BGP)主要作用是帮助跨域组播流进行RPF校验。
2. IP组播
一台源ip主机和多台(一组)ip主机之间进行,中间的交换机和路由器根据接收者的需要,有选择地对数据进行复制和转发,主要应用有在线直播,网络电视,远程教育等。
2.1. 组播ip地址,(D类)224.0.0.0~239.255.255.255
- IPv4地址空间分为五类,即A类、B类、C类、D类和E类。D类地址为IPv4组播地址,范围是从224.0.0.0到239.255.255.255,用于标识组播组,且仅能作为组播报文的目的地址使用,不能作为源地址使用;
- 组播源地址是单播地址,目的地址为组地址。
- IPv4组播报文的源地址字段为IPv4单播地址,可使用A、B或C类地址,不能是D类、E类地址。
- 在网络层上,加入同一组播组的所有用户主机能够识别同一个IPv4组播组地址。一旦网络中某用户加入该组播组,则此用户就能接收以该组地址为目的地址的IP组播报文。
224.0.0.0 ~224.0.0.255 为路由协议预留永久组播地址
224.0.1.0~231.255.255.255 用户组播地址,any-source组播地址
232.0.0.0~232.255.255.255 用户组播地址,source-specific组播组地址
233.0.0.0~238.255.255.255 用户组播地址
239.0.0.0~239.255.255.255 本地管理的any-source组播组地址,即239.0.0.0/8为私有组播地址
区别是接收者已经通过其他手段预先知道了组播源的具体位置。SSM和ASM使用不同的组播地址范围,直接在接收者和组播源之间建立组播转发树。
2.2. 组播MAC地址
以太网传输单播数据帧时,目的MAC地址使用的是接收者或者去往接收者的下一跳网关设备的MAC地址。但是在传输组播报文时,目的端不再是一个具体的接收者,而是一个成员不确定的组,如果目的MAC封装成接收者的MAC地址,则需要为每个接收者分别发送一份组播帧。
显然,这是不合理的。为了在数据链路层实现组播信息的高效传输,需要提供链路层组播转发能力,链路层组播使用组播MAC地址。
- 组播mac地址,第一个自己的最后一位为1
- 单播mac地址,第一个字节的最后一位为0
- IANA规定,IPv4组播mac地址的高24位为0x0005e,第25位固定位0
2.3. 组播ip与mac的映射
- 需要组播ip地址与组播mac地址的自动映射,mac地址的低23bit为组播ip地址的低23bit
- ip组播地址前4bit是110,代表组播标识,而后28bit中只有23bit被映射到mac地址,这样ip地址就有5bit信息丢失
3. IGMP协议
internet group managenent protocol 因特网组管理协议,用来在接收者和其直接相邻的组播路由器直接建立维护组播组成员关系。
3.1. IGMP各版本件差异
IGMP机制 | IGNPv1 | IGMPv2 | IGMPv3 |
---|---|---|---|
查询器选举 | 依靠其他协议 | 自己选举 | 自己选举 |
成员离开方式 | 静默离开 | 主动发送离开报文 | 主动发送离开报文 |
特定组查询 | 不支持 | 支持 | 支持 |
指定组源 | 不支持 | 不支持 | 支持 |
-
二层中组播数据转发的问题
组播数据二层被泛洪,造成网络资源浪费, 存在安全隐患 -
IGMP snooping机制可以实现组播数据帧在数据链路层的转发和控制
3.2. IGMP1
- IGMPv1的工作机制
普遍组查询与响应
响应抑制机制
3.2.1. IGMPv1支持两种类型的报文
- 普遍组查询报文(General Query):路由器周期性地向224.0.0.1地址(表示同一网段内所有主机和路由器)发送通用查询报文,默认查询周期为60秒,发送周期可以通过命令配置。路由器周期性向225.0.0.1地址发送通用查询报文,默认查询周期为60s,
- 成员关系报告报文(Membership Report):用于主机加入某个组播组。
如图所示,假设Client A和Client C想要接收组播组G1的数据,Client B想要接收组播组G2的数据。普遍组查询和响应过程如下:
- RTA发送普遍组查询报文
网段内所有主机都接收到该查询报文,Client A和Client C是组播组G1成员,则在本地启动定时器Timer-G1。Client B是组播组G2的成员,则在本地启动定时器Timer-G2。定时器的范围为0~10秒之间的随机值。定时器先超时的主机发送针对该组的成员报告报文。Client A上的Timer-G1首先超时,向该网段发送目的地址为G1的成员报告报文。Client B上的Timer-G2超时,向该网段发送成员报告报文,目的地址为G2。
Client C侦听到Client A的成员报告报文,则停止定时器Timer-G1,不再发送针对G1的成员报告报文。这就是响应抑制机制,可以减少网段上的协议流量。
RTA接收到成员报告报文后,了解到本网段内存在组播组G1和G2的成员,一旦RTA收到G1和G2的组播数据,将向该网段转发。
新接入主机Client D想加入组播组G3,为了快速接收组播数据,不等待普遍组查询报文,而立即发送G3的成员报告报文。RTA收到成员报告报文后,了解到本网段内出现了组播组G3的成员。一旦有G3的组播数据到达RTA,将向该网段转发。
- IGMPv1没有专门定义离开组消息
当Client离开组播组时,将不会再对普遍组查询报文做出回应。假设所有Client退出组播组,Client将不再对普遍组查询报文进行响应。由于网段上不存在组播组的其他成员,RTA不会收到任何成员报告报文,则在一定时间(130秒=1202+10,即组成员关系超时时间=IGMP普遍查询消息发送间隔 × 健壮系数 + 最大查询响应时间)后,删除对应的组播转发项。
查询器选举依赖组播路由协议,当一个成员离开后,602+10 =130s后删除对立项。
3.3. IGMP2(现在普遍使用)
3.3.1. 工作原理
如图所示,在IGMPv2中,Client B离开组播组G2的过程如下:
- Client B向本地网段内的所有组播路由器(目的地址为224.0.0.2)发送针对组G2的离开报文。
- 查询器收到离开报文,会发送针对G2的特定组查询报文,同时启动组成员关系定时器Timer-Membership=发送间隔x发送次数。缺省每隔1秒发送一次,一共发送两次,发送间隔和发送次数可以配置。
- 如果网段内不存在其他组G2的成员,则路由器不会收到组G2的成员报告报文。在Timer-Membership超时后,删除组播转发表项中对应的下游接口。路由器将不再向该网段转发G2的组播数据。如果网段内还有G2的其他成员,则这些成员在收到特定组查询报文后,会在最大响应时间内发送G2的成员报告报文。路由器继续向该网段转发G2的组播数据。
3.3.2. 查询选举机制
- 相对于IGMPv1,IGMPv2使用独立的查询器选举机制。
所有IGMPv2路由器在初始状态时都认为自己是查询器,向本地网段内的所有主机和路由器发送普遍组查询报文。其他路由器在收到该报文后,将报文的源IP地址与自己的接口地址作比较。IP地址最小的路由器将成为查询器,其他路由器成为非查询器。
如图所示,RTA的接口IP地址小于RTB的接口IP地址,则RTA当选为查询器。IGMP的查询器和非查询器都会处理IGMP组加入信息,但是只有查询器负责发送查询报文。IGMP非查询器不处理IGMPv2离开报文。
所有非查询器上都会启动一个定时器。如果在该定时器超时前收到了来自查询器的查询报文,则重置该定时器;否则就认为原查询器失效并发起新的查询器选举。
3.3.3. 配置方式
multicast routing-enable
int g 0/0/1
ip addree 192.168.1.1 24
igmp enable
igmp version 2
dis igmp interface
dis igmp group
3.4. IGMP3
与IGMPv2相比,IGMPv3报文的变化如下:
- IGMPv3报文包含两大类:查询报文和成员报告报文。IGMPv3没有定义专门的成员离开报文,成员离开通过特定类型的报告报文来传达。
- 查询报文中不仅包含普遍组查询报文和特定组查询报文,还新增了特定源组查询报文(Group-and-Source-Specific Query)。该报文由查询器向共享网段内特定组播组成员发送,用于查询该组成员是否愿意接收特定源发送的数据。特定源组查询通过在报文中携带一个或多个组播源地址来达到这一目的。
- 成员报告报文不仅包含主机想要加入的组播组,而且包含主机想要接收来自哪些组播源的数据。IGMPv3增加了针对组播源的过滤模式(INCLUDE/EXCLUDE),将组播组与源列表之间的对应关系简单的表示为(G,INCLUDE,(S1、S2…)),表示只接收来自指定组播源S1、S2……发往组G的数据;或(G,EXCLUDE,(S1、S2…)),表示接收除了组播源S1、S2……之外的组播源发给组G的数据。当组播组与组播源列表的对应关系发生了变化,IGMPv3报告报文会将该关系变化存放于组记录(Group Record)字段,发送给IGMP查询器。
在IGMPv3中一个成员报告报文可以携带多个组播组信息,而之前的版本一个成员报告只能携带一个组播组。这样在IGMPv3中报文数量大大减少
4. PIM
PIM(Protocol Independent Multicast,协议无关组播)协议无关指的是与单播路由协议无关,即PIM不需要维护专门的单播路由信息。作为组播路由解决方案,它直接利用单播路由表的路由信息,对组播报文执行RPF检查,检查通过后创建组播路由表项,从而转发组播报文。
4.1. PIM两种模式
-
PIM-DM(PIM-Dense Mode,PIM密集模式)
- PIM-DM模式主要用在组成员较少且相对密集的组播网络中,该模式建立组播分发树的基本思路是“扩散-剪枝”,即将组播流量全网扩散,然后剪枝没有组成员的路径,最终形成组播分发树。
-
PIM-SM(PIM-Sparse Mode,PIM稀疏模式)
- PIM-SM主要用在组成员较多且相对稀疏的组播网络中,该模式建立组播分发树的基本思路是先收集组成员信息,然后再形成组播分发树。使用PIM-SM模式不需要全网泛洪组播,对现网的影响较小,因此现网多使用PIM-SM模式。
- PIM-SM模式根据组播服务模型又可以分为:
- PIM-SM(ASM):为任意源组播建立组播分发树
- PIM-SM(SSM):为指定源组播建立组播分发树
4.2. 组播分发树
-
在PIM组播域中,以组播组为单位建立从组播源到组成员的点到多点的组播转发路径。由于组播转发路径呈现树型结构,也称为组播分发树(MDT,Multicast Distribution Tree)。
-
协议号103,常用的是PimV2,组播地址为224.0.0.13
-
特点: 无论网络中的组成员有多少,每条链路上相同的组播数据最多只有一份。被传递的组播数据在距离组播源尽可能远的分叉路口才开始复制和分发。
-
主要分类:
- SPT: 以组播源为根,组播组成员为叶子的组播分发树称为SPT(Shortest Path Tree),SPT又被称为源树,在PIM-DM与PIM-SM中均有使用。
- RPT: 以RP(Rendezvous Point)为根,组播组成员为叶子的组播分发树称为RPT(RP Tree),RPT又被称为共享树,,在PIM-SM中使用。
4.3. PIM路由表项
PIM网络中存在两种路由表项(S,G)路由表项或(* ,G)
表项,S表示组播源,G表示组播组。*表示任意。
-
(S,G)
路由表项主要用于PIM网络中的建立SPT,对于PIM-DM,PIM-SM网络适用。 -
(*,G)
路由表项主要用于PIM网络中建立RPT对于PIM-SM网络适用。 -
PIM路由器上可能同时存在两种路由表项。当收到源地址为S,组地址为G的组播报文,且RPF检查通过的情况下,按照如下的规则转发:
如果存在(S,G)路由表项,则由(S,G)路由表项指导报文转发。
如果不存在(S,G)路由表项,只存在(*,G)
路由表项,则先依照(*,G)
路由表项创建(S,G)路由表项,再由(S,G)路由表项指导报文转发。
4.4. PIM-DM基本概述
采用(推push)模式转发组播报文
4.4.1. PIM-DM的工作机制
PIM-DM的关键机制: 邻居发现 扩散与剪枝 状态刷新 嫁接 断言
组播分发树(MDT multicat distribution tree)
特点,无论网络中的组成员有多少,每条链路上相同的组播数据最多只有一份。
被传递的组播数据在距离组播源尽可能远的分叉路口才开始复制和分发。
4.4.2. PIM-DM设计思想
首先将组播数据报文扩散到各个网段
然后再裁剪掉不存在组成员的网段
通过周期性的扩散-裁剪,构建并维护一棵连接组播源和组成员的单向无环spt
gratf机制 新的组成员加入组播组后,快速得到组播报文
assert机制 避免重复组播报文
4.4.3. PIM-DM 配置
rta
multicast routing-enable
int g 0/0/0
pim dm
int g 0/0/1
pim dm
int g 0/0/2
pim dm
rtd
multicast routing-enable
int g 0/0/0
pim dm
int g 0/0/1
pim dm
dis pim routing-table
dis pim neighbor
4.4.4. PIM-DM的局限性
PIM-DM适用于组播成员分布较为密集的园区网络,再组播成员分布较稀疏的网络中,组播流量的周期性扩散会给网络带来较大的负担。
4.5. PIM-SM基本概述
使用(拉pull)模式转发组播报文
PIM-SM的关键任务
建立RPT(rendezvous point tree,)汇聚点树也称共享树。
建立SPT最短路径树
适用于组播成员较稀疏的网络环境
PIM-SM的关键机制: 邻居建立 DR竞选 RP发现 RPT构建 组播源注册 spt切换, assert;
4.5.1. PIM-SM配置
rta
multicast routing-enable
int g 0/0/0
pim sm
int g 0/0/1
pim sm
pim
staic-rp 4.4.4.4 #源组播地址路由器
#当用户加入组播组238.1.1.1后能马上接收到组播数据
igmp static-group 238.1.1.1
sw1 交换机vlan接收组播
igmp-snooping enable
vlan 10
igmp-snooping enable
int g 0/0/1
igmp enable
igmp version 2
pim hello-option dr-priority 100 #DR优先级
int g 0/0/1
igmp enable
igmp version 2