二、组播(组播组管理协议)整理篇


简述:

组播组管理协议运行在主机与相连的三层组播设备之间

常用的组播组管理协议为IGMP,用于处理主机与三层组播设备间的关系

 

组播管理协议简介:

IGMPv1:在RFC1112中定义了基本的查询和成员报告过程

IGMPv2:在RFC2236中对比v1添加了组成员快速离开机制和查询器选举机制

IGMPv3:在RFC3376中对比v2版本添加了指定组播源功能,并取消了成员报告抑制机制

所有IGMP协议都支持ASM模型,而IGMPv3支持SSM模型


 

IGMPv1

一、主机加入维护与离开(组播组表项的建立)

1、组播路由器周期性发送 普遍组查询报文(General Query) 来知晓网段上是否有组播的接收者(默认周期为60秒)

2、主机收到General Query后,如果想要加入这个组播组,就会回应 成员报告报文(Report)

3、当路由器发送三次 General Query 报文后没有主机响应这个报文,则路由器不再向该网段转发组播报文(v1主机都是静悄悄的走)

IGMPv1协议主要基于查询和响应机制完成组播组管理,IGMPv1中,由路由器协议PIM选举出唯一的组播信息转发者(Assert Winner 或DR)

查询器只负责网段的组成员关系查询,IGMP没有离开信息(Leave Messages),路由器使用基于超时的机制去发现其他成员不关注的组

IGMPv1支持host membership query 和 host membership report 报文

 

IGMPv2

相比v1增加了快速离开机制与独立查询器选举机制(v1版本查询器通过组播路由协议,将选举好的DR来充当查询器)

一、选举

1、初期,所有运行IGMPv2的路由器都认为自己是查询器,并向网段内的所有主机和路由器发送IGMP General Query,目的地址为224.0.0.1

2、网段内的其他路由器收到该报文后,会进行比对,将报文源IP地址与自己的接口地址进行比较,IP地址小的路由器将会成为本网段的查询器,其他路由器会成为非查询器(Non-Querier)

3、所有非查询器都会启动一个定时器,在定时器超时之前,如果收到了来自查询器的IGMP查询报文,则会重置该定时器,否则会重新发起查询器选举

最大响应时间(Max Resp Time),字段仅在Membership Query报文中使用,该字段规定了主机在发送一个Membership Report报文时最大的延时时间,单位为0.1秒,默认为100(即为10秒)

Membership Report报文和Leave Group报文中,会由主机设置为0

二、加入

1、IGMP查询器会周期性以组播方式向本地网段内的所有主机发送IGMP General Query 报文,目的地址:224.0.0.1,TTL值为1

2、主机在收到此报文后,如果想要加入,则会等待一段时间(成员报告抑制机制),对General Query报文进行响应,发送Membership Report报文

等待的时间为[0,Max Reps Time]之间的一个随机值,Max Reps Time 为最大响应延时,由路由器在General Query报文中发布(这是成员报告抑制机制的内容)

3、假设某台主机延时较低,提前发送了回应报文Membership Report报文,其他主机收到这个报文后,会进行比对,如果请求属于同一个组播组,那么其他主机就不会发送Membership Report报文,这样就会减少本地网段的信息流

4、路由器在收到Memberships报文后会创建组播转发表,并添加到该表中

(*,G)表  *代表不知道组播源IP  G:目的的组播地址

(S,G)表  S:组播发送源IP  G:目的组播地址

三、离开

1、主机离开某个组播组时会向本地网段的所有组播路由发送Leave Group报文,目的地址:224.0.0.2,报文中包含离开主机组播的地址信息

2、IGMP查询器在收到Leave Group报文后,会发送另一种查询报文Group-Specific Query报文,用于确认该组播组在网段内是否还有成员存在,目的地址为要查询的指定组播地址

