百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

什么是PIM技术?PIM-DM和PIM-SM两种模式工作原理记不住?看这里

wxin55 2024-12-26 17:13 9 浏览 0 评论

PIM(Protocol Independent Multicast)称为协议无关组播。这里的协议无关指的是与单播路由协议无关,即PIM不需要维护专门的单播路由信息。作为组播路由解决方案,它直接利用单播路由表的路由信息,对组播报文执行RPF(Reverse Path Forwarding,逆向路径转发)检查,检查通过后创建组播路由表项,从而转发组播报文。

PIM(协议无关组播)表示它不依赖于某种具体的IP路由选择协议。它仅仅是利用单播路由表来实现RPF校验功能。因此,它能工作在任何可以产生单播路由表的IP路由协议上,包括静态路由。值得强调的是:协议无关并不是指不需要单播路由协议;相反,组播协议必须有单播路由协议的支撑,因为它无单播路由功能。PIM协议报文基于UDP协议,其端口号是103。PIM还有专门的组播地址224.0.0.13,表示所有的PIM路由器。

目前设备实际支持的PIM协议包括:PIM-DM(PIM-Dense Mode,协议无关组播—密集模式)、PIM-SM(PIM-Sparse Mode,协议无关组播—稀疏模式)。

PIM-DM基本工作原理:

PIM-DM使用“推(Push)模式”转发组播报文,一般应用于组播组成员规模相对较小、相对密集的网络。PIM-DM的关键工作机制包括邻居发现、扩散、剪枝、嫁接、断言。

1、邻居发现:路由器通过周期性地的向所有PIM路由器(224.0.0.13)以组播方式发送PIM Hello报文(以下简称Hello报文),以发现PIM邻居,维护各路由器之间的PIM邻居关系,从而构建和维护SPT。

2、扩散:当PIM-DM网络中出现活跃的组播源之后,组播源发送的组播报文将在全网内扩散。当PIM路由器接收到组播报文,根据单播路由表进行RPF检查通过后,就会在该路由器上创建(S,G)表项,并将该报文向网络中的所有下游节点转发。经过扩散,PIM-DM域内的每个路由器上都会创建(S,G)表项。

3、剪枝:当PIM路由器接收到组播报文后,RPF检查通过,但是下游网段没有组播报文需求。此时PIM路由器会向上游发送剪枝报文,通知上游路由器禁止相应下游接口的转发,将其从(S,G)表项的下游接口列表中删除。剪枝操作由叶子路由器发起,逐跳向上,最终组播转发路径上只存在与组成员相连的分支。

4、嫁接:PIM-DM通过嫁接机制,使有新组成员加入的网段快速得到组播报文。叶子路由器通过IGMP了解到与其相连的用户网段上,组播组G有新的组成员加入。随后叶子路由器会向上游发送Graft报文,请求上游路由器恢复相应出接口转发,将其添加在(S,G)表项下游接口列表中。嫁接过程从叶子路由器开始,到有组播报文到达的路由器结束。

5、断言:在一个网段内如果存在多台组播路由器,则相同的组播报文可能会被重复发送到该网段。为了避免出现这种情况,就需要通过断言(Assert)机制来选定唯一的组播数据转发者。

PIM-SM基本工作原理:

PIM-DM使用以“扩散—剪枝”方式构建的SPT来传送组播数据。尽管SPT的路径最短,但是其建立的过程效率较低,并不适合大中型网络。PIM-SM使用“拉(Pull)模式”转发组播报文,一般应用于组播组成员规模相对较大、相对稀疏的网络。

PIM-SM的关键机制包括邻居发现、DR选举、RP发现、RPT构建、组播源注册、SPT切换、断言;同时也可通过配置BSR(Bootstrap Router)管理域来实现单个PIM-SM域的精细化管理。

1、邻居发现:和PIM-DM机制类似;

2、DR选举:借助Hello报文还可以为共享网络(如Ethernet)选举DR,DR将作为该共享网络中组播数据的唯一转发者。无论是与组播源相连的网络,还是与接收者相连的网络,都需要选举DR。接收者侧的DR负责向RP发送加入报文;组播源侧的DR负责向RP发送注册报文。

3、RP发现:汇聚点RP为网络中一台重要的PIM路由器,用于处理源端DR注册信息及组成员加入请求,网络中的所有PIM路由器都必须知道RP的地址,类似于一个供求信息的汇聚中心。一个RP可以同时为多个组播组服务,但一个组播组只能对应一个RP。

