计算机网络-PIM-DM密集模式工作原理

news2024/11/13 12:20:06

一、PIM-DM基础概念

PIM-DM主要用在组成员较少且相对密集的网络中,通过"扩散-剪枝"的方式形成组播转发树(SPT)。

PIM-DM在形成SPT的过程中,除了扩散(Flooding)剪枝(Prune)机制外,还会涉及邻居发现(Neighbor Discovery),嫁接(Graft),断言(Assert)和状态刷新(State Refresh)机制。

SPT形成过程
SPT形成过程

在首次形成SPT时,组播源发送组播流量沿组播转发流量扩散,组播路由器通过IGMP发行组播组成员,如果没有组播组成员的路径则进行修剪,最终形成一个无环的树形网络结构。

二、PIM-DM报文

PIM协议报文直接采用IP封装,目的地址224.0.0.13,IP协议号103。PIM-DM与PIM-SM使用的协议报文类型有所不同。

PIM-DM使用报文主要是以下几类:

报文类型报文功能
Hello用于PIM邻居发现,协议参数协商,PIM邻居关系维护等
Join/Prune(加入/剪枝)加入报文用于加入组播分发树,剪枝报文则用于修剪组播分发树。加入及剪枝报文在PIM中使用相同的报文格式,只不过报文载荷中的字段内容有所不同
Graft(嫁接)用于将设备所在的分支嫁接到组播分发树
Graft-ACK(嫁接确认)用于对邻居发送的Graft报文进行确认
Assert(断言)用于断言机制

这些报文与前面我们学习动态路由协议的概念很类似,通过某些报文发现邻居,通过特定报文加入组播分发树,以及修改、变动等。

2.1 邻居发现

组播转发路径只能在PIM邻居之间建立,因此邻居发现是形成组播分发树的先决条件。邻居发现主要通过PIM Hello包完成。

当路由器的接口激活PIM后,接口便周期性发送PIM Hello数据包,目的地址224.0.0.13。交互Hello报文后,组播路由器之间就能知道邻居信息,建立PIM邻居关系。

邻居发现与维持
邻居发现与维持

PIM邻居关系依靠Hello包维持,邻居超时时间默认105s,如果超时时间内收不到邻居发来的Hello包,则删除邻居关系。Hello报文间隔默认30秒。

维持邻居关系
维持邻居关系

Hello报文格式:

PIM-Hello报文
PIM-Hello报文
报文示例
报文示例
字段说明
PIM VerPIM版本,值为2
Type消息类型,值为0
Reserved保留字段,发送时设置为0,接收时忽略此值
Checksum校验和
OptionType可选项类型,不同类型代表不同意义以及长度和值,类型有:1、2、19、20、21、24
OptionLengthOptionValue字段的长度,字节为单位
OptionValueOption参数值

开启PIM-DM模式的接口每隔30s发送hello,目的组播地址224.0.0.13,然后建立起PIM-DM的邻居关系,邻居关系启用定时器,超过105没有再接收到邻居hello报文则删除邻居。

查看邻居信息: display pim neighbor verbose

查看邻居
查看邻居

2.2 首次形成组播分发树

PIM-DM模式首次形成组播分发树主要依赖扩散机制、剪枝机制、断言机制与DR选举机制。

  • 扩散机制:组播数据包向所有的PIM邻居泛洪,同时组播路由器产生组播路由表项。
  • 断言机制:当组播转发过程中存在多路访问网络,则需要选举出一个组播转发路由器,避免重复组播报文。
  • 剪枝机制:如果组播路由器下没有组成员,则将源到该组播路由器的组播转发路径剪枝。
首次形成组播分发树
首次形成组播分发树

前面我们通过hello已经形成了PIM邻居,这里就会将组播报文发送给所有邻居实现扩散。

2.3 扩散机制

组播源发送的组播报文会在全网内扩散。当PIM路由器接收到组播报文,先进行RPF检查,通过后会在该路由器上创建(S,G)表项,之后会向所有PIM邻居发送。

扩散机制会周期性(默认180s)全网扩散组播数据,周期性扩散的主要目的是探测是否有新成员加组,但是由于全网扩散组播数据会浪费大量带宽,所以现在的组播网络一般使用"状态刷新机制"加上"嫁接机制"来实现周期性全网扩散感知新成员加组的目的。

PIM-DM形成的(S,G)表项有老化时间(默认210s),如果老化时间超时前没有收到新的组播报文,则删除(S,G)表项。

扩散机制
扩散机制

就是发送PIM广播,形成表项,在老化时间210S前进行周期性泛洪,有效则保留否则删除。

2.4 断言机制

因为组播路由器是广播网络,可能出现多个相连的路由器的情况,这时需要通过断言机制(Assert)来保证只有一个PIM路由器向该网段转发组播报文。

通过断言机制的选举规则将决定组播路由器的转发行为:

  • 获胜一方的下游接口称为Assert Winner,将负责后续对该网段组播报文的转发。
  • 落败一方的下游接口称为Assert Loser,后续不会对该网段转发组播报文,PIM路由器也会将其从(S,G)表项下游接口列表中删除。

断言机制由组播数据触发。

断言机制
断言机制

断言机制选择:

PIM路由器在接收到邻居路由器发送的相同组播报文后,会向该网段发送断言(Assert)报文,进行Assert选举。Assert报文内会携带到组播源的单播路由前缀,路由优先级与开销。选举规则如下:

  • 单播路由协议优先级较高者获胜。
  • 如果优先级相同,则到组播源的开销较小者获胜。
  • 如果以上都相同,则下游接口 IP地址最大者获胜。

Assert选举失败的设备会抑制转发,并将这种抑制转发的状态保持一段时间,这段时间就被称为Assert保持时间,默认180s。

Assert保持时间超时后,竞选失败的设备会恢复转发从而触发新一轮竞选。

断言机制1
断言机制1

就是处于同一个广播网络的路由器相互收到组播报文,会选举一个winner进行转发组播流量,另外一个进入抑制转发状态180秒,再重新恢复竞选。

PIM Assert报文: Assert报文

报文示例 字段说明:

字段说明
PIM VerPIM版本,值为2
Type消息类型,值为5
Group Address组播组地址
Source address如果竞选(S,G)表项的唯一转发者,则为组播源地址。如果竞选(*,G)表项的唯一转发者,则为RP地址
Metric Preference到Source address的单播路径的优先级
Metric到Source address的单播路由的开销

2.5 剪枝机制

对于没有组成员连接的组播路由器,组播网络无需再将组播流量继续放往该设备。通过剪枝机制,组播网络可以将此类路径剪枝。剪枝机制工作原理如下:

  • 路由器为被裁剪的下游接口启动一个剪枝定时器(默认210s),定时器超时后接口恢复转发。
  • 组播报文重新在全网范围内扩散,新加入的组成员可以接收到组播报文。
  • 随后,下游不存在组成员的叶子路由器将向上发起剪枝操作。通过这种周期性的扩散-剪枝,PIM-DM周期性的刷新SPT。

当下游接口被剪枝后:

  • 如果下游叶子路由器有组成员加入,并且希望在下次“扩散-剪枝”前就恢复组播报文转发,则执行嫁接动作。
  • 如果下游叶子路由器一直没有组成员加入,希望该接口保持抑制转发状态,则执行状态刷新动作。
剪枝机制
剪枝机制
报文示例
报文示例

剪枝机制通过Join/Prune(加入/剪枝)报文,通过option的不同设置加入的组播组以及需要修剪的组播报文。简单理解就是当路由器下面没有组播组成员的时候会通过上行口发送剪枝报文通告到达特定组播源的报文需要修剪掉,从而下行口不再接收组播报文。

2.6 维护组播分发树

前面我们通过扩散、断言、剪枝机制形成了无环的SPT组播分发树,但是现实情况下SPT会增加组播组成员或者减少成员,因此需要对SPT进行维护。

在PIM邻居关系稳定,组成员没有变化的情况下,维护组播分发树一般有两种方式:

  • 持续发送组播报文,保证组播路由表项能一直存在。
  • 发送状态刷新报文,保证组播路由表项的下行接口状态不发生变化。
维护组播分发树
维护组播分发树

2.7 状态刷新机制

前面我们知道在没有组播组成员的路由器下行接口会进行剪枝,但是会启动一个定时器210s,如果超过210s则接口会继续接收组播报文,在PIM-DM网络中,为了避免被裁剪的接口因为"剪枝定时器"超时而恢复转发,离组播源最近的第一跳路由器会周期性地触发State Refresh报文在全网内扩散,(默认60s)。就是每一分钟在连接组播源的路由器上会发送状态刷新报文,使得剪枝定时器每60s刷新持续保持抑制状态。

收到State Refresh报文的PIM路由器会刷新剪枝定时器的状态。被裁剪接口的下游叶子路由器如果一直没有组成员加入,该接口将一直处于抑制转发状态。

