组播
目录
组播
组播的概述:
- 组播传输机制分为一对多和多对多。一对多较为比多对多技术成熟
- 组播传输作为IP数据传输的三种方式之一,是指接收者的属灵和位置在缘端不知道的情况下,仅由缘端发出一份组播报文,像目标IP地址发送数据的过程,效率高,带宽消耗低,(优点)
- 组播的组成:组播源,第一跳路由器(缘端DR),最后一跳路由器(成员端DR),组播路由器,组播接收者。
- 组播的缺点:
- 基于UDP协议
- 没有流控机制
- 没有拥塞避免机制,会导致报文重复,报文失序
组播模型:
- ASM
- 任意源组播,ASM模型中,接收者无法预先知道组播源的位置,接收者当然也就额可以额接收任意源流出的组播流,
- RPT树
- SSM
- 特定源组播,SSM模型中,接收者可能进队某些源发送的组播信息感兴趣而不愿接受其他源发送的组播信息,只要接收者
- SSM模型是借助PIM-SM的部分技术和IGMPv3/MLDv2来实现的,无需维护RP、无需构建RPT、无需注册组播源,可以直接在源与组成员之间建立SPT。
- SFM
- 过滤源组播,组播节点对接收到的组播报文的源地址进行检查,允许或禁止来自某些组播源的报文通过
组播地址:
D类地址范围 | 含义 |
---|---|
224.0.0.0 ~224.0.0.255 | 永久组地址,Link-Local地址,该地址仅工作在一个IP网段 |
224.0.1.0~224.0.1.255 | 永久转发地址,路由器能转发使用该组播地址的报文, |
232.0.0.0~232.255.255.255·3 | SSM使用的组播地址 |
224.0.0.0231.255.255.255-233238 | ASM使用的组播地址 |
224.0.0.0~239.255.255.255 | 用户可以申请的私有组播地址 |
组播MAC和IP地址的映射:
- 组播MAC高24位为01-00-5E,第25位为0,后23为IP地址的后23位
IGMP:
-
因特尔网组管理协议
-
工作在网络层之上,工作在组播最后一跳路由器和主机之间
-
用来在成员端DR之间与组播接受者之间建立和维护组播组成员关系。
IGMPv1:
- 报文:
- 普遍组查询报文-0x11
- 成员关系报告报文-0x12
- 工作机制:
- 首先选举查询器,由于IGMP没有查询器这个概念,所以需要使用PIM路由器的DR来充当查询器的角色,先比较优先级,再比较IP地址大的
- 由查询器每60s向下发送普遍组查询报文,其组播组地址为空,代表所查询的是任意组,目的地址为224.0.0.1
- 主机接收到查询报文后,会随机启动一个最大响应时间MRT(0~10s),然后在响应时间超时之后,就会向查询器回复一个成员关系报告,这个成员关系报告报文的组播组地址为想要加入的组播组,目的地址也为该组播组地址,其他主机也能收到该成员关系报告报文,并且抑制自己报告报文的发送,
- 查询器收到成员报告报文后,会在本地生成一个(* G)表项,并且讲接收到成员关系报告报文的接口加入(* G)表项的下游接口。
- 离组机制:
- 查询器每60s发送查询报文,如果在发送两次查询报文后,任然没有得到任何回应,就代表该组播组里面没有任何成员了,那么就会将该接口从(* G)表中的下游接口删除,
- 所以IGMPv1,离组的话,要经过130s(60+10+60)
IGMPv2:
- 报文:
- 普遍组查询报文/特定组查询报文-0x11
- 成员关系报文报文-0x12 v1 /0x16 v2
- 离组报文 0x17
- 工作机制:
- 当由成员想要离开该组,那么会向上发送离组报文,报文中组播组地址为想要离开的组,目的地址也为该组播组地址,
- IGMPv2有查询器这个概念,查询器的选举,比较IP地址小的
- 当查询器收到离组报文之后,便会向主机发送一个特定组查询报文,用来查看该组播组里面是否还存在其他主机,
- 特定组查询报文,其组播组地址为要查看的组播组,目的地址也为该组播组地址,每1s发送一次,共发两次,特定组查询报文的最大响应时间为1s,
- 当发送两次特定组查询报文之后,任然没有得到任何回应,就代表该组播组里面没有任何成员了,那么就会将该接口从(* G)表中的下游接口删除,
- 所以IGMPv2,离组的话,要经过2s,但是如果组播组内的最后一个主机异常离线,则发送不了离组报文,那么仍然需要130S来判定是否需要在转发数据到当前网段
- 查询器的选举:
- IGMP中,查询器的选举,直接比较IP地址小的,但是查询器也有超时时间,为125s(2x60x1/2的最大响应时间)2为健壮系数,当在这个时间段之内,没有收到对方发送的查询报文,就会认为对方挂掉了,然后就会解题对方的职务,成为查询器,125s是因为,IGMPv1中和IGMPv2主机异常离线,需要130s才能感知到,所以需要在查询器感知之前,来进行一个查询器的切换,
- 查询器负责向下游主机发送查询报文,DR负责向下游主机发送组播数据
IGMPv3:
- 报文:
- 普遍组查询报文/特定组查询报文/特定源组查询报文
- 成员关系报告报文
- 过滤模式:
- include:初始状态,想要加入那个源
- exclude:初始状态,想要排除那个源,如果排除列表为空,说明可以加入任意源
- change_include:过滤模式由include转换为exclude
- change_exclude:过滤模式由exclude转换为include
- allow_new_sources:表示在现有的基础上,再新加入别的源
- block_old_sources:表示在现有的基础上排除该源
- 工作机制:
- 主机和路由器之间如果运行的IGMPv3协议,那么用户可以选择接收那些组播源,
- IGMPv3没有成员抑制机制了
- 离组机制通过block_old_sources来完成
IGMP Proxy
- IGMP代理,他能同时执行客户主机和查询者的功能,
- 在查询器看来,他就是接收者,在接收者看来,他就是查询器,他会同时接收查询报文和报告报文,然后再本地生成表项,
- 他会代替一部分查询者的工作,当接受者向查询者请求信息,如果IGMP Proxy本地有该信息,那么他就会以查询器的身份向接受者做出响应,如果没有,则会以接收者的身份向查询器做出请求。离组的时候同样如此,收到离组后,IGMP Proxy会以回应一个特定组查询,查看是否存在其他成员,若存在,则继续往下转发数据,若不存在,则删除该接口的组播表项,然后以接收者的身份向上发送离组报文。
IGMP Snooping
- 在二次交换机上提供的一种组播机制,通过侦听组播路由和用户之间发送的组播报文,交换机根据这些把报文生成对应的组播 转发表项,
- IGMP Snooping的功能分为转发层面和控制层面,控制层面由CPU根据报文来生成对应的转发表项,转发层面由硬件的物理引擎根据已经建立好了组播转发表项来转发报文
IGMP Snooping的工作原理:
- 交换机接收到查询报文,或PIM的报文,来判断该接口连接的是组播路由器,然后将该接口动态加入组播转发表中的路由侧接口,该路由侧的接口超时时间为105s/180s(PIM为105s,IGMP为180s,该关系依赖于PIM的hello时间而定的)通过周期性的发送查询报文或PIM报文来刷新该时间
- 交换机接收到成员关系报告报文,然后将该接口动态加入组播转发表中的成员侧接口,该成员侧的接口超时时间为130s(IGMP离组时间),通过周期性的发送成成员关系报告报文来刷新该时间
- IGMP Snooping收到查询报文后,会向同一vlan内除接收端口以外的所有接口进行转发,如果是IGMPv2的特定组查询报文,或IGMPv3的特定源组查询报文,则只会向发送已经存在的组播组成员端口转发
- IGMP Snooping在成员端口间互相不转发成员关系报告报文,因为IGMPv1/v2由成员抑制机制,如若转发会抑制报告报文的发送,造成成员侧动态端口收不到报文而老化
- 当交换机收到成员离组报文后,该成员侧的接口超时时间由130s变为2s(健壮系数x特定组查询时间间隔=2x1=2),如果2s之内没有收到报告报文,则将此接口从成员侧端口中删除,如果该接口是该组播转发表项中的最后一个接口,则直接将此组播转发表项删除
- 一般都是IGMP Snooping和 IGMP Proxy结合使用,组成IGMP Snooping Proxy,这样交换机不仅可以构建总部转发表项,避免组播报文过度泛洪,又减轻了上游查询器的处理压力。
RPF:
-
确保组播流量从正确的路径转发,避免环路,基于单播路由表
-
路由器确认组播报文是从自身连接组播源的接口上收到的才进行转发,否则丢弃,
-
校验原理:
- 接收组播数据的入接口是到达组播源的出接口(RPF接口)
- 接收的组播数据中的源地址是到达组播源的下一跳
-
若接收到组播数据时,本地不存在(S G)表项,那么对数据进行RPF校验,只用校验第一条,RPF校验成功,将RPF接口作为上游接口,然后在本地创建(S G)表项,然后向所有的出接口转发
-
若接收到组播数据时,本地存在(S G)表项,并且RPF校验通过,则向所有下游接口转发
-
若接收到组播数据时,本地存在(S G)表项,RPF校验未通过,
- 若RPF接口与转发表项的入接口一致,说明报文来源路径有误,进行丢弃
- 若RPF接口与转发表项的如接口不一致,更新(S G)表项,然后再根据RPF检验进行判断,校验成功,则向所有接口转发