3、如果网段内还有成员想要留住组播组,那么主机会在[0,Max Reps Time]时间内回复Membership Report报文,这样路由器就不会删除表项,继续维护组播组,直到网段内不再有组播组成员

 

IGMPv3

V3版本将Membership Query分为三种:General Query,用于查询接口下所有组播成员信息;Group-Specific Query,用于查询接口下指定的成员信息;Group-and-Source-Specific Query,该类型为IGMPv3中新增加的,用于查询接口下是否有成员需要接收指定源列表中的源发出的特定组的组播流

 

一、普遍查询(General Query)

1、IGMPv3路由器会周期性的发送General Query报文

2、IGMPv3主机收到General Query报文后在接口设置定时器

3、定时器超时后发送Membership Report报文

主机A希望接收228.1.1.1的数据,但不希望接收2.2.2.3组播源的数据,以此主机A回复的 Membership Report 报文中的组记录为IS_EX(2.2.2.3,228.1.1.1)

主机B希望接收组播组228.1.1.2的数据,且希望接收来自组播源2.2.2.2和2.2.2.4的数据,因此主机B回复的Membership Report报文中的组记录为IS_IN(2.2.2.2+2.2.2.4,228.1.1.2)

主机C希望接收组播组228.1.1.1的数据,但是不希望接收来自组播源2.2.2.1的数据,因此主机C回复的Memberships Report报文中的组记录为IS_EX(2.2.2.1,228.1.1.1)

4、路由器收到Membership Report报文后,会为组播组228.1.1.1和228.1.1.2建立表项维护状态信息.

组播组228.1.1.1,过滤模式为EXCLUDE,排除的组播源为2.2.2.1和2.2.2.3,表示为EXCLUDE(NULL,2.2.2.1+2.2.2.3,228.1.1.1)

组播组228.1.1.2,过滤模式为INCLUDE,需要接收的组播源为2.2.2.2和2.2.2.4,表示为INCLUDE(2.2.2.2+2.2.2.4,228.1.1.2)

 

二、特定源组查询(Group-and-Source-Specific Query)

1、当主机B不再希望接收到来自组播源2.2.2.2发送的组播数据时,会主动发送Membership Report报文,报文中包含的组记录为BLOCK(2.2.2.2,228.1.1.2)

2、路由器收到组记录为BLOCK(2.2.2.2,228.1.1.2)的Membership Report报文后,会发送Group-and-Source-Specific Query报文,询问网段上还有没有主机希望接收组播源2.2.2.2发送组播地址为228.1.1.2的组播数据

如果网段上仍然有主机愿意接收该特定源发送的组播流,主机会回应Membership Report报文,报文中包含的组记录为IS_IN(2.2.2.2,228.1.1.2)

如果在Max Reps Time时间内,路由器没有收到任何对于该Group-and-Source-Specific Query报文的回应,则路由器会在组播组228.1.1.2对应的源列表中,删除组播源2.2.2.2,此时该组播组状态信息为INCLUDE(2.2.2.4,228.1.1.2)。组播组228.1.1.1的源列表信息保持不变。

 

三、特定组查询(Group-Specific Query)

当主机不愿意接收某组组播的数据时,可以发送离开组报文。IGMPv3取消了Leave报文,使用特殊的组记录方式来表示主机离开某个组

1、主机B希望离开组播组228.1.1.2,则主机B会主动发送Membership Report报文,报文中包含的组记录为TO_IN(NULL,228.1.1.2),表示不想接收任何组播源发送到组播组228.1.1.2的数据

2、路由器收到组记录为TO_IN(NULL,228.1.1.2)的报文,会为组播组228.1.1.2发送一个Group-Specific Query报文,如果在Max Reps Time时间内路由器没有收到任何关于该Group-Specific Query报文,如果在Max Reps Time 时间内路由器没有收到任何关于该Group-Specific Query报文的回应,则路由器会删除整个组播组228.1.1.2的表项信息

