组播
一、组播概述:(基于UDP)
在IP网络中,节点之间的通信通常采用点到点的方式。
点到多点的传输:
使用广播:占用不必要的带宽,不需要的人,也会接收到。
- 数据源发送一份数据包
- 链路上传输一份数据包
- 所有主机都会接收数据包
使用单播:需要向每一个接收者单独发送一份数据,当接收者数量增加时,发送源复制的工作负荷会比例增加,当接收者数据巨大时,一些接收者接收数据的延时大大增加,对延时敏感的应用如多媒体会议、视频监控。
- 数据源发送多份数据包
- 链路上传输多份数据包
- 只有数据接收者才会收到数据包
使用组播:
- 数据源发送一份数据包
- 链路上传输一份数据包
- 只有数据接收者才会收到数据包
组播优缺点:只要是组播都是用UDP
- 优点:
增强效率,控制网路流量,减少服务器和CPU的负载
优化性能,消除流量冗余
分布式应用,使多点传输成为可能
- 缺点:
尽最大努力交付(UDP),不会重传
无拥塞控制(qos),无法保证优先传输
数据包重复
数据包的无需交付
组播典型应用:
多媒体会议、IP视频监控,QQ共享白板等多对一。。。
组网技术需求:
-
组播地址:
224.0.0.0-- 239.255.255.255(没有什么广播地址和网络地址)
- 本地协议预留组播地址:
224.0.0.0--224.0.1.255(保留给某些协议具体使用)仅供本地网段上的网络协议使用。
- 本地管理组地址:(私网)
239.0.0.0--239.255.255.255
- 用户组播地址:(公网)
224.0.2.0--238.255.255.255
- 组播MAC地址:
以太网:01-00-5e-xx-xx-xx
组播IP地址到组播MAC地址的映射:
组播中:32个IP地址对应一个MAC
组播MAC地址,第一个字节的最后一位为1。
单播MAC地址,第一个字节的最后一位为0。
二、组播组管理协议:
(1)IGMP简介:
- 是运行在主机和路由设备之间的协议
→ 主机通过组播组管理协议加入或离开某些组播组
→ 路由设备通过组播组管理协议管理和维护本地的组播组信息
- 常用的组播组管理协议为IGMP(管理和维护本地组的信息)
加入、查询、离开
离开时,得表示自己是不是最后一个人,如果是最后一个人,路由设备得删除组播组信息
(2)、组播分发树模型(路由器和路由器之间)
- 是组播数据的转发路径
- 根据树根位置的不同,组播分发树模型分为:
→ 最短路径树模型:源到每一个接收者的最短路径(比较耗资源)
→ 共享树模型:源到每一个接收者的路径不一定是最短的
(3).组播转发机制:
- 组播转发机制和单播转发机制不同:
→ 单播转发关心报文到哪里去(只关心报文的目的地址)
→ 组播转发关心报文从哪里来
- 组播转发机制-----当收到两个数据包,会通过单播路由表查询到组播源最短的路径,从而确认收哪个数据包,不收哪个数据包,所有没有单播路由表,就不可能有组播转发表。称为逆向路径转发。(RPF校验)
(4).组播路由简介:
- 组播路由协议和单播路由协议一样,用于建立数据转发的路径
- 根据作用范围组播路由协议可以分为域内组播路由协议和域间组播路由协议:
→ 域内组播路由协议主要包括DVMRP、MOSPF和PIM(基本上都域内)
→ 域间组播路由协议主要包括MSDP、MBGP
- 域内组播路由协议根据建立的组播分发树的不通可以分为基于SPT的组播路由协议和基于RPT的组播路由协议
→ 基于SPT的组播路由协议包括PIM DM、DVMRP、MOSPF
→ 基于RPT的组播路由协议包括PIM SM
(5)组播协议体系
- 主机——路由器:IGMP
- 路由器——路由器:PIM
- 域间:MSDP
三、组播模型:
(1)组播模型
- 根据接收者对组播源处理方式的不同,组播模型分为以下两类:
→ ASM(任意信源组播)
→ SSM(指定信源组播)232.0.0.0/8
(2).ASM模型:
- 接收端只能选择加入某组播组,而无法具体选择组播源:
- 无法具体选择组播源。无论谁发的都接收。
(3).SSM模型:
- 接收指定组播源
四、组播转发机制
- 不同于单播,组播数据转发路径基于树形结构
- 不同于单播,组播转发需要检查报文的入接口是否最优,单播是检查到达目的是不是最近的。
(1)组播分发树概念:
- 组播分发树指组播数据在网络中的转发路径,由组播路由协议建立
- 根据树根节点的不同,组播分发树可分为最短路径树和共享树
→ SPT(最短路径树):树根为组播源所连接的指定路由器
→ RPT(共享树):树根为RP(汇聚点)
(2).SPT(最短路径树)
- 最短路径树,每个接收者到源都是最近的
- 每个组播源都要有一个转发表(效率低)
- 信息任意传播,传到接收者前的一个路由器时,才会停止
(2)RPT(共享树)
- 做RPF校验时,不会去找组播源而是到RP最近的,所有的接收者到RP的路径是最短的
- 组播源把信息发给RP,谁要,谁在向RP请求。
- 只需要维持一张转发表,节省资源,减小转发表的规模
(3).RPF介绍:(防止组播数据发生环路)
- RPF(逆向路径转发)
→ 确保组播数据沿正确路径传输
→ 避免组播路径环路的产生
- RPF检查的过程如下:
→ 如果数据包是在到达组播源的最优路径上到达,则RPF检查成功,数据包被转发
→ 如果RPF检查失败,弃数据包
- RPF检查基于的是单播路由表
RPF检查失败:
RPF检查成功:
如果单播路由表里面的路由是等价路由,则选择单播路由表中下一跳IP地址大的作为下一跳。
五、组播路由协议:
- 组播分发树由组播路由协议建立(SPT,RPT)
- 不同的组播路由协议可能基于不同的组播分发树模型
(1).组播路由协议概述
- 组播路由协议运行在三层组播设备之间,用于建立和维护组播路由,并正确、高效地转发组播报文。
- 组播路由协议建立了从一个数据源端到多个接收端的无环数据传输路径,即组播分发树。
- 对于ASM组播模型,组播路由协议可以分为域内和域间两类:
→ 域内组播路由协议用于在AS内部发现组播源并构建组播分发树
→ 域间组播路由协议用于实现组播信息在AS之间的传递(MBGP)
(2).组播路由协议的模式:
- 组播路由协议有密集和稀疏两种模式:
- 全部发,不需要的向源请求,发起剪枝报文。(推的模式)(SPT)
- 只发给离我最近的路由器,接收者发送一个加入消息,再发给接收者(拉的模式)(RPT)
(3).域内组播路由协议:
- DVMRP(距离矢量组播路由协议)
- MOSPF(组播ospf协议)
- PIM(协议无关组播)
→ PIM-DM(密集模式)
→ PIM-SM(稀疏模式)
→ PIM-SSM(接收者指定源接收)
六、PIM概述:(与协议无关组播路由协议)
- PIM-DM是密集模式的组播路由协议,该协议假定网络中组播接收者较多,且分布于大部分网络设备上,因此采用“推”的方式将组播流量周期性的扩散到网络中的所有邻居设备上。
- PIM-DM在RFC3973中定义,适用于小型组播网络。
- 协议号:103,封装在IP,组播地址:224.0.0.13
http://bbs.hh010.com/thread-255689-1-1.html //igmp报文类型及分析
PIM-DM(推模式)——SPT(最短路径树)
1、邻居发现机制:
- PIM路由器之间周期性发送hello消息,用于发现邻居、建立并维护邻居关系
- 当共享网段路由器运行的IGMP版本为V1时,可以通过hello消息为该网段选举IGMP查询器。
当连接组播接收者的共享网段上有多台路由器,且路由器运行IGMPV1是,路由器可以通过PIM的Hello消息为该网段的接收者主机选举DR,并由DR充当IGMPv1的查询器。
DR选举:优先级高-------IP地址大(当DR出现故障时,其余路由器超时后没有收到DR发送的hello消息,则会触发新的DR选举过程)在IGMPv1中能应用到。。。。
2.组播报文扩散过程:(周期性)
- 将组播报文扩散到每一个运行PIM-DM的网段,沿途每一台路由器都创建(S,G)表项。
3.剪枝/加入过程:
- 如果不需要上游 发送组播报文,向上游接口发送Prune消息
- 如果共享网段上有路由器连接接收者,则该路由器需向上游发送Join消息覆盖其他路由器发送的Prune消息。
4、SPT的形成:
- 经过扩散-剪枝过程,形成组播源到组播接收者之间的SPT
- 扩散-剪枝过程周期进行,由定时器控制
扩散和剪枝都是周期性进行的
5、嫁接过程:(触发更新)
- 当路由器需要上游发送组播报文时,向上游发送Graft消息
- 上游收到后回复Graft Ack消息
6.断言机制:(组播不支持负载分担,因为是基于UDP传输的)
- 在一个网段内如果存在多台组播路由器,则相同的组播报文可能会被重复发送到该网段
- 通过断言(Assert)机制可以选定网段上唯一的组播数据转发者。
选举方法:
- 单播路由优先级高
- 度量值小
- IP地址大
7.PIM-DM的状态刷新机制
- 通过状态刷新机制可以降低组播报文扩散的频率,节省网络带宽(60s刷新一次)
- 减少组播报文扩散,发送state refresh消息刷新组播转发表(S,G表项)
- 状态刷新机制,使用周期性的协议报文替代周期性的组播数据扩散,可以减少网络消耗,优化网络资源。
- 状态刷新(State Refresh):当下游设备路由器没有加入组时,离组播源最近的一跳路由器会启动状态刷新报文,发给下游无加入组的路由器,设置定时器,在下一次扩散/剪枝,由于下游设备还没接收者,就会抑制接口,不让转发组播报文。
PIM-SM:(拉模式)——RPT(共享路径树)
- 是稀疏模式的组播路由协议。PIM-SM采用“拉”的方式,根据接收者的需求,在组播接收者和组播源之间建立组播转发树
- RFC4601中定义,实际应用中适用于任何形式的网络
- PIM-SM使用RP(汇聚点)作为共享树的根
- 组播源通过DR注册到RP
- 接收者通过DR向RP发起加入
(1).邻居发现和DR选举:
- PIM-SM邻居发现过程和PIM-DM相同
- 共享网段需要选举DR,作为该网段的唯一转发者。(组播源侧和接收侧都需要)
组播源侧通过DR向RP发送数据,接收则通过DR向RP请求数据或加入。
☆:DR优先级高——地址大的
源:由DR向RP发送注册消息
接收者:接收者向DR发送join消息
(2).加入过程:
- 接收者的DR向RP发起加入,沿途每一台路由器都创建(*,G)表项,形成以RP为根的RPT(共享树)
(3).组播源注册:
源发送一个组播流给DR,DR收到后,会发送单播Register消息(封装组播数据)给RP,最后RP会向上游发送一个加入消息
(4)组播源注册停止:
总结:
1、标准:
- 先有接收者——后有组播源:从接收者到RP会形成(*,G)表项,有组播源之后,离组播源最近的DR路由器会向RP发送第一份单播(里面封装了组播数据)的注册消息,RP收到之后,会回复(S,G)的Jion消息,这时候RP与组播源之间形成了源树(SPT)形成,第二份数据包来了之后,离组播源最近的DR路由器会将这份数据包复制一份,一份以组播通过SPT转发给RP,另一份依然封装成单播数据包,当RP收到组播数据报文时,RP会向离源最近的路由器发送注册停止消息,这个停止消息的时间为1分钟,一分钟后又会发注册消息(目的是维护RP到源的(S,G)表项)。
- 先有组播流——后有接收者:第一条路由器(DR)会向RP发送一个注册信息,当没有接收者的情况下,RP回复一个注册停止消息,RP上形成一个(S,G)表项但是没有下行接口,这里的STOP信息也只管一分钟,一分钟后,又会发送注册信息,但是RP上的(S,G)表项永远都不会消失。当来了接收后,RP会立即向离源最近的DR,发送(S,G)的Jion信息。
2、华为
- 先有接收者——组播流:DR将第一份组播数据包封装成单播向RP发送注册信息,RP接收到后,解封装,形成(S,G),向DR发送(S,G)的Jion信息,第二份数据包,DR直接通过组播发送,永远不再发送注册信息。这时这里有个bug,接收者消失,(S,G)表项超时,当再次有接收者时,(S,G)表项永远都不会形成。
PIM-DM:
先确定进口:RPF
出口:默认所有
PIM-SM:
确认进口:单播到RP最近的接口
出口:收到igmp加组消息
(5).RPT向SPT的切换:
缺省情况下,连接接收者的路由器(最后一跳路由器)在探测到组播源之后(即接收到第一个数据包),便立即加入最短路径树(源树),即从RPT向SPT转换。
- 由接收者DR发起向组播源的计入过程
当接收者DR收到数据后,就知道组播源,因为有(S,G)表项,接收者DR通过单播路由表查找到组播源最近的距离
- 由DR或上游路由器向RP发送Prune消息,RP向组播源DP发送Prune消息。
- 最终形成组播源到接收者的SPT
拓扑稳定后就不需要RP了。
PIM-SM之RP发现:
RP发现:在pim-sm组播网络里,担当共享树的树根的节点被称为RP。
RP的作用:
- 共享树里所有组播流通过RP转发到转发者
- RP可以负责几个或者所有组播组的转发,所以网络中可以有一个或多个RP(负责不同的组播组)
如何发现RP:
- 在DR和叶子路由器以及组播数据流将要经过的所有路由器上手工指定RP的IP地址,无法实现RP的冗余备份
- 利用BootStrap协议动态选举RP。
静态RP:
[H3C-pim]static-rp 1.1.1.1 [acl numble] [preferred]
acl numble:用于控制静态RP所服务的组播组范围。取值为2000~2999。
preferred:表示静态RP优先。
动态RP:
- 选举BSR(BS路由器)
- C-BSR组播(224.0.0.13)发送Bootstrap报文,比较Bootstrap报文选举BSR;
- 选举C-RP(候选者):
- C-RP向BSR单播发送Advertisement报文
- BSR将信息汇总为RP-Set,封装在Bootstrap报文中,发布给全网的每一台PIM-SM路由器
全网PIM-SM路由器根据Bootstrap报文包含的信息选举RP。
BSR(BootStrap Router):
PIM-SM网络启动后,负责收集网络内的RP信息,为每个组播组选举出RP,然后将RP集(即组-RP的映射数据库)发布到整个PIM-SM网络的路由器,称之为BSR,
一个PIM-SM域里只有一台BSR,并同时可以存在多台候选BSR(C-BSR)
BSR的选举:
- 如果域内只有一台C-BSR,该台路由器就是该域里的BSR。
- 如果域中存在多台C-BSR,则拥有最高优先级的路由器为BSR。(优先级值越大优先级越高),C-BSR会设置一个计时器130s倒计时来检测当前Active BSR的状态。active BSR会周期发送信息给C-BSR,周期时间为60s。
- 如果域里存在多台拥有相同优先级的C-BSR,则拥有最高IP地址的路由器为BSR。
BSR起来之后会通过组播(224.0.0.13)BootStrap信息全网通告给其他路由器。
BSR 优先级越高越好------地址大的。
配置C-BSR:
[H3C-pim]c-bsr 1.1.1.1 [hash-length 30] [priority 0]
地址:为该台路由器某个接口的地址(最好为环回口地址),该接口一定要启用SM功能。
hash-length:hash掩码长度,后续选RP会用到。默认为30,取值为0~32.
priority:C-BSR的优先级,选择出Active BSR。默认为0,取值为0~255.
C-RP选举:
域中可以配置一个或者多个C-RP,C-RP是某个组范围的RP候选者,可以理解设备被配置了C-RP,那么设备成为了一个组范围RP的选民,RP决定权不在C-RP手中。
[H3C-pim]c-rp 1.1.1.1 group-policy 2000 priority 0 holdtime 150 advertisement-interval 60
地址:为该设备上的接口地址(最好为环回口),该接口一定要启用SM功能。
grou-policy:指定该候选RP所服务组播组的范围。
priority:指定该候选RP的优先级。数值越大,优先级越低。
holdtime:指定BSR等待接收该候选RP发送的Advertisement宣告消息的超时时间。默认为150s。
advertisemen-interval:指定该候选RP发送Advertisement宣告消息的时间间隔。默认为60s。
- 网络中的各路由器将依据RP-Set提供的信息,使用相同的规则从众多C-RP中为特定组播组选择其对应的RP
- 如果域中存在多个优先级相同的C-RP,则ACL覆盖范围小的优先。
- 首先比较C-RP的优先级,优先级较高者获胜(值越小越好)
- 若优先级相同,则使用哈希(Hash)函数计算哈希值,该值较大者获胜(组地址、掩码长度、C-RP地址)
- 若优先级和哈希值都相同,则C-RP地址较大者获胜
RP动态选举:
路由将选举报文(Advertisement)(优先级等参数)发给BSR,BSR形成RP-Set,再进行比较,选出RP后发送BootStrap报文给其他路由器次高RP2,RP3等。
网络中会有个C-BSR作为BSR的备份。
PIM-SSM:(特定源)是借助PIM-SM的部分技术和IGMPv3来实现的,无需维护RP、无需构建RPT,无需注册组播源。
特点:是网络用户能够预先知道组播源的具体位置(IGMPV3)。
分配特定的组播地址段:232.0.0.0~232.255.255.255
生成的是SPT(最短路径树)
IGMPV3:
服务于SSM模型,允许主机指定某些网络发送的某些组播组,增加了主机的控制能力,不仅可以指定组播组,还能指定组播源
相比较IGMPv2,IGMPv3新增的报文:
- 特定源组查询报文
- 报告报文包括主机要加入的组和组播源的过滤模式
- INCLUDE(接收这些源组的流量)
- EXCLUDE(不接受这些源组的流量)
- 取消了成员关系报告抑制机制
IGMP SSM Mapping:
- 为IGMPV1主机和IGMPv2主机提供SSM服务
- 通过在路由器上静态配置SSM地址的映射规则,将IGMPV1和IGMPv2报告报文中的(*,G)信息转化为对应的(S,G)信息。
二层组播:
IGMP Snooping:
- 解决组播报文在二层广播的问题
- 运行在链路层,是二层以太网交换机上组播约束机制,用于管理和控制组播组。
- 通过监听主机发出的IGMP报文,建立组播MAC地址表。
工作机制:
当二层交换机收到主机和路由器之间传递的IGMP报文时,IGMP Snooping分析报文所带的信息:
- 如果主机发出IGMP主机报文时,交换机将该主机加入到相应的组播表中。
- 如果主机发出IGMP离开报文时,交换机将删除与该主机对应的组播表项。
通过不断监听IGMP报文,交换机在二层建立和维护组播MAC地址表,交换机根据组播MAC地址表转发从路由器下发的组播报文。
vlan 2
port e1/0/1 to e1/0/8
igmp-snooping enable
组播VLAN:
解决路由器VLAN 用户复制多份流量的问题。