IGMP协议:因特网组管理协议 (在路由器与客户端间,不属于组播路由协议;组播路由协议:应用与路由器之间,传播路由,维护组播路由表)
作用:是TCP/IP协议族中负责IP组播成员管理的协议,用来在接收者和与其直接相邻的组播路由器之间建立、维护组播组成员关系
接收端如何接收组播数据: 接收者与路由器间需要交换哪些信息? 接收者需声明自己要接收哪个组的数据 路由器需了解哪些组播组存在接收者
人工静态配置这些信息,有哪些问题?
1. 实时性差。
2. 灵活性差。
3.工作量大、易出错。
实现高效转发、灵活加组的网络,该如何部署?
组成员管理 - IGMP:IGMP协议运行于主机与组播路由器之间,建立、维护组播组成员关系
IGMP协议的作用:
主机侧:通过IGMP协议向路由器通告组成员关系
路由器侧:通过IGMP协议维护组成员关系
所有报文TTL值默认为1
IGMP协议的版本:
1.IGMPv1:
工作机制:
1.普遍组查询与响应:周期60
2.响应抑制机制:组成员收到普遍组查询报文后启动本地所属组定时器(0-10s随机值,单位为1s,最大响应时间默认10s),到时后发送成员关系报告,同组内成员监听到有成员发送了成员关系报告,停止组定时器,且不再发送针对本组的成员报告报文
作用:可以减少网段上的协议流量(重复的成员关系报告)
报文:
1.普遍组查询报文:是组播路由器周期性(60s)向局域网内所有主机以组播的形式发送查询报文,本地网段所有路由器和主机都能识别并接收;任何组播组成员都回应成员关系报告,查询报文中的组地址字段为0.0.0.0,代表所有查询的任意组,收到该报文的主机把自己所属组发送成员关系报告给组播路由器
2.成员关系报告报文:包含所属组的所有成员信息(只能携带一个组的组播组信息)
分两种:
1.主机主动发给组播路由器,用于主动申请加入某个组播组的报文
2.是收到IGMP的普遍组查询报文后,被动响应请求,而告知组播路由器所属组的报文,目的组地址字段是D类非224.0.0.X
IGMPv1成员加入:
1.主机主动申请加组:为了快速接收组播数据,不等待普遍组查询报文,主动发送成员关系报告
2.被动:收到IGMP的普遍组查询报文后,被动响应请求(等待0-60s)
IGMPv1问题:
1.组成员离开:静默离开;因此会导致组播路由器不知道组成员离开,会继续向下转发该组的组播数据,造成设备带宽浪费。
解决办法:用普遍组查询报文,每60s发送一次,查询所有的组是否还存在成员,普遍组查询130s(60*2+10)没有收到响应,则路由器认为该组不存在组播成员,删除对应的组播转发项。(IGMPv1中没有专门定义离开组的消息)
2.查询器选举:依赖于组播路由协议
查询器是负责发送普遍组查询报文,如果出现多个组播路由器,那么谁发送普遍组查询报文?
IGMPv1无查询选举机制,需要借助组播路由协议,就是依赖于上层协议PIM协助选举查询器
2.IGMPv2(最常用):
报文:
1. 查询报文:
普遍组查询报文:查询地址是0.0.0.0
特定组查询报文:被查询的组播地址,查询该组是否还有其他组成员s,目的IP:224.0.0.1
2.成员报告:成员关系报文(与V1一样),组地址为要加入的组播组地址(只能携带一个组的组播组信息)
3.离开报文:成员离开报文(V1不存在),组地址为主机要离开的组播地址
IGMPv2对IGMPv1的改进:
1. 组成员离开 :
1.组成员主动向查询器发送离开消息(该组最后一个组成员离开发送)
2.查询器向该组地址发送特定组查询,缺省间隔1s,发送2次(健壮系数)
3.若发送2次特定组查询之后仍没有收到成员报告,则认为该组播组不存在组播成员
2.查询器选举:独立的查询器选举机制
选举:所有IGMPv2路由器在初始状态时都认为自己是查询器,向本地网段内的所有主机和路由器发送普遍组查询报文。其他路由器在收到该报文后,将报文的源IP地址与自己的接口地址作比较。IP地址最小的路由器将成为查询器,其他路由器成为非查询器
IGMP的查询器和非查询器都会处理IGMP组加入信息,但是只有查询器负责发送查询报文。IGMP非查询器不处理IGMPv2离开报文
非查询器:所有非查询器上都会启动一个定时器。若在该定时器超时前收到了来自查询器的查询报文,则重置该定时器;否则就认为原查询器失效并发起新的查询器选举
IGMPv1和IGMPv2报文比较:
IGMPv1报文:
版本:包含IGMP版本标识,因此设置为1。
类型:普遍组查询 (0x11),成员关系报告 (0x12)。
组地址:普遍组查询报文中,组地址为0;成员关系报告报文中,组地址为成员想要加入的组播组的地址。
IGMPv2报文:IGMPv2报文与IGMPv1报文略有不同,它取消了版本字段,增加了最大响应时间字段。 类型:相比于IGMPv1,IGMPv2新增了两种报文: 特定组查询报(0x11):查询器向共享网段内指定组播组发送的查询报文,用于查询该组播组是否存在成员。 成员离开报文(0x17):成员离开组播组时主动向路由器发送的报文,用于宣告自己离开了某个组播组。 最大响应时间:表示主机响应查询返回报告的最大时间。 对于普遍组查询,最大响应时间默认为10秒。 对于特定组查询,最大响应时间默认为1秒。 组地址: 普遍组查询报文中,组地址设置为0。 特定组查询报文中,组地址为需要查询的组地址。 在成员报告或离开组的消息中,组地址为需要报告或离开的组地址 3.IGMPv3:应用SSM的新需求:指定组播源,提供了在报文中携带指定组播源信息的能力 SSM模型中的新需求:只接收特定源发送的组播数据 工作机制: 接收端发送成员报告,指出希望加入或拒绝某些组播源发送的数据 报文: 查询报文: 普遍组查询报文:查询地址是0.0.0.0 特定组查询报文:被查询的组播地址,查询该组是否还有其他组成员 特定源组查询报文:查询该组成员是否愿意接收特定源发送的数据 成员报告报文: 成员关系报告:不仅包含了主机想要加入的主播组,还包含了主机想要接收来自哪个组播源的组播数据(可以携带多个组播组信息) IGMPv3没有专门定义成员离开报文,成员离开报文是通过特定类型的报告报文来传达
IGMP各版本间的差异
二层中组播数据转发的问题: 组播数据在二层被泛洪 : IGMP报文是封装在IP报文内,属于三层协议报文,而二层设备不处理报文的三层信息,所以主机加组的过程二层设备并不知道,而且通过对数据链路层数据帧的源MAC地址的学习也学不到组播MAC地址(数据帧的源MAC地址不会是组播MAC地址),所有当二层设备在接收到一个目的MAC地址为组播MAC地址的数据帧时,在MAC地址表中就不会找到对应的表项。那么它就会采用广播方式发送组播报文
造成:网络资源浪费 存在安全隐患 解决:IGMP Snooping机制 IGMP Snooping工作原理: 使能IGMP Snooping机制后,查询响应仅向路由器接口转发
IGMP Snooping可以实现组播数据帧在数据链路层的转发和控制: 实现原理:使能IGMP Snooping功能后,二层设备通过侦听主机和路由器之间交互的IGMP报文建立和维护二层组播转发表,从而管理和控制组播数据帧在数据链路层按需转发。(通过分析报文中携带的信息:报文类型、组播组地址、接收报文的接口等),
IGMP Snooping建立和维护二层组播转发表的过程: 1.查询器周期性的发送普遍组查询,该报文被扩散到交换机的所有端口,包括与交换机CPU相连的内部接口0。交换机CPU收到查询报文后,判断1号接口为连接路由器的接口 2.Client B希望加入组播组224.1.2.3,因此以组播方式发送一个IGMP成员报告报文,报告中具有目的MAC地0x0100.5e01.0203。该报文将被发往路由器的接口以及交换机CPU相连的内部接口0;当CPU收到Client B的IGMP报告时,CPU利用IGMP报告中的信息将该接口加入二层组播转发表中,此时表项包括Client B的接口号,连接路由器的接口号和连接交换机内部CPU的接口号 3.形成此转发表项的结果是使后面任何目的地址为0x0100.5e01.0203的组播帧都被控制在端口0、1和3,而且不向交换机其他端口扩散
加入组:主机主动发一个IGMP报告,交换机CPU收到此报告,它在转发表项上为该主机MAC地址增加一个端口
|