HCIP——组播(1)

背景:网络中存在点对多点的业务需求,使用单播和广播进行承载时,都会出现不同的问题

使用单播进行承载时,相同的数据流较多,服务器端压力过大

使用广播进行承载时,收费内得不到安全保障

组播数据报文结构:

D.MAC  +  S.MAC  +  S.IP  + D.IP  + payload

D.MAC:为组播MAC地址,通过计算得出

S.IP:为组播服务器的IP地址,是个单播IP地址

D.IP:为组播组的IP地址,用于标识流量接收者的组

组播IP地址分类:

有类IP地址中,D类为组播使用IP地址范围

224.0.0.0-224.0.0.255

给路由协议永久预留组播组地址

224.0.1.0-231.255.255.255

233.0.0.0--238.255.255.255

任意源临时组播组地址

232.0.0.0--232.255.255.255

指定源临时组播组地址

239.0.0.0--239.255.255.255

本地管理任意源临时组播组地址

组播MAC地址的计算:

组播MAC地址前24bit固定为01-00-5e,第25bit位固定为0

再将IP地址中后23bit位映射到组播MAC地址后23位上,此时会丢失中间5bit位的映射,导致出现32个组播IP地址映射到同一个组播MAC地址上

但是IANA组织认为冲突性不大,不影响使用

组播网络结构:

源端网络:组播源设备到达第一跳路由中间的网络称之为源端网络

组播转发网络:第一跳路由器到达最后一跳路由之间的网络称之为组播转发网络,需要运行组播路由协议保障组播转发网络中无环,并且为最优路径

成员端网络:由组播数据接收到到达最后一跳路由之间的网络,最后一跳路由器需要运行对应协议判断网络中存在哪些组播接收者

组播的服务模型:

ASM:任意源组播模型

接收者不能指定组播源设备,只能接收对应组播组IP地址的流量

SSM:指定源组播模型

接收者可以指定组播源设备,接收对应组播组流量时,还需要指定对应的组播源发送的数据

组播路由:

为组播数据生成的路由表,路由表中包含组播源地址(单播地址),组播组地址(组播地址),入接口(通过RPF检测得到的接口),出接口(下游存在组播接收者的接口)

入接口:用于接收组播数据,当组播数据不是从入接口进入,则执行丢弃操作

出接口:收到正确组播数据后,出所有的出接口执行转发操作

RPF检测机制:

从对应接口收到组播数据后,读取报文中的源IP地址,查看单播路由表,去往源IP地址的单播路由出接口是否与接收组播数据的入接口一致,如果一致则通过RPF检测,如果不一致则丢弃

RPF路由选举:

1、收到组播数据后,如果路由器上存在去往组播源的单播路由、MBGP路由、静态组播路由

2、在三种路由中分别选出最优的路由

3、在三种最优路由中,选出一条最优路由,将出接口作为RPF接口

选举规则:

1、比较掩码,最长掩码匹配原则(与单播路由类似)

2、掩码都相同时,比较路由优先级,优先级以小为优

3、当优先级也相同时,此时静态组播路由>MBGP路由>单播路由

IGMP:互联网组管理协议

属于TCP/IP协议簇中的网络层协议,协议号为2

作用:用于得到组播网络中的组成员位置信息

组播网络感知组播组成员位置:

1、通过手工静态方式:

将每个组播组成员所在网络的最后一跳路由器实现静态加组,使得路由向上将组播流量进行引流操作,但是当网络中存在较多的组播组成员时,配置工作量较大,并且不易维护

2、通过IGMP动态加组的方式

通过组播组成员与成员端网络中的路由器进行交互IGMP报文,使得路由感知到组播组成员的加组请求,动态的完成加组操作(生成IGMP组表项和IGMP的路由表)

IGMP组表项:

组播成员的IP地址、组播组信息

IGMP路由表项:

出接口信息、出接口IP地址、任意源组播组

通过PIM协议接管IGMP生成的组表项结合组播流量得到PIM路由表项

PIM路由表项:

从IGMP表项中得到:组播组信息

从组播流量中得到:组播源IP地址、上游接口(入接口)