4、RPT构建:RPT是一棵以RP为根,以存在组成员关系的PIM路由器为叶子的组播分发树。

5、组播源注册:在PIM-SM网络中,任何一个新出现的组播源都必须首先在RP处“注册”,继而才能将组播报文传输到组成员。

6、SPT切换:当接收者侧的DR发现从RP发往组播组G的组播数据速率超过了一定的阈值时,将由其发起从RPT向SPT的切换。

7、断言:同样和PIM-DM类似。

√坚持每天技术打卡 √学网络,就在IE-LAB √国内高端网络工程师培养基地

相关推荐

ES6中 Promise的使用场景?(es6promise用法例子)

一、介绍Promise,译为承诺,是异步编程的一种解决方案,比传统的解决方案(回调函数)更加合理和更加强大在以往我们如果处理多层异步操作,我们往往会像下面那样编写我们的代码doSomething(f...

JavaScript 对 Promise 并发的处理方法

Promise对象代表一个未来的值,它有三种状态:pending待定,这是Promise的初始状态,它可能成功,也可能失败,前途未卜fulfilled已完成,这是一种成功的状态,此时可以获取...

Promise的九大方法(promise的实例方法)

1、promise.resolv静态方法Promise.resolve(value)可以认为是newPromise方法的语法糖,比如Promise.resolve(42)可以认为是以下代码的语...

360前端一面~面试题解析(360前端开发面试题)

1.组件库按需加载怎么做的,具体打包配了什么-按需加载实现:借助打包工具(如Webpack的require.context或ES模块动态导入),在使用组件时才引入对应的代码。例如在V...

前端面试-Promise 的 finally 怎么实现的?如何在工作中使用?

Promise的finally方法是一个非常有用的工具,它无论Promise是成功(fulfilled)还是失败(rejected)都会执行,且不改变Promise的最终结果。它的实现原...

最简单手写Promise,30行代码理解Promise核心原理和发布订阅模式

看了全网手写Promise的,大部分对于新手还是比较难理解的,其中几个比较难的点:状态还未改变时通过发布订阅模式去收集事件实例化的时候通过调用构造函数里传出来的方法去修改类里面的状态,这个叫Re...

前端分享-Promise可以中途取消啦(promise可以取消吗)

传统Promise就像一台需要手动组装的设备,每次使用都要重新接线。而Promise.withResolvers的出现,相当于给开发者发了一个智能遥控器,可以随时随地控制异步操作。它解决了三大...

手写 Promise(手写输入法 中文)

前言都2020年了,Promise大家肯定都在用了,但是估计很多人对其原理还是一知半解,今天就让我们一起实现一个符合PromiseA+规范的Promise。附PromiseA+规范地址...

什么是 Promise.allSettled()!新手老手都要会?

Promise.allSettled()方法返回一个在所有给定的promise都已经fulfilled或rejected后的promise,并带有一个对象数组,每个对象表示对应的pr...

前端面试-关于Promise解析与高频面试题示范

Promise是啥,直接上图:Promise就是处理异步函数的API,它可以包裹一个异步函数,在异步函数完成时抛出完成状态,让代码结束远古时无限回掉的窘境。配合async/await语法糖,可...

宇宙厂:为什么前端离不开 Promise.withResolvers() ?

大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发。1.为什么需要Promise.with...

Promise 新增了一个超实用的 API!

在JavaScript的世界里,Promise一直是处理异步操作的神器。而现在,随着ES2025的发布,Promise又迎来了一个超实用的新成员——Promise.try()!这个新方法简...

一次搞懂 Promise 异步处理(promise 异步顺序执行)

PromisePromise就像这个词的表面意识一样,表示一种承诺、许诺,会在后面给出一个结果,成功或者失败。现在已经成为了主流的异步编程的操作方式,写进了标准里面。状态Promise有且仅有...

Promise 核心机制详解(promise机制的实现原理)

一、Promise的核心状态机Promise本质上是一个状态机,其行为由内部状态严格管控。每个Promise实例在创建时处于Pending(等待)状态,此时异步操作尚未完成。当异步操作成功...

javascript——Promise(js实现promise)

1.PromiseES6开始支持,Promise对象用于一个异步操作的最终完成(包括成功和失败)及结果值的表示。简单说就是处理异步请求的。之所以叫Promise,就是我承诺,如果成功则怎么处理,失败怎...

取消回复欢迎 发表评论: