一、组播
1、IP组播技术实现了IP网络中点到多点的高效数据传送,能够有效地节约网络带宽、降低网络负载,在实时数据传送、多媒体会议、数据拷贝、游戏和仿真等诸多方面都有广泛的应用。
单播地址:A类开头0—127,B类开头128-191,C类开头192-223
组播地址:D类开头 224-239
剩余的为E类保留地址
2、组播的优势
(1)提高效率:降低网络流量,减轻硬件负荷
(2)优化性能:减少冗余流量、节约网络带宽、降低网络负载
(3)分布式应用:使用多点应用成为可能
组播的应用:多媒体,培训、联合作业场合的通信,数据仓库、金融应用,任何的单到多数据发布应用
3、组播的劣势
组播是基于UDP的
(1)尽力而为
(2)没有拥塞避免机制
(3)报文重复
(4)报文失序
4、组播IP地址
(1)一个组播组就是一个IP地址,不表示具体的主机,而是表示一系系统的集合,主机加入某个组播组即声明自己接收目的为某个IP地址的报文
IP组播组地址:224.0.0.0—239.255.255.255
D类地址,第一个字节的高四位=1110
(2)组播IP地址分类
永久组地址:为路由协议预留的组播地址,用于标识一组特定的网络设备,如224.0.0.5为OSPF路由器。永久组地址保持不变,组成员的数量可以是0
临时组地址:为用户组播临时分配的IP地址,成员数量一旦为0,即取消
常见的永久组播地址:
永久组地址 |
含义 |
224.0.0.0 |
不分配 |
224.0.0.1 |
网段内所有主机和路由器(等效于广播地址) |
224.0.0.2 |
所有组播路由器 |
224.0.0.3 |
不分配 |
224.0.0.4 |
DVMRP(distance vector multicast routing protocol)路由器 |
224.0.0.5 |
OSPF路由器 |
224.0.0.6 |
OSPF DR 指定路由器 |
224.0.0.7 |
ST (shared tree,共享树)路由器 |
224.0.0.8 |
ST主机 |
224.0.0.9 |
RIP-2路由器 |
224.0.0.11 |
移动代理(mobile-agents) |
224.0.0.12 |
DHCP服务器/中继代理 |
224.0.0.13 |
所有PIM(protocol independent multicast,协议无关组播)路由器 |
224.0.0.18 |
VRRP(virtual router redundancy protocol,虚拟路由器冗余协议) |
224.0.0.22 |
所有使能IGMP 3(internet group management protocol,英特网组管理协议)的路由器 |
组播IP地址分类:
D类地址范围 |
含义 |
224.0.0.0~224.0.0.255 |
为路由协议预留的永久组地址 |
224.0.1.0~231.255.255.255 233.0.0.0~238.255.255.255 |
用户可用的ASM临时组地址,全网范围内有效 |
232.0.0.0~232.255.255.255 |
用户可用的SSM临时组地址,全网范围内有效 |
239.0.0.0~239.255.255.255 |
用户可用的ASM临时组地址,仅在特定的本地管理域内有效,称为本地管理组播地址。 |
5、组播MAC地址
组播数据帧的传输目的不再是一个具体的接收者,而是一个成员不确定的组,所以使用的是组播MAC地址。IANA规定,组播MAC地址的高24bit为0x01005e,第25bit固定为0。
组播MAC地址用于在链路层标识属于同一组播组的接收者。
以太网传输单播数据帧的时候,目的MAC地址使用的是接收者的MAC地址或者下一跳路由器的MAC地址。这个MAC地址通过ARP获取。对于组播数据帧也需要有一个可预知的MAC地址。
组播MAC地址,第一个字节的最后一位为1,而单播MAC地址,第一个字节的最后一位为0,就以太网而言,IP组播帧都是用以0x0100.5Exx.xxxx的24位前缀开始的MAC层地址。
需要将组播IP地址映射到组播MAC地址,组播MAC地址的高24bit为 0x01005e,MAC地址的低23bit为组播IP地址的低23bit.MAC地址第25bit位为0.
因为组播IP地址中,前4bit确定为1110,后25bit映射到了MAC地址中,而中间的不确定5bit位导致了32:1的地址不明其问题,如此映射会存在32:1的地址不明确问题,也就是存在32个组播地址对应同一个 MAC地址的情况。
6、组播相关协议
组播协议包括用于主机注册的组播组管理协议,和用于组播选路转发的组播路由协议
组播分发树:用来描述IP组播报文在网络中经过的路径。分为源路径树和共享树
源路径树(又叫最短路径树,SPT):以组播源作为树根,将组播源到每一个接收者的最短路径结合起来构成的转发树。每一个组播源与接收者之间建立一颗独立的SPT。路径最优,延迟最小,占用内存较多
共享树(RPT):使用放在网络的某些节点的单独的公用根。根据组播路由协议,这个根常被称为汇合点(RP)或核心,因此,共享树也可以称为RPT。共享树对应某个组,网络中只有一棵树。路径不是最优的,引入额外的延迟,占用内存少。
7、组播数据转发
组播路由和单播路由时相反的:单播路由关心数据报文要到哪里去,而组播路由关心数据报文从哪里来,组播路由需要反向路径转发RPF。
RPF:路由器接收到组播数据报文后,只有确认这个数据报文是从自身连接到组播源的接口上收到的,才进行转发,否则丢弃。
RPF检查:在单播路由表中查找到组播报文源地址的路由,如果该路由的出接口就是组播报文的入接口,RPF检查成功,否则RPF检查失败,报文丢弃。
二、IGMP
1、IGMP(Internet group management protocol)作为英特网组管理协议,是 TCP/IP协议族中,负责 IP组播成员管理的协议,它用来在IP主机与其他直接相邻的组播路由器之间建立、维护组播成员关系。
IGMP协议工作机制:
(1)接收者主机向所在的共享网络报告组成员关系
(2)查询器周期性地向该共享网段发送组成员查询消息
(3)接收者主机接收到查询消息后进行响应以报告组成员关系
(4)网段中的组播路由器依据接收到的响应来刷新组成员的存在信息。
2、IGMPv1
(1)报文格式 :
版本:版本字段包含IGMP版本标识,设置为1
类型:成员关系查询(0x11)与成员关系报告(0x12)
组地址:当一个成员关系报告正被发送时,组地址字段包含组播地址;当用于成员关系查询时,本字段为0,并被主机忽略。
(1)IGMPv1支持两种类型的报文:
普遍组查询报文(General Query):路由器周期性地向224.0.0.1地址(表示同一网段内所有主机和路由器)发送通用查询报文,默认查询周期为60秒,发送周期可以通过命令配置。
成员关系报告报文(Membership Report):用于主机加入某个组播组。
(2)IGMPv1组成员加入
新加入主机会不会等待普遍组查询报文,而立即发送组播成员报告报文主机,目的地址为组播地址,查询器收到后,进行记录。
(3)IGMPv1查询与响应
IGMP查询器周期性(每60s)地向子网内所有主机(目的地址为224.0.0.1)发送普通组查询报文,主机收到后,会发送成员关系报告报文进行相应,目的地址为所在的组播地址。
(4)IGMPv1响应抑制
每个主机都存在一个计时器,在收到查询报文后,计时器会设置0-10s之间的一个随机数,超时后才会发送关系报告,发送关系报告后,其他还未发送的同组主机先收到关系报告,会删除计时器,不再发送针对该组播的成员关系报告报文,从而减少网段上的协议流量,这就叫做响应抑制。
(5)IGMPv1组成员离开
IGMPv1没有专门定义离开组消息。
组成员离开时,是悄悄离开组,不会发送报告信息。在一定时间(130秒=120*2+10,即组成员关系超时时间=IGMP普遍查询消息发送间隔 × 健壮系数 + 最大查询响应时间)后,删除对应的组播转发项
int g0/0/0
igmp version 1 //设置为v1版本
dis igmp interface g0/0/1
dis igmp group
(6)查询器选举
多台路由器同时连接到同一接收端网络时,只需要有一台路由器进行IGMP的查询。
IGMPv1无查询路由器选举机制,其依赖于组播路由协议在末端网络中选举一个查询器。
由于不同的组播路由协议采用不同的选举机制,所以在IGMPv1中,同一末端网络中可能会存在多台查询器。
针对IGMPv1中的两个问题,IGMPv2进行了改进和优化。
3、IGMPv2
(1)报文格式:
类型
1)普通组成员关系查询(0x11)报文:用于确定哪些组播组是有效的,即该组是否还有成员在使用,常规查询地址由全零表示;
2)成员关系报告报文(Membership Report):用于主机加入某个组播组。
3)特定组查询报文(0x11):用于查询特定的组播组是否还有组成员
4)成员离开报文(0x17):成员离开组播组时主动向路由器发送的报文,用于宣告自己离开了某个组播组。
版本2成员关系报告(0x16)
版本1成员关系报告(0x12)
离开组消息(0x17),而在v1中是没有该类消息,查询器需要等待3分钟才能知道离开组的成员。
最大响应时间:表示主机响应查询返回报告的最大时间。v2增加的项,可以自定义最大响应时间。以0.1秒为单位,默认值是100,即10秒。对于普遍组查询,最大响应时间默认为10秒。对于特定组查询,最大响应时间默认为1秒。
组地址
1)普遍组查询报文中,组地址设为0,特定组查询报文中,组地址为需要查询的组地址
2)在成员报告或离开组的消息中,组地址为要报告或要离开的组地址
(2)IGMPv2组成员的加入同IGMPv1
(3)IGMPv2查询与响应与IGMPv1相同,存在抑制机制,增加了最大响应时间
(4)IGMPv2查询器选举:路由器启动,主动发送到目的224.0.0.1的IGMPv2等待常规查询信息;收到常规查询信息的路由器比较信息的源IP地址和接受口IP地址,IP地址低的路由器成为查询器
(5)IGMPv2组成员离开:主机发送离开组消息,查询器收到后,会每隔一秒发一次特定组查询,共计两次,如果两次都没有回应,查询器会删除该组播组,此时其他该组成员会设置特定组响应计时器,最大响应时间是0-1秒。查询器中记录的那个组播成员称之为last reporter(一个组播组里因为响应抑制的原因,只有一个成员会发送给查询器,并被查询器记录下来),如果不是last reporter离开组成员,其他成员是不会发送leave报文的,而且查询器只有收到last reporter的leave报文,才会发送特定组查询。
(6)配置命令
int g0/0/1
igmp version 2
dis igmp interface g0/0/1
dis igmp group
(7)通用组查询和特定组查询对比
|
通用组查询 |
特定组查询 |
目的地址 |
224.0.0.1 |
指定组播地址 |
组地址 |
0.0.0.0 |
指定组播地址 |
发送时间 |
60s周期 |
1秒 |
发送次数 |
3 |
2 |
最大响应时间 |
10s |
1s |
(8)IGMPv1与IGMPv2的互操作性
v2主机与v1路由器,v2主机会自动发送v1信息,变成v1的环境
v1主机与v2路由器,v2路由器收到v1的信息,会直接处理,没有变化
混合版本,路由器之间需要使用相同版本,否则会产生各自版本的查询器。
三、IGMPv3
1、IGMPv3服务于Source specific multicast, SSM特定源组播模型。允许主机指定接收某些组播组,增加了主机的控制能力,不仅可以指定组播组,还能指定组播的源。
2、IGMPv3报文与IGMPv2报文对比变化
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中报文数量大大减少。
2、IGMPv3的工作机制:
(1)查询器周期性的向224.0.0.1发送查询,每台主机都会发送报告。在v1、v2中,只需要知道组播组的名字就可以了,因为没有指定源,而在v3中,还需要指定源,同组的不同主机可能加入不同的源中,所以v3没有响应抑制。
IGMPv3中,主机可以选择加入特定源的组播,拒绝特定源的组播。IGPMv3查询器在查询时,也增加了特定源查询。
四、IGMP Snooping
1、主机加入组播组需要向上游设备发送IGMP成员报告,这样上游设备才可以将组播报文发送给主机。由于IGMP报文是封装在IP报文内,属于三层协议报文,而二层设备不处理报文的三层信息,所以主机加组的过程二层设备并不知道,而且通过对数据链路层数据帧的源MAC地址的学习也学不到组播MAC地址(数据帧的源MAC地址不会是组播MAC地址)。
这样当二层设备在接收到一个目的MAC地址为组播MAC地址的数据帧时,在MAC地址表中就不会找到对应的表项。那么这时候,它就会采用广播方式发送组播报文,这样一来不但对网络资源造成的极大浪费而且影响网络安全。
IGMP Snooping机制的提出,解决了二层组播泛洪问题。IGMP Snooping通过侦听组播路由器与主机之间交互的IGMP报文建立组播数据报文的二层转发表项,从而管理和控制组播数据报文在二层网络中的转发。
2、IGMP Snooping工作原理
IGMP Snooping可以实现组播数据帧在数据链路层的转发和控制。
使能IGMP Snooping功能后,二层设备会侦听主机和路由器之间交互的IGMP报文。通过分析报文中携带的信息(报文类型、组播组地址、接收报文的接口等),建立和维护二层组播转发表,从而指导组播数据帧在数据链路层按需转发。
IGMP Snooping建立和维护二层组播转发表的过程:
RTA作为查询器,周期性的发送普遍组查询,该报文被扩散到交换机的所有端口,包括与交换机CPU相连的内部接口0。交换机CPU收到查询报文后,判断1号接口为连接路由器的接口。
Client B希望加入组播组224.1.2.3,因此以组播方式发送一个IGMP成员报告报文,报告中具有目的MAC地址0x0100.5e01.0203。最初转发表上没有这个组播MAC地址的表项,所以该报告被扩散到交换机的所有接口,包括与交换机CPU相连的内部接口0;当CPU收到Client B的IGMP报告时,CPU利用IGMP报告中的信息建立了一个转发表项,此表项包括Client B的接口号,连接路由器的接口号和连接交换机内部CPU的接口号。
形成此转发表项的结果是使后面任何目的地址为0x0100.5e01.0203的组播帧都被控制在端口0、1和3,而且不向交换机其他端口扩散。
Client C加入组224.1.2.3并主动发一个IGMP报告,交换机CPU收到此报告,它在转发表项上为MAC地址0x0100.5e01.0203增加一个端口(端口4)。