结合PIM路由表和IGMP路由表可以生成组播路由表:

从IGMP路由表中得到:出接口信息

从PIM路由表中得到:入接口信息、组播源IP地址、组播组信息

IGMPv1的报文:

普遍组查询报文:

查询器使用此报文查询哪些组播组还存在组播接收者

成员关系报告报文:

组成员使用此报文进行加组操作

报文格式:普遍组查询报文与成员关系报告报文采用相同报文格式

version:版本,在IGMPv1中,该值为1

type:标识该报文为具体类型

0x11:为普遍组查询报文

0x12:为成员关系报告报文

unused:未使用字段,进行保留

checksum:校验和,在进行校验和计算时,该值为0,需要发送数据时将校验和进行填充

Group address:组地址

1、在普遍组查询报文中,该字段固定为0.0.0.0

2、在成员关系报告报文中,该字段为成员需要加组的组播组地址

查询器:

当成员所在二层网络中存在多个路由器可以发送普遍组查询报文时,会选举出一个成员端的查询器,在IGMPv1版本中,需要通过PIM协议进行选举,IGMP没有选举查询器的能力

查询器的作用:

1、朝网络中周期发送普遍组查询报文,当非查询器收到普遍组查询报文时,将会抑制发送普遍组查询报文,减少网络中的普遍组查询报文

2、朝二层网络中发送组播数据,抑制非查询器发送组播数据

3、当二层网络中,非查询器在周期时间内未收到查询器发送的普遍组查询报文,则会认为查询器故障,发送自己的普遍组查询报文,同时由自己发送组播数据

IGMPv1组成员加组机制:

当查询发送普遍组查询报文后,二层网络中的所有组成员都能够接收到普遍组查询报文,同时为自己启动一个随机计时器,取值为0--10s,当设备的计时器结束后,将直接回应成员关系报告报文,用于感知查询器对应组中还存在接收者,由于IGMP报文采用组播形式发送,会导致同组的其他设备都收到成员关系报告报文,如果收到同组的其他设备的成员关系报告报文,则将自身的计时器取消,不在回应成员关系报告报文(此机制也称之为同组抑制机制)

IGMPv1:离组机制(静默离开)

查询器会周期发送普遍组查询报文,用于查询所在网络中的组播组成员,当某个组播组中不存在成员时,查询器将不会得到该组播组的成员关系报告报文的回应,查询器在默认两次未收到成员的回应,则会将对应组播的表项进行删除,

离组时间 = 查询器发送普遍组查询报文的周期时间(默认为60) * 健壮系数(默认为2)+ 最大响应时间(默认为10s),所以v1的离组时间默认最大为130s

IGMPv2:

大部分机制沿用v1的功能,针对v1的缺点做了改良

IGMPv2的报文格式:

version:IGMP的版本号,IGMP的值为2

type:标识具体的报文类型

0x11:查询报文,包含普遍和特定

0x12:v1的成员关系报告报文

0x16:v2的成员关系报告报文

0x17:离组报文

Max response time:最大响应时间,为报文发出后,成员需要在最大响应时间内做出回应

checksum:校验和,与v1的一致

Group address:组播组地址

1、在普遍组查询报文中,为0.0.0.0,用于查询所有的组播组成员

2、在特定组查询报文中,为需要查询的组播组地址

3、在成员关系报告报文中,为成员需要加组的或者所在组播组的地址

4、在离组报文中,为成员需要离开组播组的地址

IGMPv2的离组机制:使用离组报文 + 特定组查询报文

1、当查询器收到组成员的离组报文后,报文中携带需要离组的组播组地址

2、查询器通过发送特定组查询报文,将group address地址设置为成员离组的组播组地址,用于判断成员离组后,该组播组中是否存在其他组播成员

3、如果查询器收到成员关系报告报文的回应,则认为还由其他组员存在,继续将组播数据朝下游发送

4、如果在最大响应时间结束后,查询器未收到成员关系报告报文,则认为该组播组成员全部离组,将不在朝下游发送组播数据,并且将该接口从组播表项中删除

IGMPv2的查询器选举:

V2具有独立选举查询的能力

