组播应用:
当前随着互联网的各种应用络绎不绝的更新换代,一些网络在线应用开始使用更简单方便的组播来替代传统的数据传输,例如多人互动在线游戏,例如多方视频会议,还有一些例如在线广播电视呀,音视频流媒体呀以及视频网站等。前面多方面互动的采用 Many-to-Many 的组播传递机制,后面那种一对多互动采用 One-to-Many 的组播传递机制,一对多的和多方面互动的组播方式较为简单,且出现的时间更早技术更成熟,部署的也更广泛。 组播传输作为 IP 数据传递的三种方式之一,是指接受者的数量和位置在网络中不确定,仅由源端设备发送一份组播报文,向目标组播 IP 地址发送数据的过程,效率高、带宽要求低。但是要求全网设备都需要支持组播传输 单播通信,信息源和每个终端接收设备都会单独的发送数据,都需要单独的发送所以对于基础带宽要求较大,很容易出现网络带宽瓶颈。 广播通信是指在一个 IP 网段内广播数据报文,一个信息源产生一份报文,其目标地址是全网或子网广播地址的主机设备,它适合一对多的业务应用,但是无法指定网络内部分设备。
组播工作原理:
组播源仅向组播内的的目标地址进行发送组播报文,该目标地址对应着一组分布在网络各处的组播接收者。组播网络组成包括组播源、组播接收者、中间组播转发设备。 组播源 产生组播报文的源端设备,在活跃期间源端设备的所有接口均泛洪组播数据,组播报文的目标 IP 地址为 D 类地址,源 IP 为报文流出的接口地址,一个组播源可以向多个组播组发送数据,多个组播源也可以只向一个组播组发送数据。组播源设备不需要运行任何组播协议,任何时刻都可以直接推送组播数据。 组播组 在 IPv4 中,每一个 D 类地址就是一个组播组,所有接入者都加入该组播组,识别给发给发给该组播组的组播报文。 组播路由器 运行了组播路由协议、维护、创建组播表并转发组播数据的路由器均称为组播路由器,依据在组播转发中所处的位置不同,对于路由器有不同的称呼,连接组播源的组播路由器称为头一跳路由器,而连接组播接受者的路由器则称为最后一跳路由器,其他设备均称为中间路由器。 如图所示,图中离组播服务器最近的设备 R1 就是头一跳路由器,R2 是中间路由器,R3 为最后一跳路由器。
组播路由协议 运行在组播路由器之间,用于发现维护组播路由信息并确定转发路径的路由协议成为组播路由协议。常用的组播路由协议有 IGMP、PIM、DVMRP、MOSPF、CBT、MSDP、MVPN等,其中 PIM 协议有很多种类,如 PIM-DM、PIM-SM、PIM-SSM 等,PIM 是目前所有设备厂商都支持的一种组播路由协议。
组播模型:
根据 IGMP 接收者对组播源的控制程度的不同,可把 IP 组播分为三种模型 ASM any-source Multicast 任意源组播。在 ASM 模型中,任意组播源都可以向组播组内的设备进行组播发送。接收者也仅仅只需要加入到组播组内即可,也就是说接收者无需知道组播源设备的位置情况,组播源也不需要知道组播组的位置情况,两边工作互不干扰,接收者的离开或者加入都不需要跟组播源去进行确认。 例如:PIM DM/SM 是典型的域内组播路由协议,二者都支持 ASM 模式,在域间需要借助 MSDP 实现跨域组源共享。 SSM source-specific Multicast 特定源组播。组播接收者只希望接收自己所指定的组播源的组播,其他的组播源发送的组播不接收,SSM 模型刚好就为组播接收者提供这种服务,可以选择指定的组播源的组播数据进行接收处理。 SSM 和 ASM 本质的区别就是,SSM 是提前就知道了组播源设备的具体位置,所以可以根据此来进行选择指定组播源,而 ASM 是不知道的。相对而言 SSM 的使用场景不限于域内和域间的区别,只需要知道了组播源的位置就可以选择性的接收,直接创建组播传输路径。 SFM source-filtered Multicast 过滤源的组播。SFM 模型继承了 ASM 模型,组播源和组播接收者关系是平等的,也就是组播接收者可以指定部分组播源的数据进行接收,组播源也可以指定部分组播源进行接收组播数据。SFM 就是在 ASM 之上扩展了组播源的过滤策略。
组播转发过程:
组播转发区别于单播,单播转发是基于报文目标 IP 地址查表转发的过程,而组播转发是根据报文源 IP 地址查表转发的过程,PIM 协议使用的就是 RPF 机制确定转发路径。
RPF检查 PIM 路由使用 RPF 创建并维护组播路由表项,这区别于其他组播路由协议,执行 RPF 检查就是对于收到的组播数据报文的源 IP 进行检查,判断是否从正确的入接口接收的,某些 RPF 检查不仅需要查看是否正确的接口接收,还需要查看对端是否为源 RPF 的邻居设备。 首先设备收到一条报文后,分别会从单播路由表,MBGP路由表和组播静态路由表中各选出一条最优的路由,单播路由、MNGP路由的出接口为 RPF 接口,下一跳为 RPF 邻居。组播静态路由表是属于手动配置的组播路由了,是已经明确指定了 RPF 接口和 RPF 邻居的。然后会根据下列原则进行选择一条最优路由作为 RPF 路由。
- 如果配置了按照最长掩码匹配选择路由,则从这三条路由中选出最长匹配的那条路由,若子网掩码长度都一致的话,则选择优先级最高的那一条。如果优先也相同的话,那就按照组播静态路由表 > MBGP路由表 > 单播路由表进行选择。
- 如果没有匹配到最长匹配选择路由,则从这三条中选择优先级最高的那一条。如果优先级也相同的话,则按照组播静态路由表 > MBGP路由表 > 单播路由表进行选择。
最后路由器会将报文的入接口与 RPF 路由的 RPF 接口进行比较,如果一致则通过 RPF 检测,表明改报文来源路径正确,会将其向下游设备进行转发。若不一致则会丢弃该报文。