状态刷新机制
状态刷新机制
报文示例
报文示例

那么通过状态刷新机制就会导致如果有新的组播组成员在剪枝的接口加入而无法加入组播组,因此需要通过另外的方式使得能够主动加入组播组。

当有新成员加入组播组后,组播网络需要更新组播分发树,才能将组播数据发往组成员。PIM-DM模式在使用"扩散-剪枝"的方式建立组播分发树后,通过状态刷新机制,使下行接口一旦被抑制就无法自动恢复。

使用嫁接(Graft)机制,当新成员加组后,主动反向建立组播分发路径。现网中一般使用嫁接机制来实现新成员加组。

2.8 嫁接机制

PIM-DM通过嫁接机制,使有新组成员加入的网段快速得到组播报文。

叶子路由器通过IGMP了解到与其相连的用户网段上,组播组G有新的组成员加入。随后叶子路由器会基于本地的组播路由表向上游发送Graft报文,请求上游路由器恢复相应出接口转发,将其添加在(S,G)表项下游接口列表中。

嫁接机制
嫁接机制

嫁接通过Graft(嫁接)报文Graft-ACK(嫁接确认)报文实现,下游路由器通过上行口发送嫁接报文,上游路由器回复确认报文并加入组播路由表项。

报文示例
报文示例

简单说就是当下游有成员加入,PIM路由器主动向上游接口发送嫁接报文。

组播网络验证
组播网络验证

总结:本章通过PIM-DM的模式学习了扩散(Flooding),剪枝(Prune)机制,邻居发现(Neighbor Discovery),嫁接(Graft),断言(Assert)和状态刷新(State Refresh)机制。首先保证网络可达,然后接口启用PIM-DM,通过hello报文建立邻居,通过扩散机制泛洪组播报文,通过断言保证整个组播网络无环,通过状态刷新和嫁接机制处理新成员加入,形成SPT后组播网络沿SPT转发组播报文。

如果对文章感兴趣欢迎微信搜索公众号:不喜欢热闹的孩子 不喜欢热闹的孩子

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1974534.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于YOLOv10的裂缝检测系统

基于YOLOv10的裂缝检测系统 (价格80) 包含 【裂缝】 1个类 通过PYQT构建UI界面,包含图片检测,视频检测,摄像头实时检测。 (该系统可以根据数据训练出的yolov10的权重文件,运用在其他检测系统上,如火…

Logic Error: 如何识别和修复逻辑错误

🧩 Logic Error: 如何识别和修复逻辑错误 🔍 🧩 Logic Error: 如何识别和修复逻辑错误 🔍摘要引言正文内容一、什么是逻辑错误? 🤔1.1 逻辑错误的定义1.2 逻辑错误的特征 二、常见的逻辑错误类型 &#x1f…

深度洞察·情感保鲜与经济可持续的共鸣——解锁情感与品牌长青的密码

深度洞察情感保鲜与经济可持续的共鸣——解锁情感与品牌长青的密码 在这个快节奏的时代,我们常常在探寻,为何曾经那份心动的激情会逐渐褪色,如同你我点解,两人并肩却渐失“feel”,想要转身离去?或许&#…

分享5款ai头像工具,助你轻松实现社交新形象

如今,无论是社交媒体上的个人形象塑造,还是虚拟世界中的角色扮演,一个独特而吸引人的AI头像都能成为你个性化的代表。 例如,ai头像男古风通常代表着一种对传统文化的尊重和热爱;而现代简约头像可能代表着一种追求简洁…

U盘数据恢复不再难:2024年4款工具,找回你“躲藏”的记忆

现在市面上有一些非常棒的U盘数据恢复软件,它们特别好用,就算你对电脑不太懂也能轻松搞定。这些软件能在几分钟之内帮你检查U盘,找出那些被误删的照片、文件和视频,让你可以轻松把它们找回来。不管你是自己用还是工作需要&#xf…

bus hound简单使用记录,抓取usb hid数据

有很多博文介绍,如参考,但在实际操作中很迷茫,第一步的选设备就一脸懵,下面是实际使用过程 使用这个bus hound的原因 在调试一个usb的自定义hid时出现很多数据无效,但有些又可用,所以想用软件查看真正的上…

科普文:微服务之Spring Cloud 组件API网关Gateway

API网关是一个服务器,是系统的唯一入口。从面向对象设计的角度看,它与外观模式类似。API网关封装了系统内部架构,为每个客户端提供一个定制的API。它可能还具有其它职责,如身份验证、监控、负载均衡、缓存、请求分片与管理、静态响…

OpenAI API giving error: 429 Too Many Requests

题意:OpenAI API 返回错误:429 请求过多 问题背景: I am trying to make a request to the openai API with the following code in express nodeJS: 我正在尝试使用以下 Express Node.js 代码向 OpenAI API 发送请求: import …

MolGAN网络架构:用于小分子图的隐式生成模型

MolGAN:小分子图的隐式生成模型 文章目录 一、说明二、简介三、背景知识3.1.分子作为图表3.2.隐式方法与基于可能性的方法2.3 改进的 WGAN2.4.确定性策略梯度 四、模型说明4.1生成器4.2.判别器和奖励网络 五、实验5.1 数据集5.2 生成器架构5.3 判别器和奖励网络架构…

打造前端开发的利器--NPM

个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[2435024119qq.com] &#x1f4f1…

YOLOv8添加注意力模块并测试和训练

YOLOv8添加注意力模块并测试和训练 参考bilibili视频 yolov8代码库中写好了注意力模块,但是yolov8的yaml文件中并没用使用它,如下图的通道注意力和空间注意力以及两者的结合CBAM,打开conv.py文件可以看到,其中包含了各种卷积块的…

ClinicalAgent:结合大模型的临床试验多智能体系统

ClinicalAgent:结合大模型的临床试验多智能体系统 提出背景ClinicalAgent 框架规划智能体功效智能体安全智能体 解法解法 子解法1(因为需要处理复杂的数据和多变量) 子解法2(因为需要及时反馈临床试验中的变化) 子解…

海信聚好看的DBDocter软件使用心得

在墨天轮大会看到这个软件,好称是内核级别的诊断工具, 工作空闲下载免费看看 结果要1.7GB还TAR. DBdoctor是一款内核级数据库性能诊断软件。可以对数据库做细粒度的扫描,帮助您一分钟内找到数据库性能问题,实现性能诊断百倍提效。针对数据库性能诊断门…

ICML 2024:从历史数据中挖掘最优策略,高效完成50+任务,“离线策略提升的在线演员-评论家”研究工作

长期以来,如何提升数据利用效率被认为是强化学习落地应用的一大桎梏。过去非策略(off-policy)的强化学习虽然能反复利用收集到的数据来进行策略优化,然而这些方法未能最大限度地利用重放缓冲区(Replay buffer&#xff…

新手小白学习PCB设计,立创EDA专业版

本教程有b站某UP主的视频观后感 视频链接:http://【【教程】零基础入门PCB设计-国一学长带你学立创EDA专业版 全程保姆级教学 中文字幕(持续更新中)】https://www.bilibili.com/video/BV1At421h7Ui?vd_sourcefedb10d2d09f5750366f83c1e0d4a…

JAVA进阶学习13

文章目录 2.2.3 综合输入和输出方法进行文件拷贝2.2.4 字节流读取时乱码的问题 2.3 字符流的方法概述2.3.1 FileReader方法2.3.2 FileWriter方法2.3.3 小结 三、高级IO流3.1 缓冲流3.1.1 字节缓冲流3.1.2 字符缓冲流 3.2 转换流3.3 序列化流3.3.1 序列化流3.3.2 反序列化流 3.4…

亚马逊自养号测评一直被砍单封号怎么解决

亚马逊是一个大数据公司,可以检测出你的购买行为是否正常,如每次都是直接用链接购买产品而从来不用搜索栏,每次购买产品单一而且时间快速,买家留评比例过高或者评论内容太假,产品还没签收就上评论,某个list…

vxtable行转列

<script setup lang"ts"> import dayjs from "dayjs"; import {Search} from "element-plus/icons-vue"; import {ElMessage} from "element-plus"; class SearchModel{startTime?: Date | stringendTime?: Date | stringcons…

react-native从入门到实战系列教程一ScrollView组件吸顶效果

在ScrollView组件里面把第一元素固定在视图顶部的效果&#xff0c;ScrollView在手机上自带了bounce回弹的效果&#xff0c;不管内容是不是超出组件高度还是宽度 实现效果 代码实现 import {View,Text,StyleSheet,Dimensions,TextInput,Button,Alert,ScrollView,StatusBar,Saf…

[windows10]win10永久禁用系统自动更新操作方法

WinR打开运行 输入regedit打开注册表 点击确定打开注册表 按照如下路径找到UX 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings 在空白处点击鼠标右键&#xff0c;新建选择DWORD&#xff0c;然后重命名为FlightSettingsMaxPauseDays 双击FlightSet…