1、在同一个二层网络中存在多台组播路由器时,初始情况下,都认为自己是查询器角色,发送自己的普遍组查询报文,源IP地址为自身接口IP地址,目的IP地址为224.0.0.1所有三层设备监听

2、所有的路由都会收到其他路由发送的普遍组查询报文,通过比较报文中的源地址选举出查询器

IP地址以小为优,选举成为查询器角色的路由将履行查询角色的功能

IGMPv2版本兼容IGMPv1版本:

当IGMPv2的查询器收到网络中成员发送的IGMPv1版本的成员关系报告报文,则会将自己设置为v1版本,后续将发送v1版本的普遍组查询报文,用于兼容v1版本的客户端,如果查询器收到网络中v2版本的离组报文,将不会进行回应

IGMPv3:

大部分机制沿用v2版本机制,针对v1和v2版本无法适应SSM模型而进行的改进

V3版本不存在同组抑制机制,当查询器发送普遍组查询报文后,所有的成员设备在收到后启动随机计时器,计时器结束后,自行回应成员关系报告报文,无论是否收到同组成员的成员关系报告报文

IGMPv3的查询报文:

1、普遍组查询报文:对二层网络中的所有组成员进行查询

2、特定组查询报文:针对特定组播组的成员进行查询

3、特定源组查询报文:针对接收特定组播源发送的特定组播组的成员进行查询,为适应SSM使用

查询报文格式:

version:版本,IGMPv3为3

type:具体的报文类型,0x11

Max resp code:发送查询报文后的最大响应时间,默认为10s

Checksum:校验和

Group address:组播组地址

1、在普遍组查询报文中,为0.0.0.0,用于查询所有的组播组成员

2、在特定组查询报文中,为需要查询的组播组地址

3、在特定源组查询报文中,为需要查询的组播组地址

Number of source:组播源地址的数量

Source address:组播源地址

成员关系报告报文:

type:为0x22,成员关系报告报文

checksum:校验和

Number of group records:携带组播组地址的数量

Group records:具体的组播组接收信息

Records type:表示报文具体的类型

include:表示需要接收该组播源发送的组播数据

exclude:表示需要过滤该组播源发送的组播数据

Change_to_include:表示需要从exclude模型转变为include模式

Change_to_exclude:表示需要从include模式转变为exclude模式

Allow_new_sources:不管处于何种模型,都需要接收该组播源发送的数据

如果原来模式为include,则向include中添加携带的组播源信息

如果原来的模式为exclude,则将exclude中对应的组播源信息删除

Block_old_source:不管处于何种模型,都需要将该组播源发送的数据过滤

如果原来模式为include,则将include中对应的组播源信息删除

如果原来模式为exclude,则将对应的组播源信息放入到exclude中

Number of source:该报文为该组播组地址携带了多个组播源的地址

Multicast address:组播组地址

Source address:组播源地址,可以存在多个

IGMPv3离组机制:V3中由于没有定义专门的离组报文,故需要借助成员关系报告报文和特定源组查询报文实现离组机制

1、当成员需要退出组播组时,发送改变源组对应关系的成员关系报告报文

2、当查询器接收到成员不需要接收组播组数据后,会发送特定源组查询报文,会携带组播组地址及组播源地址,用于查询是否还存在对应源组的接收者

3、如果查询没有收到成员关系报告报文的回应,则认为不存在成员,将对应组播表项删除

4、如果查询器收到成员关系报告报文,则认为还存在对应的组播接收者,继续朝该网络中发送组播数据

IGMP各版本之间的差异:

区别

IGMPv1

IGMPv2

IGMPv3

查询器的选举

借助PIM协议进行选举

自行选举

自行选举

离组机制

静默离开

通过离组报文

通过成员关系报告报文

特定源组查询报文

不支持

不支持

支持

特定组查询报文

不支持

支持

支持

兼容版本

支持兼容v1版本

支持兼容v1和v2版本

同组抑制机制

存在

存在

不存在

指定源加组(支持SSM模型)

不支持

不支持

支持

查询器故障切换机制

由于查询器与非查询器之间运行的协议为PIM协议,建立的PIM邻居关系,当查询器故障后,非查询器能够感知到查询器的故障进行切换

