组播和IGMP
组播
组播定义和地址结构(IP and MAC)
定义
组播是在一台源IP主机和多台IP主机之间进行,中间的网络设备根据接收者的需要,有选择性地对数据进行复制和转发。
组播IP地址
组播目的MAC | 组播源MAC | 组播目的IP | 组播源IP | payload |
---|---|---|---|---|
dest mac | src mac | dest ip | src ip | payload |
组播报文和单播报文类似. 组播源IP和MAC是源服务器的单播IP和MAC。 组播目的IP范围:224.0.0.0~239.255.255.255 组播目的MAC由组播IP映射而来。 D类地址用于组播,D类地址的进一步分类:
序号 | 范围 | 定义 |
---|---|---|
① | 224.0.0.0~224.0.0.255 | 为协议预留的永久组地址 |
② | 232段 | Source-Specific临时组播组地址 |
③ | 除①②外的224-238段 | Any-Source临时组播组地址 |
④ | 239段 | 本地管理的Any-Source临时组播组地址 |
真正可用的其实是③。 |
组播MAC地址
组播MAC地址:最高字节的最低比特位为1。一个组播MAC可能对应多个组播IP。
IPv4组播MAC地址:前24位为0x01005e,第25位为0,后23位等于组播IP的后23位。
IPv6组播MAC地址:前16位为0x3333,后32位等于组播IPv6的后32位。
MAC地址前两位
MAC地址最高字节的最低位
组播IPv4与组播MAC映射关系
组播IPv6与组播MAC映射关系
其他
组播服务模型,分为:ASM(Any-Source Model,任意源服务模型)和SSM(Source-Specific,指定源服务模型)。ASM,源IP任意,目的组播IP唯一。SSM,源IP唯一,目的组播IP任意。
数据的转发原理
组播转发核心:组播路由表项、RPF、组播路由协议。
1、组播数据存在的问题:①环路;②转发时采用了次优路径。
组播数据转发的要求:无环、无次优路径、无重复包。
达到以上要求的手段:RPF机制和组播路由协议。
达到以上要求的路径称为组播分发树–组播源为根、组成员为叶子。
2、RPF,Reverse Path Forwarding,反向路径转发。
组播路由协议:PIM、MSDP、MBGP、IGMP。
工作在组播转发网络:PIM、MSDP、MSGP。
工作在成员端网络:IGMP。
PIM,Protocol Independent Multicast,协议无关组播,主要作用是生成AS域内的组播分发树。
MSDP,Multicast Source Discovery Protocol,组播源发现协议,主要作用是帮助生成AS域间的组播分发树。
MBGP,Multicast BGP,组播BGP,主要作用是帮助跨域组播流进行RPF校验。
IGMP,Internet Group Management Protocol互联网组管理协议,主要作用是告知组播网络,组成员的位置与所加组播组。
3、组播路由表项–(S,G)表
组播信息 | 入接口 | 出接口 |
---|---|---|
(S,G) | IF1 | IF2 |
(S,G)就是(组播源,组播组),如:(1.1.1.1,224.1.1.1) S在单播路由表或MBGP路由表或组播静态路由表中对应的出接口必须等于组播路由表项中的入接口(IF1),若相等,那么RPF检查通过,否则RPF不通过。若同时存在单播路由、MBGP路由和组播静态路由,此时组播静态路由>MBGP路由>单播路由。
其他
冲突域是第一层
广播域是第二层
IGMP
IGMP基本原理和配置
1、IGMP两张表:IGMP组表项、IGMP路由表项。
IGMP组表项
组播组 |
---|
G1 |
G2 |
IGMP路由表项
组播组 | 出接口 |
---|---|
G1 | IF1 |
G2 | IF2 |
2、在最后一跳组播路由器(组播叶子路由器)上,IGMP组表项、IGMP路由表项、PIM路由表(组播协议路由表)可以汇总后形成组播路由表。
其中,IGMP组表项又可为PIM路由表提供组播组地址信息,IGMP路由表项又可为PIM路由表提供出接口信息。
IGMPv1、v2、v3
IGMPv1
1、原理:v1基于查询和响应机制完成组播组管理。
2、查询和响应机制
普遍组查询报文(General Query):IGMP查询器发送General Query给所有主机和路由器,用户查询组播组及其成员。该报文为组播报文。
成员关系报告报文(Report):主机收到General Query后,发送Report,用于申请加入某个组播组或者应答查询报文。该报文为组播报文。
3、IGMPv1普遍组查询报文与成员关系报告报文格式:
Version | Type | Unused | Checksum |
Group Address |
最主要的三个字段:
Version:IGMP版本,值为1。
Type:报文类型。0x11:普遍组查询报文;0x12:成员关系报告报文。
Group Address:组播组地址。Type为0x11时,该字段为0;Type为0x12时,该字段为成员加入的组播组地址。
4、IGMP查询器
一个多路访问网络里,只需一个组播路由器发送General Query,该路由器称为IGMP查询器。
IGMP查询器选举机制:IGMPv1将PIM选举的唯一的组播信息转发者(Assert Winner或DR)作为IGMPv1查询器。
IGMP查询器和非查询器均能收到成员关系报告报文,因此均能形成IGMP组表项和IGMP路由表项。(一个查多个收)
IGMPv1组成员需要离组时,不会发离开组消息,也不会回应普遍组查询报文。
IGMPv2
1、IGMPv2报文格式
Type | Max Response Time | Checksum |
Group Address |
Type:0x11是查询报文;0x12是IGMPv1成员关系报文;0x16是IGMPv2成员关系报文;0x17是成员离开报文。
Max Response Time:普遍组查询默认为10秒,特定组查询默认为1秒。
Group Address:普遍组查询报文中为0;特定组查询报文中为该特定组地址;成员关系报告或者离开组的报文中为需要报告或者离开的地址。
2、IGMPv2与v1的相同点
v2与v1组成员加组机制基本相同;
v2与v1兼容。
3、IGMPv2相比v1的改进
v2增加了离开组机制;
v2增加了查询器选举机制。
4、IGMPv2组成员离开机制
为了IGMP改善组成员离开机制,v2相比v1新增两种报文格式:
特定组查询报文(Group-Specific Query):用于查询器查询特定组播组是否存在成员,目的地址为该组播组的组播地址。
成员离开报文(Leave):组成员离开组播组时对查询器发出的报文,用于宣告自己离开了特定组播组,目的地址为224.0.0.2。
5、IGMPv2查询器选举机制
接口IP地址最小的路由器成为查询器。
选举出查询器后,非查询器会启动一个定时器(Other Querier Present Timer),只要在超时时间内收到查询器的查询报文,就重置该定时器;否则,认为该查询器失效,重新发起查询器选举过程。
IGMPv3
1、IGMPv3与v2的相同点
查询器选举机制一致;
使用普遍组查询报文查询组成员加组信息;
使用特定组查询报文查询特定组播的成员信息。
2、IGMPv3的改进
新增特定源组查询报文(Group-and-Source-Specific Query);
成员关系报告报文新增想要接收的来自哪些组播源的数据;
删除成员关系报告报文抑制机制;
没有定义专门的成员离开报文,成员离开通过特定类型的报告报文来传达。
3、查询报文格式
Type | Max Response Code | Checksum | ||
Group Address | ||||
Resv | S | QRV | QQIC | Number of Source(N) |
Source Address(1) | ||||
Source Address(2) | ||||
… | ||||
Source Address(N) |
字段说明:
Type:0x11;
Max Response Code:最大响应时间,成员主机在收到查询报文后的回应时间要求;
Group Address:组播组地址,在普遍组查询报文中该字段为0,在特定组查询报文和特定源组查询报文中该字段为要查询的特定组播组地址。
Number of Source:报文中包含的组播源数量,在普遍组查询报文和特定组查询报文中该字段为0,在特定源组查询报文中该字段非0,该字段值大小受到所在网络MTU限制。
4、成员关系报告报文格式
来自HCIP,若是有侵权可删
IGMPv3成员关系报告报文重要字段说明:
Type:报文类型,取值为0x22。
Number of Group Records:报文中包含的组记录的数量。
Group Record:组记录。
Record Type字段:
当前状态报告:MODE_IS_INCLUDE | MODE_IS_EXCLUDE
过滤模式改变报告:CHANGE_TO_INCLUDE | CHANGE_TO_EXCLUDE
源列表改变报告:ALLOW_NEW_SOURCES | BLOCK_OLD_SOURCES
5、组成员加组机制
IGMP查询器发送普遍组查询报文–组播组成员发送成员关系报告报文(内含加组信息与组播源信息)–加组成功
6、组成员离开机制
IGMPv3没有专门的成员离开报文,成员离开需要通过组成员关系报告实现。
IGMP版本差异
来自HCIP,若是有侵权可删
IGMP Snooping
1、二层设备学习不到组播组地址的MAC地址表项。
2、为什么有IGMP Snooping
二层交换机收到组播信息(目的地址为组播地址)时,由于组播IP地址没有MAC,所以只能泛洪处理,降低了带宽利用率。为了解决这个问题,就有了IGMP Snooping。
3、二层组播转发表(L2-Multicast Forward-Table)
组播组信息 | 出接口 | Out-Vlan |
---|---|---|
Router Port | IF3 | 10 |
*,239.0.0.1 | IF1 | 10 |
*,239.0.0.2 | IF2 | 10 |
说明:
出接口分为路由器端口(Router Port)和成员端口(Member Port),路由器端口又分为动态路由器端口和静态路由器端口,成员端口又分为动态成员端口和静态成员端口。
不管是路由器端口还是成员端口,手工配置的就是静态的,由协议自动生成的就是动态的。
路由器端口形成后会启动老化计时器(默认180s),当路由器端口收到新的普遍组查询后刷新该计时器。
成员端口形成后会启动老化计时器(默认180s),当成员端口收到新的成员关系报告报文后刷新该计时器。
收到IGMP离开报文后,成员端口的老化定时器 = 健壮系数(默认2) x 特定组查询间隔(默认1s)。
IGMP SSM Mapping
1、为什么有IGMP SSM Mapping
现网中存在部分只能运行IGMPv1与IGMPv2的老旧终端,在部署SSM模式的组播时,由于IGMPv1与IGMPv2报文中无法携带组播源信息,因此无法使用SSM模式的组播网络。
IGMP SSM Mapping通过静态的将组播源与组播组进行绑定,使得IGMPv1与IGMPv2的组成员也能接入SSM组播网络。
IGMP SSM Mapping不处理IGMPv3的报告报文。为了保证同一网段运行任意版本IGMP的主机都能得到SSM服务,需要在与成员主机所在网段相连的组播路由器接口上运行IGMPv3。
2、SSM Mapping
SSM组播组 | 组播源 |
---|---|
232.0.0.10 | 4.0.0.4 |
根据SSM Mapping生成IGMP Routing-Table
3、IGMP Routing-Table
IGMP表项 | 出接口 |
---|---|
4.0.0.4,232.0.0.10 | IF1 |
IGMP代理
1、为什么有IGMP代理
现网中可能存在一台IGMP查询器需要管理大量组成员的情况,大量成员主机频繁加入/离开组播组时,会产生大量的IGMP成员关系报告/离开报文,从而给IGMP查询器带来较大的处理压力。
通过IGMP Proxy功能可减少IGMP查询器接收IGMP成员关系报告/离开报文的数量,减轻IGMP查询器压力。
IGMP Proxy通常被部署在IGMP查询器和成员主机之间的三层设备上。
2、IGMP代理实现方式
为了缓解IGMP查询器压力,IGMP Proxy设备将成员关系报告/离开报文汇聚后统一上送给IGMP查询器。
IGMP Proxy设备也可以代理IGMP查询器向成员主机发送查询报文,维护组成员关系,基于组成员关系进行组播转发。
IGMP Proxy减少成员关系报告报文的工作机制如下:
路由器接口作为IGMP接口,对下呈现为IGMP查询器,发送查询报文,处理成员关系报告报文,形成IGMP表项,并将成员关系报告从主机接口发送给上游的IGMP查询器。
当新用户加入同一个组播组时,IGMP Proxy设备不会再向IGMP查询器反馈成员关系报告报文,因此减少了成员关系报告报文数量。
IGMP代理设备收到某组播组的报告报文后,会在IGMP组表项中查找该组播组:
如果没有找到相应的组播组,IGMP代理设备会向接入设备发送针对该组播组的报告报文,并在组播转发表中添加该组播组;
如果找到相应的组播组,IGMP代理设备就不需要向接入设备发送报告报文。
IGMP Proxy减少离组报文的工作机制如下:
当组成员离开时,IGMP Proxy通过IGMP离组机制确定是否有特定组播组的组成员,当确定已经没有组成员后才发送离开报文给上游IGMP查询器。
IGMP代理设备收到某组播组G1的离开报文后,会向接收到该离开报文的接口发送一个特定组查询报文,检查该接口下是否还存在组播组G1的其他成员:
如果没有其他成员,在组播转发表中将该接口删除,然后判断组播组G1是否还有其他接口。
如果没有,IGMP代理设备再会向接入设备发送针对该组播组的离开报文;
如果有,IGMP代理设备不向接入设备发送针对该组播组的离开报文;
如果有其他成员,IGMP代理设备会继续向该接口转发组播数据。
3、IGMP Proxy定义了两类接口
主机接口(Host Interface):IGMP Proxy设备上配置IGMP Proxy功能的接口,该接口一般面向IGMP查询器。
路由器接口(Router Interface):IGMP Proxy设备上配置IGMP功能的接口,该接口一般面向组成员。
总结
IGMP的主要作用是让组播网络感知组播组成员的位置和所加组播组,同时也能维护组成员的加组状态。
IGMP有三种版本:
IGMPv1:有基本的加组机制,但是组成员离开机制较为落后,同时没有独立的IGMP查询器选举机制。
IGMPv2:在IGMPv1的基础上改善了组成员离开机制,同时拥有了独立的IGMP查询器选举机制。
IGMPv3:在IGMPv2的基础上增加了对SSM组播的支持能力,可以告知组播网络需要接收来自哪个组播源的组播数据。
IGMP有诸多特性帮助IGMP在网络中高效运行:
IGMP Snooping:解决在以太网络中组播数据跨组播组泛洪的问题。
IGMP SSM Mapping:解决IGMPv1与IGMPv2组成员不能接入SSM组播网络的问题。
IGMP Proxy:解决大量组播组成员频繁上下线导致,IGMP查询器压力过大的问题。
HCIE内容
1、组播/多播是什么,相比单播广播,组播有什么区别?
Multicast Group
Unicast
Broadcast 255.255.255.255
OSPF –目的地址224.0.0.5 –ospf建立在组播基础上
BGP –建立在TCP基础上 –TCP只支持单播
RIPv1 –单播
组播:OSPF、RIPv2、EIGRP、ISIS、(LDP?)
组播流量一般只在本网络内转发,不能跨网络转发(例如跨路由器接口)。 但是,当园区内所有路由器启用**组播动态路由选择协议(PIM)**后,组播流量可以在一个园区内转发。组播一般是单向的,组播接收者收到组播信息后,一般不回复。
广播流量只能在本网络内转发。
2、PIM
PIM-DM的基本原理如下:
★PIM-DM假设网络中的每个子网都存在至少一个组播组成员,因此组播数据将被扩散(Flooding)到网络中的所有节点。然后,PIM-DM对没有组播数据转发的分支进行剪枝(Prune),只保留包含接收者的分支。这种“扩散—剪枝”现象周期性地发生,被剪枝的分支也可以周期性地恢复成转发状态。
★当被剪枝分支的节点上出现了组播组的成员时,为了减少该节点恢复成转发状态所需的时间,PIM-DM使用嫁接(Graft)机制主动恢复其对组播数据的转发。
一般说来,密集模式下数据包的转发路径是有源树(Source Tree,即以组播源为“根”、组播组成员为“枝叶”的一棵转发树)。由于有源树使用的是从组播源到接收者的最短路径,因此也称为最短路径树(Shortest Path Tree,SPT)。
PIM-SM的基本原理如下:
★PIM-SM假设所有主机都不需要接收组播数据,只向明确提出需要组播数据的主机转发。PIM-SM实现组播转发的核心任务就是构造并维护RPT(Rendezvous Point Tree,共享树或汇集树),RPT选择PIM域中某台路由器作为公用的根节点RP(Rendezvous Point,汇集点),组播数据通过RP沿着RPT转发给接收者;
★连接接收者的路由器向某组播组对应的RP发送加入报文(Join Message),该报文被逐跳送达RP,所经过的路径就形成了RPT的分支;
★组播源如果要向某组播组发送组播数据,首先由与组播源侧DR(Designated Router,指定路由器)负责向RP进行注册,把注册报文(Register Message)通过单播方式发送给RP,该报文到达RP后触发建立SPT。之后组播源把组播数据沿着SPT发向RP,当组播数据到达RP后,被复制并沿着RPT发送给接收者。
–参考http://www.h3c.com/cn/d_200805/605843_30003_0.htm
(S,G)表项:组播源、组播组、入接口、出接口