IGMPv3还可以通过一种特殊的组记录来实现IGMPv1/v2中主机加入某组组播的功能。例如,当IGMPv3主机想要加入组播组228.1.1.1且不关心组播源时,可以发送记录为IS_EX(NULL,228.1.1.1)的Membership Report报文,表示不排除任意源发送到组播组228.1.1.1的数据

 


 

 修补:

v3版本在兼容、继承v1 v2的基础上,进一步增强了主机的控制能力(可以指定组播源 或 拒绝某组播源 数据)并增强了Membership Query报文和Membership Report报文的功能

增加对特定源组查询的支持,在Group-and-Source-Specific Query报文即携带组地址,还携带一个或多个源地址

取消Leave Group报文类型,通过在Membership Report 报文中申明不再接收任何源发送给某组组播的数据,即可实现离开这个组播组的功能

Membership Report 报文的目的IP使用组播224.0.0.22,不再使用具体组播组的地址(原来是用组播组的地址)

Membership Report 报文可以携带多个源组信息,不同于IGMPv1/v2只能包含一个组信息,这样可以减少大量的Membership Report 报文数量(一个报文把所有的源组信息囊括了)

取消成员报告抑制机制


 

详细的IGMPv3(可看可不看,但这套流程是配合IGMPv3上面的内容,还是建议详读一下,以此相互印证)

IGMPv3过滤模式和源列表

IGMPv3主机为接口上每一个组播组都维护一个表项信息,格式为:(组地址,过滤模式,源列表)

 

一、过滤模式:

1、过滤模式包含INCLUDE和EXCLUDE两种类型

INCLUDE模式:表示只接收来自于在源列表中列出的组播源发送的组播数据包

EXCLUDE模式:表示只接收来自于不在源列表中列出的组播源发送的组播数据包

过滤模式改变记录:当接口维护的某个组播组的过滤模式发生变化时,主机会主动向路由器发送包含过滤模式改变记录的Membership Report报文

2、过滤模式改变记录包括CHANGE_TO_INCLUDE_MODE和CHANGE_TO_EXCLUDE_MODE两类

CHANGE_TO_INCLUDE_MODE(S,G)表示对于组播组G而言,接口的过滤模式已经从EXCLUDE模式变为INCLUDE模式。该组记录简写为TO_IN(S,G)

CHANGE_TO_EXCLUDE_MODE(S,G)表示对于组播组G而言,接口的过滤模式已经从INCLUDE模式改变为EXCLUDE模式。该组记录简写为TO_EX(S,G)

源列表包含0个或多个IP单播地址,通常用集合形式来表示

例如:主机A希望接收来自于组播源1.1.1.1发送的目的地址为228.1.1.1的组播流,则主机A维护的组播组228.1.1.1的表项为  INCLUDE(1.1.1.1,228.1.1.1),不希望接收则是  EXCLUDE(1.1.1.1,228.1.1.1)

 

二、IGMPv3主机侧维护的组状态(人话:主机这边是如何维护组状态的)

IGMP主机还为接口上每一个组播组维护状态信息。当收到路由器发送的 Membership Query 报文时,主机向路由器回应组播组的当前状态,当组播组的状态改变时主机主动向路由器发送 Membership Query 报文通知组播组的状态发生变化

IGMPv3组播组的三种状态:

1、当前状态记录:用于响应接口上收到的Membership Query报文,向路由器报告组播组的当前状态

当前状态包括:MODE_IS_INCLUDE 和 MODE_IS_EXCLUDE。同一时刻一个组播组只能处于一种当前状态

MODE_IS_INCLUDE(S,G)表示接口对于组播组G的过滤模式是INCLUDE,简写为IS_IN(S,G)。源列表S表示对于该组播组,主机所有感兴趣的组播源。

MODE_IS_EXCLUDE(S,G)表示接口对于组播组G的过滤模式是EXCLUDE,简写为IS_EX(S,G)。源列表S表示对于该组播组,主机所有不希望接收的组播源

 