缺省状态下,v2版本的查询器切换时间为125s

切换时间 = 周期周期(默认60)* 健壮系数(默认为2) + 1/2的最大响应时间

缺省状态下,v2版本的查询器切换时间为125s

切换时间 = 周期周期(默认60)* 健壮系数(默认为2) + 1/2的最大响应时间

IGMP snooping

背景:由于交换机接收到组播数据后,会执行泛洪操作,导致所有的成员都会收到所有的组播数据

原理:通过在交换机上构建二层组播转发表项,使得特定的组播数据,从对应的接口进行转发,不在执行泛洪操作

二层组播转发表项 形成过程:

1、在交换机上开启IGMP snooping功能,使得交换机监听转发的组播协议报文,如果从一个接口收到普遍组查询报文,则将该接口列为路由器接口或者上游接口,如果在一个接口上收到成员关系报告报文,则将该接口列为下游接口或者成员接口

2、后续收到组播数据后,通过二层转发表项指导组播数据进行转发操作

二层表项中的接口角色:

1、路由器接口(上游接口):交换机通过路由器接口接收组播数据等

路由器接口的形成:

1、通过静态手工配置得到:不推荐使用

2、通过监听其他协议报文得到,例如IGMP的普遍组查询报文、PIM的hello报文等

2、成员接口:通过监听成员关系报告报文得到

监听成员关系报告报文时,会查询加入的组播组地址,与接口形成映射

二层转发表项的维护:

当交换机从某个成员接口收到离组报文后,会将离组报文朝上游接口进行转发,路由器收到后,会朝交换机发送特定组查询报文,用于查询特定组下的成员,交换机将该特定组查询报文进行泛洪操作,成员收到后,回应成员关系报告报文,交换机未从成员接口收到成员关系报告报文,会将对应的表项中删除对应映射关系

IGMP SSM mapping

背景:网络中如果存在IGMPv1和IGMPv2的客户端,此时客户端无法指定组播源地址,但是由于SSM的需求

原理:通过在查询器上将组播组和组播源地址进行静态绑定,生成静态的mapping表项(S,G),使得在成员发送成员关系报告报文后,当组播流量被推送至查询器后,只能由mapping表项中的组播源地址将下游接口列入到组播路由表中。

配置命令:

[Huawei-igmp]ssm-mapping 230.1.1.1 255.255.255.255 192.168.1.1

IGMP proxy:IGMP代理

背景:由于同一二层网络中成员较多,所有的成员发送的报文都需要通过查询器进行处理,此时会导致查询器负载较大

原理:通过在查询器和成员之间部署代理设备(通常使用三层交换机进行部署),所有的成员报文都通过代理设备处理

代理设备的接口角色:

1、主机接口:面向查询器的接口,用于接收查询器发送的报文及组播流量(对于查询器来讲为成员端)

2、路由器接口:面向用户的接口,用于接收成员发送 的成员关系报告报文和离组报文(对于用户来讲为路由器端)

IGMP环境下的加组:

1、组播组成员发送成员关系报告报文,用于请求接收某组播组的数据

2、IGMP代理设备收到成员关系报告报文后,查看自身是否存在对应组播组的转发表项

1、如果存在,则说明查询连接代理设备的接口已经为下游接口,不将成员关系报告报文发送给查询器设备

2、如果不存在,则说明查询器连接代理设备的接口下没有接收者,需要将成员关系报告报文发送给查询器,使得查询将接口列为下游接口,引流组播流量

IGMP环境下的离组:

1、组播组成员发送离组报文或者成员关系报告报文用于离组

2、代理设备收到后,将发送特定组查询报文或者特定源组查询报文,查询对应组播组下是否还存在接收者

1、如果有成员回应,则下游还存在组播接收者,不将离组报文或成员关系报告报文发送给查询器

2、如果没有成员回应,则代理设备会将离组报文或成员关系报告报文发送给查询器。查询收到后,发送特定组查询报文或者特定源组查询报文,用于查询是否存在组播接收者

1、存在则保留此下游接口

2、不存在则将此接口从组播表项中进行删除操作

  • 34
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值