组播___IGMP
一、基本概念:
1.协议概述:
是运行在主机和与主机直连的路由器之间,其实现的功能是双向的:一方面,主机通过IGMP通知路由器希望接收某个特定组播组的信息;另一方面,路由器通过IGMP周期性地查询局域网内的组播组成员是否处于活跃状态,实现所连网段组成员关系的收集与维护。通过IGMP,在路由器中记录的信息是某个组播组是否在本地有组成员,而不是组播组与主机之间的对应关系。
- 主机加入和离开组播
- 路由器维护组播组
- 查询器选举机制
- 成员报告抑制机制
2.常用组播管理协议:
- IGMP v1=RFC1122
- IGMP V2=RFC2236
- IGMP V3=RFC3376
- 所有版本的IGMP都支持ASM(任意源组播)模型
- IGMP v3可以直接应用在SSM(指定源组播)模型
- 而IGMPV1和IGMP v2则需要在IGMP SSM Mapping技术的支持下才能应用于SSM模型。
二、IGMPV1:
1.查询与响应:(维护)
- IGMP查询器周期性(60s)地向网段内所有主机以组播方式(224.0.0.1)发送成员关系查询消息(组地址为0)
2.查询报文:
- 网络内所有主机都接收到该查询消息,如果某主机对任意组播组G感兴趣,则以组播(地址为目的组播组地址)方式发送“成员关系报告”报文来宣告自己将加入该组播组,只需要一个主机回复此报文即可(IGMPV1成员报告抑制)。
3.加组报文:
报告抑制:当路由器向PC发送普遍组查询报文(60s)时,目的地址为224.0.0.1,所有的设备(除本身)都能收到,会产生一个随机的定时器(抑制定时器0~10s),定时器的时间是随机的,0~10s以内,当定时器一过,pc就会发送成员关系报告报文,目的地址为所处的组播地址,发出以后,其他的所有设备都会收到,其他终端收到后,如果自己加入的组和收到成员关系报告报文的组播地址一样,就不会再次发送成员关系报告。
- 经过查询/响应过程后,IGMP路由器了解到本网络内组播组G对应的接收者,生成(*,G)组播项并依此作为组播信息的转发依据。
在共享网络中有多台路由器时,由组播路由协议选举查询器。不同的组播路由协议有不同的选举机制。 pim的协议中DR决定了谁是查询器。
4.IGMPV1组成员离开:
主机悄悄离开(不发送报告)。路由器发送成员关系查询(3次),没人回应,认为没有该组的组成员,下次该组流量来时,就不去转发,收敛时间为3分钟。
三、IGMP v2
- 主要基于查询和响应机制来完成组播组成员管理。当一个网段内有多台组播路由器时,由于它们都能从主机那里收到IGMP成员关系报告报文,因此只需要其中一台路由器发送IGMP查询报文就足够了,这就需要有一个查询器的选举机制来确定由那台路由器作为查询器。对于IGMPv1来说,由组播路由协议(PIM)选举出唯一的组播信息转发者DR作为IGMP查询器。
查询器:
在BMA网络中,属于同一组播组的两台路由器,选举出一台路由器发送查询消息(IP地址小的)
非查询器会启动一个查询计时器,周期检查IGMP查询路由器的状态,缺省情况为120s。
1. 与IGMPv1相比,IGMPV2增加了查询器选举机制和离开组机制:
- IGMPv2中,增加了独立的查询器选举机制,其选举过程如下:(120s)
- 所有IGMPV2路由器在初始时都认为自己是查询器,并向本地网段内的所有主机和路由器发送IGMP普遍组查询(General Query)报文(224.0.0.1)
- 本地网段中其它IGMPv2路由器在收到该报文后,将报文的源IP地址与自己的接口地址作比较。通过比较,IP地址最小的路由器将成为查询器,去其他路由器成为非查询器
- 所有非查询器上都会启动一个定时器(即其他查询器存在时间定时器)。在该定时器超时前,如果收到了来自查询器的IGMP查询报文,则重置该定时器,否则,就认为原查询器失效,并发起新的查询器选举过程。
2.IGMPV2离开机制:
在IGMPv1中,主机离开组播组时不会向组播路由器发出任何通知,导致组播路由器只能依靠组播组成员查询的响应超时来获知组播组播组成员的离开。而在IGMPv2中,当一个主机离开某组播组时:
- 该主机向本地网段内的所有组播路由器(目的地址为224.0.0.2)发送离开组(Leave Group)报文
- 当查询器收到该报文后,向该主机所声明要离开的那个组播组发送特定组查询(Group-Specific Query)报文(目的的地址字段和组地址字段均填充为所要查询的组播组地址)
- 如果该网段内还有该组播组的其他成员,则这些成员在收到特定组查询报文后,会在该报文中所设定的最大响应时间内发送成员关系报告报文;
- 如果在最大响应时间内(1s)收到了该组播组其它成员发送的成员关系报告报文,查询器就会继续维护该组播组的成员关系;否则,查询器将认为该网段内已无该组播组的成员,于是不再维护这个组播组的成员关系。
- 发送特定组查询两次(2s),无人回应,则删除该组信息
3.普遍查询和成员报告:
- 主机会主动向其要加入的组播组发送IGMP成员关系报告报文以声明加入,而不必等待IGMP查询器发来的查询报文。
- IGMP查询器周期性地以组播方式向本地网段内所有主机与路由器发送IGMP查询报文(224.0.0.1)
- 当收到查询报文后,pc1会向组播组1发送IGMP成员关系报文,宣告其属于组播组1,同时本网段中所有PC和路由器都会收到,这样,PC2如果也属于组1,就不会再发送成员关系报文。减少本地网段的信息流量。这叫成员报告抑制机制。(0~10s)谁回复成员报告,谁就是Last reporter。
- 经过以上查询和响应过程,IGMP路由器了解到本地网段中有G1和G2的成员,于是由组播路由协议(如PIM)生成(*,G)表项,作为组播数据转发的依据。
- 当有组播源发往某组播组的数据时,且IGMP中存在该组播组,就将组播数据转发到本地网段,接收者主机便能收到该组播数据了。
4.普遍查询和组成员报告:
周期性发送(60s),向本地网段内所有主机发送IGMP General Query报文,目的地址224.0.0.1,ttl为1,组地址:224.0.0.0。
5.特定组查询和离开组:
当最后一个接收者离开时发送,向所有组播路由器发送Leave Group报文,目的地址224.0.0.2,报文包含要离开的组播组地址信息。
最后一个接收者,是上一次普遍查询响应的主机,当查询器收到后,发送特定组长询,发两次,时间为2s,这时主机设置的响应延迟为0~1s。如果该网段还存在接收者,该接收者会发送一个成员报告信息给路由器。
6.IGMPV2加组到离组过程:
加组过程:
维护过程:
收到查询信息后,客户端会设置一个随机的抑制时间(0~10s),时间一过,就会发送成员报告信息,当路由器收到后就会将last reporter修改成该客户端IP,其他客户端也会收到该成员报告报文,其他客户端就会取消发送成员报告信息报文。
离开查询:
非Last reporter离开时不会发送离开组信息。
Last reporter 离开组时发送离开组信息:
特定组查询:
当Last reporter发送离开组报文后,路由器会连续发送两次特定组查询报文,没有离开组的客户端收到后,设定一个随机的抑制时间(0~1s),时间一过,就会回复成员报告报文,路由器就会将该客户端设备 Last reporter ,其他客户端收到该成员报告报文自动取消回复特定组查询。
7.IGMPv2协议报文:
- Type为IGMP报文类型:
- Membership Query报文:Type字段值为0x11
- 版本1的Membership Report报文:type为0x12,该Report报文用于和IGMPv1兼容。
- 版本2的Membership Query报文:Type 0x16
- Leave Group报文:Type 0x17
- Membership Query报文包含两种:
- General Query报文的组地址字段值为0
- Group-Specific Query报文中,组地址为被查询的组播组地址
- Membership Report报文和Leave Group报文中,组地址为主机要加入或离开的组播组地址
- Max Reps Time为最大响应时间,只有Membership Query报文使用该字段该字段中规定了主机在发送一个Membership Report报文时最大延时时间,单位为0.1s,默认值为100(10s),在Membership Report和Leave Group报文中,由主机设置为0
- 校验和:是IGMP报文长度的16位检测
- 组地址字段:在不同的报文类型中有不同的含义:
- 在General Query报文中设为0
- Group-Specific Query报文中为被查询的组播组地址
- 在Membership Report报文和Leave Group报文中,组地址字段为主机想要加入或离开的组播组地址。
四、IGMP v3:(SSM)模型
1.概述:
在兼容和继承IGMPV1和IGMPV2的基础上,进一步增强了主机的控制能力,并增强了查询和报告报文的功能。
PC1:加入源为10.1.1.1和10.1.2.1的224.1.1.1的这个组
PC2:加入任意源的224.1.1.1的组
PC3:加入源为10.1.2.1的224.1.1.1的组,离开源为10.1.1.1的224.1.1.1的组
2.特点
周期查询(60s),目的地址为224.0.0.1
成员报告目的地址为224.0.0.22
无抑制, 因为V1和V2只关心组播地址,不关注源地址,所以需要抑制,而V3,关注组播地址和源地址,加入加入的组一样,源不一样,使用抑制就不合理,所以V3取消抑制。
3.V3的好处:
普遍查询:
特定组源查询:
成员报告:
离开组:
- 主机控制能力的增强:
- 增加了针对组播源的过滤模式,使主机在加入某组播组G的同时,能够明确要求接收或拒绝来自某特定组播源S的组播信息。
- 若接收某个指定组播源的信息:可以在报文中标记INCLUDE Sources字段
- 若拒绝接收来自指定组播的信息:标记EXCLUDE Sources
- 携带源地址的查询报文:IGMPV3还增加了对特定源组查询的支持
- 普通组查询报文中,既不携带组地址,也不携带源地址
- 特定组查询报文中,携带组地址,但不携带源地址
- 特定源组查询报文,既携带组地址,还携带一个或多个源地址
- 包含多组记录的报告报文:IGMPV3报告报文的目的地址为224.0.0.22,可以携带一个或多个组记录。每个组记录中包含有组播组地址和组播源地址列表:
- IS_IN:表示组播组与组播源列表之间的过滤模式为INCLUDE,即只接收从指定组播源列表发往该组播组的组播数据
- IS_EX:表示组播组与组播源列表之间的过滤模式为EXCLUDE,即只接收从指定组播源列表之外组播源发往该组播组播数据。
- TO_IN:表示组播组与组播源列表之间的过滤模式由EXCLUDE转变为INCLUDE。
- TO_EX:表示组播组与组播源列表之间过滤模式有INCLUDE转变为EXCLUDE。
- ALLOW:表示在现有状态的基础上,还希望从某些组播源接收组播数据。如果当前的对应关系为INCLUDE,则向现有组播源列表中添加这些组播源,如果当前的对应关系为EXCLUDE,则从现有组播源列表中删除这些组播源。
- 不再希望从某些组播源接收组播数据。如果当前的对应关系为INCLUDE,则从现有组播源列表中删除这些组播源;如果当前的对应关系为EXCLUDE,则向现有组播源列表中添加这些组播源。组定时器只对EXCLUDE模式下起作用。
- 增加了针对组播源的过滤模式,使主机在加入某组播组G的同时,能够明确要求接收或拒绝来自某特定组播源S的组播信息。
4.IGMPv3过滤模式和源列表:
- IGMPV3主机位接口上每一个组播组都维护一个表项信息,其格式为(组地址,过滤模式,源列表);
- 过滤模式包含INCLUDE 和EXCLUDE两种类型:
- INCLUDE模式表示只接收来自于在源列表中列出的组播源发送的组播数据包
- EXCLUDE模式表示只接收来自于不同源列表列出的组播源发送的组播数据包。
- 源列表包含0个或多个IP单播地址,通常用集合形式来表示
5.IGMPV3主机侧维护的组状态:
- IGMPV3组播有当前状态、过滤模式改变以及源列表改变三种状态,对应的组记录也有三种类型:
- 当前状态记录
- 过滤模式变化记录
- 源列表变化记录
- 当主机接口维护的组状态发生变化时,会主动发送组记录类型为过滤模式变化或源列表的Membership Report报文。
- 当接收到Membership Query报文时,会响应组记录类型为当前状态的Membership Report 报文
6.IGMPv3路由器侧维护的组状态:
- 路由器为接口上的每一个组播组维护一个状态,该状态包含组过滤模式和源列表以及定时器:
- 组状态格式为(组地址,组定时器,过滤模式,源记录列表);
- 源记录格式为(源地址,源定时器)
- 每一个组播组只对应一种过滤模式:
- 对于INCLUDE模式,源记录列表包含该接口网段的主机需要接受的组播源列表,表示为:INCLUDE(S,G)
- 对于EXCLUDE模式,源记录列表包含两类源列表,第一类与过滤模式相反,是主机需要接收的组播源列表S1;第二类是主机不需要接受的组播源列表S2,表示为:EXCLUDE(S1,S2,G)
7.IGMPv3普遍组查询:
组地址:224.0.0.0
目的地址:224.0.0.1
8.IGMPv3特定源组查询:
7.IGMPv3特定组查询:
8.IGMP不同版本间的操作:
高兼容低,低抑制高
五:IGMP Snooping:
- 二层组播问题:
- 组播数据被二层交换机以广播方式发送
- IGMP Snooping功能
- 组播数据在二层按照转发表项发送给组播接收者
IGMP Snooping基本概念和运行机制:
不同VLAN组播点播处理:
- 不同VLAN的主机点播同一组数据时,路由器需要为每个VLAN的主机复制一份组播报文
组播vlan的功能:
路由器只在组播vlan内复制数据,减轻路由器负担,并节省网络带宽