2、过滤模式记录:当接口维护的某个组播组的过滤模式发生了变化时,主机会主动向路由器发送包含过滤模式改变记录的Membership Report报文

过滤模式改变记录:CHANGE_TO_INCLUDE_MODE和CHANGE_TO_EXCLUDE_MODE两类

CHANGE_TO_INCLUDE_MODE(S,G)表示对于组播组G而言,接口的过滤模式已经从EXCLUDE模式变为INCLUDE模式。该组记录简写为TO_IN(S,G)

CHANGE_TO_EXCLUDE_MODE(S,G)表示对于组播组G而言,接口的过滤模式已经从INCLUDE模式变为EXCLUDE模式。该组记录简写为TO_EX(S,G)

 

3、源列表变化记录:当接口维护的某个组播组的源列表发生变化时,主机会主动向路由器发送包含源列表变化记录的Membership Report报文

源列表变化记录包括:ALLOW_NEW_SOURCES和BLOCK_OLD_SOURCES两类

ALLOW_NEW_SOURCES(S,G)表示对于组播组G而言,主机希望接受一些新的组播源S发送的组播数据。如果当前过滤模式为INCLUDE,S将被添加到源列表中;反之,如果当前过滤模式为EXCLUDE,S将被从源列表中删除。该组记录简写为ALLOW(S,G)

BLOCK_OLD_SOURCES(S)表示对于组播组G而言,主机不再希望接收S发送的组播数据。如果当前过滤模式为INCLUDE,则S被从源列表中删除;反之,如果当前过滤模式为EXCLUDE,则S将被添加到源列表中。该组记录简写为BLOCK(S,G)

 

如果源列表发生了两种变化,一种是允许了新的组播源,另一种是阻塞旧的组播源,则主机需要为同一个组播地址发送两个组记录,一个是ALLOW(S1,G),另一个是BLOCK(S2,G)

 

三、IGMPv3路由侧维护的组状态(人话:路由这边是如何维护组状态的)

1、IGMPv3路由器侧也为接口上的每一个组播组维护状态信息,和IGMPv3主机侧相比,路由器还为每一个组播组以及源列表中的每一个组播源维护状态定时器

2、路由器维护的状态格式为(组地址,组定时器,过滤模式,源记录列表),其中源记录的格式为(源地址,源定时器)

3、路由器维护每一个组播组只对应一种过滤模式:

对于INCLUDE模式,源记录列表包含该接口网段的主机需要接收的组播源列表,表示为:INCLUDE(S,G)

对于EXCLUDE模式,源记录列表包含两类源列表,第一类与过滤模式相反,是主机需要接收的组播源列表S1;第二类是主机不需要接收的组播源列表S2,表示为:EXCLUDE(S1,S2,G)

 

组定时器只在EXCLUDE模式时有用。当组定时器老化时,如果所有源定时器也老化则路由器会删除该组记录;如果此时仍有源定时器运行,则组过滤模式就会从EXCLUDE变为INCLUDE

 

组记录格式主要包括:记录类型、组播组地址、组播源个数、组播源地址列表

组记录类型包含:当前状态记录、过滤模式记录

过滤模式改变记录分为:TO_IN、TO_EX

源列表变化记录:ALLOW、BLOCK

 


 

ps.新开一篇

2021/06/02

ps.这篇差不多整理完了

2021/06/02

ps.这篇应该整完了,我要去学习安全的内容了,考核要紧,下个星期就考了,后面的内容就暂时不更新

2021/06/03

 


 

参考资料:

《构建H3C高性能园区网络_第5篇_IP组播》

https://baijiahao.baidu.com/s?id=1640839397029583441&wfr=spider&for=pc

https://forum.huawei.com/enterprise/zh/thread-261979.html

https://www.renrendoc.com/paper/109824221.html

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM