PIM-SM适用于ASM(Any-Source Multicast)和SSM(Source-Specific Multicast)两种模型。
在ASM模型中,PIM-SM使用“拉(Pull)模式”转发组播报文,一般应用于组播组成员规模相对较大、相对稀疏的网络。基于这一种稀疏的网络模型,它的实现方法是:
在网络中维护一台重要的PIM路由器:汇聚点RP(Rendezvous Point),可以为随时出现的组成员或组播源服务。网络中所有PIM路由器都知道RP的位置。
当网络中出现组成员(用户主机通过IGMP加入某组播组G)时,最后一跳路由器向RP发送Join报文,逐跳创建(*,G)表项,生成一棵以RP为根的RPT。
当网络中出现活跃的组播源(组播源向某组播组G发送第一个组播数据)时,第一跳路由器将组播数据封装在Register报文中单播发往RP,在RP上创建(S,G)表项,注册源信息。
在ASM模型中,PIM-SM的关键机制包括邻居发现、DR竞选、RP发现、RPT构建、组播源注册、SPT切换、断言;同时也可通过配置BSR(Bootstrap Router)管理域来实现单个PIM-SM域的精细化管理。
说明:
(S,G)路由表项:S表示组播源,G表示组播组;主要用于在PIM网络中建立以组播源为根,组播组成员为叶子的组播分发树SPT(Shortest Path Tree)。
(*,G)路由表项:*表示任意,G表示组播组;主要用于在PIM网络中建立以RP(Rendezvous Point)为根,组播组成员为叶子的组播分发树RPT(RP Tree)。
PIM路由器上每个使能了PIM协议的接口都会对外发送Hello报文。封装Hello报文的组播报文的目的地址是224.0.0.13、源地址为接口的IP地址、TTL数值为1。
同一网段中的PIM路由器都接收目的地址为224.0.0.13的组播报文。这样直接相连的PIM路由器之间通过交互Hello报文以后,就可以彼此知道自己的邻居信息,建立邻居关系。
图1邻居发现示意图

如图1所示,在PIM-SM网络中,刚启动的组播路由器需要使用Hello消息来发现邻居。通过各路由器之间周期性地使用Hello消息保持联系来维护邻居关系。
只有邻居关系建立成功后,PIM路由器才能接收其他PIM协议报文,从而创建组播路由表项。
说明:
Hello报文的作用:发现PIM邻居、协调各项PIM协议报文参数、维持邻居关系。
在组播源或组成员所在的网段,有时同时连接着多台PIM路由器。这些PIM路由器之间通过交互Hello报文成为PIM邻居,Hello报文中携带DR优先级和该网段接口地址。PIM路由器将自身条件与对方报文中携带的信息进行比较,选举出DR来负责源端或组成员端组播报文的收发。竞选规则如下:
DR优先级较高者获胜(网段中所有PIM路由器都支持DR优先级)。
如果DR优先级相同或该网段存在至少一台PIM路由器不支持在Hello报文中携带DR优先级,则IP地址较大者获胜。
如果当前DR出现故障,将导致PIM邻居关系超时,其他PIM邻居之间会触发新一轮的DR竞选。
图2 DR竞选示意图

如图2所示,在ASM模型中,DR主要作用如下:
在连接组播源的共享网段,由DR负责向RP发送Register注册报文。与组播源相连的DR称为源端DR。
在连接组成员的共享网段,由DR负责向RP发送Join加入报文。与组成员相连的DR称为组成员端DR,此DR可充当IGMPv1环境下的IGMP查询器。
汇聚点RP,类似于一个供求信息的汇聚中心,用于处理源端DR注册信息及组成员加入请求,网络中的所有PIM路由器都必须知道RP的地址。
一个RP可以同时为多个组播组服务,但一个组播组只能对应一个RP。RP的配置方式有两种:
静态RP:在网络中的所有PIM路由器上配置相同的RP地址,静态指定RP的位置。
动态RP:在PIM域内选择几台PIM路由器,配置C-RP(Candidate-RP,候选RP)来动态竞选出RP。同时,还需要通过配置C-BSR(Candidate-BSR,候选BSR)选举出BSR,来收集C-RP的通告信息,向PIM-SM域内的所有PIM路由器发布。
开始时每个C-BSR都认为自己是BSR,向全网发送Bootstrap报文。Bootstrap报文中携带C-BSR地址、C-BSR的优先级。每一台PIM路由器都收到所有C-BSR发出的Bootstrap报文,通过比较这些C-BSR信息,竞选产生BSR。竞选规则如下:
优先级较高者获胜(优先级数值越大优先级越高)。
如果优先级相同,IP地址较大者获胜。
C-RP的竞选过程如图3所示
图3 动态RP竞选机制示意图

C-RP向BSR发送Advertisement报文,报文中携带C-RP地址、服务的组范围和C-RP优先级。
BSR将这些信息汇总为RP-Set,封装在Bootstrap报文中,发布给全网的每一台PIM-SM路由器。
各PIM路由器根据RP-Set,使用相同的规则进行计算和比较,从多个针对特定组的C-RP中竞选出该组RP。规则如下:
与用户加入的组地址匹配的C-RP服务的组范围掩码最长者获胜。
如果以上比较结果相同,则C-RP优先级较高者获胜(优先级数值越小优先级越高)。
如果以上比较结果都相同,则执行Hash函数,计算结果较大者获胜。
如果以上比较结果都相同,则C-RP的IP地址较大者获胜。
由于所有PIM路由器使用相同的RP-Set和竞选规则,所以得到的组播组与RP之间的对应关系也相同。PIM路由器将“组播组—RP”对应关系保存下来,指导后续的组播操作。
PIM-SM RPT是一棵以RP为根,以存在组成员关系的PIM路由器为叶子的组播分发树。如图4 所示,当网络中出现组成员(用户主机通过IGMP加入某组播组G)时,组成员端DR向RP发送Join报文,在通向RP的路径上逐跳创建(*,G)表项,生成一棵以RP为根的RPT。
图4 RPT构建示意图

在RPT构建过程中,PIM路由器在发送Join报文时,会进行RPF检查:查找到达RP的单播路由,单播路由的出接口为上游接口,下一跳为RPF邻居。Join报文从组成员端DR开始逐跳发送,直至到RP。
说明:
RPF检查:路由器收到一份组播报文后,会根据报文的源地址通过单播路由表查找到达“报文源”的路由,查看到“报文源”的路由表项的出接口是否与收到组播报文的入接口一致。如果一致,则认为该组播报文从正确的接口到达,从而保证了整个转发路径的正确性和唯一性。
图5 组播源注册示意图

如图5所示,在PIM-SM网络中,任何一个新出现的组播源都必须首先在RP处“注册”,继而才能将组播报文传输到组成员。具体过程如下:
组播源将组播报文发给源端DR。
源端DR接收到组播报文后,将其封装在Register报文中,发送给RP。
RP接收到Register报文,将其解封装,建立(S,G)表项,并将组播数据沿RPT发送到达组成员。
此时RP不再需要R1发送的Register报文,所以RP会单播向R1(DR)发送Register-Stop报文,告知R1停止发送Register报文。
在PIM-SM网络中,一个组播组只对应一个RP,只构建一棵RPT。在未进行SPT切换的情况下,所有发往该组的组播报文都必须先封装在注册报文中发往RP,RP解封装后,再沿RPT分发。RP是所有组播报文必经的中转站,当组播报文速率逐渐变大时,对RP形成巨大的负担。为了解决此问题,PIM-SM允许RP或组成员端DR通过触发SPT切换来减轻RP的负担。
RP触发SPT切换
RP收到源端DR的注册报文后,将封装在Register报文中的组播报文沿RPT转发给组成员,同时RP会向源端DR逐跳发送Join报文。发送过程中在PIM路由器创建(S,G)表项,从而建立了RP到源的SPT。
SPT树建立成功后,源端DR直接将组播报文转发到RP,使源端DR和RP免除了频繁的封装与解封装。
组成员端DR触发SPT切换
图6 组成员端DR触发SPT切换示意图

如图6所示。组成员端DR周期性检测组播报文的转发速率,一旦发现(S,G)报文的转发速率超过阈值,则触发SPT切换:
组成员端DR向源端DR逐跳发送Join报文并创建(S,G)表项,建立源端DR到组成员DR的SPT。
SPT建立后,组成员端DR会沿着RPT逐跳向RP发送剪枝报文,删除(*,G)表项中相应的下游接口。剪枝结束后,RP不再沿RPT转发组播报文到组成员端。
如果SPT不经过RP,RP会继续向源端DR逐跳发送剪枝报文,删除(S,G)表项中相应的下游接口。剪枝结束后,源端DR不再沿“源端DR-RP”的SPT转发组播报文到RP。
说明
缺省情况下,设备一般未设置组播报文转发速率的阈值,RP或者组成员端DR在接收到第一份组播报文时都会触发各自的SPT切换。
当一个网段内有多个相连的PIM路由器向该网段转发组播报文时,则需要通过断言机制来保证只有一个PIM路由器向该网段转发组播报文。
Assert竞选规则如下:
单播路由协议优先级较高者获胜。
如果优先级相同,则到组播源的开销较小者获胜。
如果以上都相同,则下游接口IP地址最大者获胜。
根据Assert竞选结果,路由器将执行不同的操作:
获胜一方的下游接口称为Assert Winner,将负责后续对该网段组播报文的转发。
落败一方的下游接口称为Assert Loser,后续不会对该网段转发组播报文,PIM路由器也会将其从(S,G)表项下游接口列表中删除。
Assert竞选结束后,该网段上只存在一个下游接口,只传输一份组播报文。所有Assert Loser可以周期性地恢复组播报文转发,从而引发周期性的Assert竞选。
图7 断言示意图

如图7所示,R2和R3均通过了RPF检查,创建了(S,G)表项。并且两者的下游接口连接在同一网段,R2和R3都向该网段发送组播报文。如假设R2到组播源的开销小于R3到组播源的开销,断言过程如下:
R2和R3从各自下游接口接收到对方发来的组播报文,RPF检查都失败,报文被丢弃。同时,R2和R3分别向该网段发送Assert报文(目的地址为224.0.0.13)。
R2将自身的路由信息与R3发来的Assert报文中携带的路由信息进行比较,由于自身到组播源的开销较小而获胜。于是后续组播报文仍然向该网段转发,R3在接收到组播报文后仍然由于RPF检查失败而丢弃。
R3将自身的路由信息与R2发来的Assert报文中携带的路由信息进行比较,由于自身到组播源的开销较大而落败。于是禁止相应下游接口向该网段转发组播报文,将其从(S,G)表项的下游接口列表中删除。
SSM的特点是网络用户能够预先知道组播源的具体位置。因此用户在加入组播组时,可以明确指定从哪些源接收信息。组成员端DR了解到用户主机的需求后,直接向源端DR发送Join报文。Join报文逐跳向上传输,在源与组成员之间建立SPT。
在SSM模型中,PIM-SM的关键机制包括邻居发现、DR竞选、构建SPT。其中邻居发现和DR选举机制和与PIM-SM(ASM模型)中的相同。
图8 SPT构建示意图

如图8所示,SPT的建立过程如下:
1. R3、R5借助IGMPv3协议了解到用户主机有到相同组播组不同组播源的组播需要,逐跳向源方向发送Join报文
2. PIM路由器通过Join报文分别创建(S1,G)、(S2,G)表项,从而分别建立了源S1到组成员PC1、源S2到组成员PC2的SPT。
3. SPT建立后,源端就会将组播报文沿着SPT分发给组成员。
SSM模型与ASM模型之间的最大差异就是是否指定了组播源,具体的区别如表1。
表1 PIM-SM实现方式比较
| 模型分类 | 适用场景 | 工作机制 |
| ASM模型 | 适合网络中的组成员相对比较稀疏,分布广泛的大型网络。 | 采用接收者主动加入的方式建立组播分发树,需要维护RP、构建RPT、注册组播源。 |
| SSM模型 | 适合网络中的用户预先知道组播源的位置,直接向指定的组播源请求组播数据的场景。 | 直接在组播源与组成员之间建立SPT,无需维护RP、构建RPT、注册组播源。 |
如图9所示,该网络接入了Internet,用户主机HostA、HostB希望能够接收到Source发送的组播数据。
图9 配置ASM模型的PIM-SM域内组播组网图

通过在交换机配置PIM-SM协议,为网络中的用户主机提供ASM服务,使得加入同一组播组的所有用户主机能够接收任意源发往该组的组播数据。
配置交换机接口IP地址和单播路由协议,实现网络中各交换机间能够在网络层互通。
在所有提供组播服务的交换机上使能组播功能。在交换机所有接口上使能PIM-SM功能。
在与主机侧相连的交换机接口上使能IGMP。叶节点交换机通过IGMP协议来维护组成员关系列表。
配置RP。建议RP的位置配置在组播流量分支较多的交换机上,如本图中的SwitchE的位置。
说明
如果用户主机侧需同时配置PIM-SM和IGMP,必须先使能PIM-SM,再使能IGMP。
配置各接口的IP地址和单播路由协议,实现网络中各交换机间能够在网络层互通,配置过程略
2. 使能组播功能,在各接口上使能PIM-SM功能。
# 在所有交换机使能组播功能,在各接口上使能PIM-SM功能。
[SwitchA] multicast routing-enable
[SwitchA] interface vlanif 10
[SwitchA-Vlanif10] pim sm
[SwitchA-Vlanif10] quit
[SwitchA] interface vlanif 20
[SwitchA-Vlanif20] pim sm
[SwitchA-Vlanif20] quit
[SwitchA] interface vlanif 30
[SwitchA-Vlanif30] pim sm
[SwitchA-Vlanif30] quit
SwitchB、SwitchC、SwitchD和SwitchE的配置与SwitchA相似,配置过程略。
3. 在连接用户主机的接口上使能IGMP功能。
# 在SwitchA连接用户主机的接口上使能IGMP功能。
[SwitchA] interface vlanif 20
[SwitchA-Vlanif20] igmp enable
[SwitchA-Vlanif20] quit
SwitchB和SwitchC的配置与SwitchA相似,配置过程略。
4. 配置RP。
配置RP有两种方式:静态RP和动态RP两种。本例使用动态RP配置SwitchE为BSR和RP。
# 在SwitchE上配置RP服务的组地址范围,及C-BSR和C-RP所在接口位置。
[SwitchE] acl number 2008
[SwitchE-acl-basic-2008] rule permit source 225.1.1.0 0.0.0.255
[SwitchE-acl-basic-2008] quit
[SwitchE] pim
[SwitchE-pim] c-bsr vlanif 90
[SwitchE-pim] c-rp vlanif 90 group-policy 2008
[SwitchE-pim] quit
如图10所示,HostA希望能够接收到S1、S2发送的组播数据,而HostB希望能够接收S2发送的组播数据。
图10 配置SSM模型的PIM-SM域内组播组网图

通过在交换机配置PIM-SM协议,为网络中的用户主机提供SSM服务,使得用户主机在加入组播组的同时,能够接收到自己所指定的组播源的组播数据。
配置交换机接口IP地址和单播路由协议。组播域内路由协议PIM依赖单播路由协议,单播路由正常是组播协议正常工作的基础。
在所有提供组播服务的交换机上使能组播功能。在交换机所有接口上使能PIM-SM功能。
在与主机侧相连的交换机接口上使能IGMP,并配置IGMP协议的版本号为v3。叶节点交换机通过IGMP协议来维护组成员关系列表。
配置各接口的IP地址和单播路由协议,实现网络中各交换机间能够在网络层互通,配置过程略
2. 使能组播功能,在各接口上使能PIM-SM功能。
# 在所有交换机使能组播功能,在各接口上使能PIM-SM功能。
[SwitchA] multicast routing-enable
[SwitchA] interface vlanif 10
[SwitchA-Vlanif10] pim sm
[SwitchA-Vlanif10] quit
[SwitchA] interface vlanif 20
[SwitchA-Vlanif20] pim sm
[SwitchA-Vlanif20] quit
[SwitchA] interface vlanif 30
[SwitchA-Vlanif30] pim sm
[SwitchA-Vlanif30] quit
SwitchB、SwitchC、SwitchD、SwitchE和SwitchF的配置与SwitchA相似,配置过程略。
3. 在连接用户主机的接口上使能IGMP功能,并配置IGMP版本号为v3。
# 在SwitchA连接用户主机的接口上使能IGMP功能。
[SwitchA] interface vlanif 20
[SwitchA-Vlanif20] igmp enable
[SwitchA-Vlanif20] igmp version 3
[SwitchA-Vlanif20] quit
SwitchB和SwitchC的配置与SwitchA相似,配置过程略。
?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------
目录H2数据库入门以及实际开发时的使用1.H2数据库的初识1.1H2数据库介绍1.2为什么要使用嵌入式数据库?1.3嵌入式数据库对比1.3.1性能对比1.4技术选型思考2.H2数据库实战2.1H2数据库下载搭建以及部署2.1.1H2数据库的下载2.1.2数据库启动2.1.2.1windows系统可以在bin目录下执行h2.bat2.1.2.2同理可以通过cmd直接使用命令进行启动:2.1.2.3启动后控制台页面:2.1.3spring整合H2数据库2.1.3.1引入依赖文件2.1.4数据库通过file模式实际保存数据的位置2.2H2数据库操作2.2.1Mysql兼容模式2.2.2Mysql模式
为什么需要服务网关传统的单体架构中只需要开放一个服务给客户端调用,但是微服务架构中是将一个系统拆分成多个微服务,如果没有网关,客户端只能在本地记录每个微服务的调用地址,当需要调用的微服务数量很多时,它需要了解每个服务的接口,这个工作量很大。有了网关之后,网关作为系统的唯一流量入口,封装内部系统的架构,所有请求都先经过网关,由网关将请求路由到合适的微服务。使用网关的好处1)简化客户端的工作。网关将微服务封装起来后,客户端只需同网关交互,而不必调用各个不同服务;(2)降低函数间的耦合度。一旦服务接口修改,只需修改网关的路由策略,不必修改每个调用该函数的客户端,从而减少了程序间的耦合性(3)解放开发
我发现python的细节自动完成很好RubyonRails有类似的方法描述吗? 最佳答案 有篇不错的文章"UsingVIMasacompleteRubyonRailsIDE"其中引用rails.vim.这似乎是RailsforVIM的实际标准。(不过,我还没有使用过它,但很快就会尝试。)这允许你做很多与Rails相关的任务,但对自动完成没有帮助。还有一篇"RubyAutocompleteinVim"(遗憾的是不再可用)这就是您要搜索的内容。我不知道,理解Rails的所有插件魔法和元编程的东西是否足够聪明。它至少在vim的配置中提到了
防火墙防火墙分类第一代防火墙:包过滤防火墙包过滤防火墙的缺点第二代防火墙:代理防火墙第三代防火墙:状态防火墙第四代防火墙:UTM防火墙第五代防火墙:下一代防火墙华为防火墙介绍安全策略防火墙的会话表防火墙分类第一代防火墙:包过滤防火墙属于第一代防火墙技术,在没有专用防火墙设备时,一般由路由器实现该功能。将网络上传送数据包的IP首部以及TCP/UDP首部,获取发送源的IP地址和端口号,以及目的地的IP地址和端口号,并将这些信息作为过滤条件,决定是否将该分组转发至目的地网络分组过滤的执行需要设置访问控制列表。访问控制列表也可以称为安全策略(简称策略)或安全规则(简称规则)。类似于进站检票的做法,符合
内容来自Qt样式表之QSS语法介绍-3YL的博客Qt样式表是一个可以自定义部件外观的十分强大的机制,可以用来美化部件。Qt样式表的概念、术语和语法都受到了HTML的层叠样式表(CascadingStyleSheets, CSS教程)的启发,不过与CSS不同的是,Qt样式表应用于部件的世界。类型选择器QPushButton匹配QPushButton及其子类的实例ID选择器QPushButton#okButton匹配所有objectName为okButton的QPushButton实例。 CSS常用样式1CSS文字属性注:px:相对长度单位,像素(Pixel)。pt:绝对长度单位,点(Point
简介:我们都知道在Android开发中,当我们的程序在与用户交互时,用户会得到一定的反馈,其中以对话框的形式的反馈还是比较常见的,接下来我们来介绍几种常见的对话框的基本使用。前置准备:(文章最后附有所有代码)我们首先先写一个简单的页面用于测试这几种Dialog(对话框)代码如下,比较简单,就不做解释了一、提示对话框(即最普通的对话框)首先我们给普通对话框的按钮设置一个点击事件,然后通过AlertDialog.Builder来构造一个对象,为什么不直接Dialog一个对象,是因为Dialog是一个基类,我们尽量要使用它的子类来进行实例化对象,在实例化对象的时候,需要将当前的上下文传过去,因为我这
作者:郭斌斌爱可生DBA团队成员,负责项目日常问题处理及公司平台问题排查。本文来源:原创投稿*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。OceanBase集群界面会展示Observer的资源水位,今天简单了解一下资源水位的数值代表的含义以及关联参数现有test_1集群,只有一个sys租户Sys租户的资源配置:Cpu:2.5-5Memory:3G-3GUnit:1集群的资源水位信息以10.186.63.198为例,浅看一下cpu、内存、磁盘的含义以及相关联参数cpu:2.5/17核2.5代表observer上已经分配给租户的cpu核数,该数值是租户的MinCPU
快捷目录前言一、涉及到的相关技术简介二、具体实现过程及踩坑杂谈1.安卓手机改造成linux系统实现方案2.改造后的手机Linux中软件的安装3.手机Linux中安装MySQL5.7踩坑实录4.手机Linux中安装软件的正确方法三、Linux服务器部署前后端分离项目流程1.前提准备(安装必要软件,搭建环境):2.前后端分离项目的详细部署过程:总结前言总体概述:本篇文章隶属于“手机改造服务器部署前后端分离项目”系列专栏,该专栏将分多个板块,每个板块独立成篇来详细记录:手机(安卓)改造成个人服务器(Linux)、Linux中安装软件、配置开发环境、部署JAVA+VUE+MySQL5.7前后端分离项目
涡旋光束及其MATLAB实现前言涡旋光束的基本概念常见的涡旋涡旋光束涡旋光束的产生方法前言笔者新开一块专栏,专门用于讨论整理总结涡旋光束的相关内容,从基本的概念出发,推导相关的公式,并结合MATLAB进行相关的仿真,不清楚这个专栏会更新多少期,我会分享部分的代码,全部的代码有需要的话可以私聊我。当然大家对这个专栏感兴趣的话,欢迎积极交流。涡旋光束的基本概念涡旋光束(vortexbeam)是指携带光学涡旋,具有exp(imϕ)exp(im\phi)exp(imϕ)相位分布的光束,其中mmm表示相位拓扑电荷数,ϕ\phiϕ是柱坐标下的方位角。之前的分享中笔者已经说明了部分的激光光束的表达式,想要