HCNP Routing&Switching之组播技术-组播协议IGMP

2021-12-16

  前文我们了解了组播地址相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15616740.html;今天我们来聊一聊组播协议中IGMP协议相关话题;

  组播技术架构

  提示:组播通信中,发送者将组播数据发送到特定的组播地址。要使组播报文最终能够到达接收者,需要某种机制使与连接潜在的接受者网段的组播路由器能够了解到该网段内有哪些组播接收者,保证接收者可以加入到相应的组播组中接受数据;从上面的组播基础架构中我们可以看到,组播通信主要分三个阶段,第一阶段是组播源到路由器,即组播数据的生成;第二阶段是组播数据的转发,即从组播源最近的路由器到接收者最近的路由器;最后是组播数据的接收,即离接收者最近的路由器到接收者之间的通信;这样一来靠近组播源的路由器就需要清楚的知道对应组播数据该如何发送,如何路由,如何表示接收者,如何建立组播路由转发路径;相对于靠近接收者的路由器就需要对应网段有哪些人对那些组播源感兴趣,如何维护组播组信息以及怎样判断有哪些人加入了哪些组,有哪些人离开了哪些组;对于上述需求,组播协议正解决了上述需求;在组播技术中,最常用的组播协议有两个,一个是IGMP,一个是PIM;IGMP(Internet Group Management Protocol)因特网组管理协议,是TCP/IP协议族中负责IP组播成员管理的协议,主要用来在接收者与其相邻的组播路由器之间建立、维护组播组成员关系;而PIM(Protocol Independent Multicast)协议无关组播,该协议有两种模式DM(dense mode)和SM(Sparse Mode);当接收者分布较为密集时,适用DM模式(密集模式),当接收者分布较为稀疏时,适用于SM模式;该协议主要用来传播组播路由,类似单播里面的ospf;PIM必须和单播路由协议协同工作; 

  组播相关协议

  提示:域内组播路由协议包括DVMRP(Distance Vector Multicast Routing Protocol),距离矢量组播路由协议,该协议是一种密集模式协议,类似单播里面的RIP协议;该协议有跳数限制,最大跳数32跳;该协议目前已被淘汰;MOSPF,组播的ospf协议,该协议是在OSPF路由协议的基础上,通过定义新的LSA来支持组播;最后是现在使用较多的PIM协议;对于组播来说,它和单播类似也有as的概念,对于as之间传递组播路由的协议有MSDP(Multicast Source Discovery Protocol)该协议能够跨越AS传播组播源信息;还有一个协议MPBGP(MultiProtocol Border Gateway Protocol),基于组播的BGP协议,它能够跨越AS传递组播路由;

  接收端如何接收组播数据?

  提示:如上图如所示,接收者与路由器之间首先接收者事先要声明自己需要接收那个组的数据,其次路由器需要了解哪些组播组存在接收者;对于这些需求,如果使用人工配置的方式,很显然实时性跟不上,灵活性差,工作量巨大,容易出错;为此,IGMP解决了此类需求;

  IGMP组播组管理协议工作机制

  1、IGMP需要知道哪些主机加入或离开对应组播组;

  2、根据接收者的报告或路由器主动查询的信息,维护组播组信息;

  3、对于路由器来说,它需要选举一个查询器来周期性的查询对应网段内哪些主机对哪些组感兴趣;

  4、抑制同一网络中的其他成员主动报告自己感兴趣的组的信息(即同一网络中如果有一个成员主动报告了自己对某某组感兴趣以后,如果对应其他成员也对该组感兴趣,那么后者将不在报告给路由器);抑制成员报告主要是减少路由器的压力,提高路由器的性能;

  IGMP主要作用

  1、负责组播成员管理,运行在主机和组播路由器之间(即该协议运行在三层设备或路由器面向终端的接口上);

  2、主机侧,通过IGMP想路由器通告组成员关系;

  3、路由器侧,通过IGMP协议维护组成员关系;

  IGMP版本

  IGMP从诞生到现在有3个版本,IGMPv1 该版本主要定义了基本的组成员查询和报告的过程;目前基本上不使用该版本;

  IGMPv2,该版本在v1的版本基础上增加了查询其选举和离开组机制;

  IGMPv3,该版本成员可以指定接收或不接收某些组播源的报文;

  以上三个IGMP版本都支持ASM模型,IGMPv3可以直接饮用与ssm模型(它可以选择组播源),而v1和v2如果要用于ssm模型,则还需要ssm-mapping技术的支持;运行IGMP高版本的路由器可以识别低版本的成员报告,即向前兼容;

  IGMPv1报文格式

  提示:路由器周期性的发送成员关系查询,默认查询周期是60秒;成员关系报告的发送可以被动发送也可以主动发送,所谓主动发送是指主机主动发送成员关系报告给路由器;被动发送是指主机收到路由器的查询消息后,发送成员关系报告;

  IGMPv1工作机制

  提示:路由器向对应网段内的主机发送查询信息,收到路由器查询信息的主机会发送IGMP成员关系报告,同时对于其他对相同组感兴趣的主机会监听对应成员的报告,如果有成员报告,对应主机不在主动报告;每个收到查询的主机会启动一个计时器,默认是0-10秒睡机值,超时后发送报告;

  IGMPv1成员加入

  提示:一旦有成员加入,对应成员会主动向路由器发送报告,路由器收到对应报告以后会把对应信息记录下来并维护着;

  IGMPv1问题,静默离开

  提示:在v1版本里,IGMP并没有离开机制,对应加入到某些组里的成员,在一定时间后如果没有报告,则对应信息会在路由器上超时而被清除;所谓静默离开就是指成员离开并不发送任何消息;超时时长=IGMP普遍查询消息发送间隔×健壮系数+最大查询响应时间;

  提示:只要路由器收到报告,对应过期时长会被刷新,然后再倒计时,直到过期时长为0,对应信息就会被路由器清除;

  IGMPv1问题,查询器选举

  提示:多台路由器同时连接到同一接收端网络时,只需要有一台路由器进行IGMP的查询;IGMPv1没有查询器选举机制,它依赖于组播路由协议在末端网络中选举一个查询器;由于不同的组播路由协议采用不同的选举机制,所以在IGMPv1中,同一末端网络中可能会存在多个查询器;针对IGMPv1中的这两个问题,IGMPv2进行了改进和优化;

  IGMPv2对IGMPv1的改进:组成员离开

  提示:如图所示,在IGMPv2中,client B离开组播组G2的过程,首先client B向本地网段内的所有组播路由器(224.0.0.2)发送针对组G2离开的报文;查询器受到离开报文,会发送针对G2的特定组查询报文,同时启动组成员关系定时器Timer-Membership=发送间隔×发送次数;默认是每隔1秒发送1次,一共发送两次,发送间隔和发送次数可以配置;如果网段内不存在其他G2组员,则路由器不会收到G2的成员报告报文,在timer-membership 超时后,删除组播传法表项中对应的下游接口;路由器将不在向该网段转发G2的组播数据;如果网段内还有G2的其他成员,则这些成员在收到特定组查询报文后,会在最大响应时间内发送G2的成员关系报告;对应路由器收到有G2的成员关系报告,路由器继续维护G2组信息,向该网段转发G2的组播数据;

  IGMPv2对IGMPv1的改进:查询器选举

  提示:相对IGMPv1,IGMPv2使用独立的查询器选举机制;所有IGMPv2的路由器在初始状态时都认为自己是查询器,向本地网段内的所有主机和路由器发送普遍组查询报文;其他路由器在收到该报文后,将报文的源ip地址与自己的接口地址作比较;ip地址最小的路由器将被选举成查询器,其他路由器成为非查询器;如上图所示,RTA的接口ip地址小于RTB的接口ip地址,则RTA当选为查询器;IGMP的查询器和非查询器都会处理IGMP组加入信息,但是只有查询器负责发送查询报文;IGMP非查询器不处理IGMPv2离开报文;所有非查询器上都会启动一个定时器,如果在该定时器超时前收到了来自查询器的查询报文,则重置该定时器;否则就认为原查询器失效并发起新的查询器选举;

  IGMPv1和IGMPv2报文比较

  提示:在IGMPv2报文中它取消了版本字段,增加了最大响应时间字段;类型字段相比v1,v2新增了两种报文,特定组查询报文(0×11)和成员离开报文(0×17);特定组查询报文是查询器向共享网段内指定组播组发送到查询报文,用于查询该组播组是否存在成员;成员离开报文是成员离开组播组时主动向路由器发送到报文,用于宣告自己离开了某个组播组;最大响应时间表示主机响应查询返回的最大时间;对于普通组查询来说,最大响应时间默认是10秒;对于特定组查询来说,最大响应时间默认为1秒;组地址,普遍组查询报文中,组地址设置为0;特定组查询报文中,组地址为需要查询的组地址;在成员报告或离开主动消息中,组地址为需要报告或离开的组地址;

  SSM模型中的新需求

  提示:如上图所示,如果client A和RTC之间运行的是IGMPv1或IGMPv2,client A无法对组播源进行选择,无论是否需要,都会同时接受到来自source A和source B的数据;为了满足ssm模型的新需求,IGMPv3提供了在报文中携带指定组播源信息的能力;

  IGMPv3工作机制

  提示: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中报文数量大大减少;

  IGMP各版本间的差异