协议无关组播--稀疏模式 PIM-SM
一、
1)PIM-SM
1.PIM-SM转发、加入
PIM-SM适合于接收成员较少的环境。它与DM有何显著的区别?先看PIM-SM转发机制。
转发:
当组播数据到达路由器时,路由器也会去创建转发项。转发项的入接口也依据单播路由指向源(请注意这里的源不再一定是数据源S,它是网络中某一个作为核心的路由器RP。所有数据源向组发送数据时都由源DR先将数据发向RP。RP再将数据向网络转发);但出接口列表却为空。因此,路由器并不向网络转发组播数据。为什么?因为,SM默认为其所有接口上并无谁需要组播数据。
加入:
但是,当网络中有主机想加入组,接收组数据时怎么办?这时主机先向DR发送IGMP加入。DR接收到IGMP加入后,就在该组转发项出接口列表中添加接收到IGMP加入的接口。
如果DR出接口列表从空变成非空,则向其RP发送加入消息。沿途所有路由器就会将收到加入消息的接口添加到出接口列表中。如果路由器的转发项出接口也从空变为非空,则路由器向RP转发该加入消息。如果路由器的转发项不为空,则路由器只是在出接口列表中添加收到消息的接口。这样路由器就建立起了转发项。组播数据就能够流到加入到组的所有组成员。
由此可以看出,SM转发项的建立是依靠主机和RPF下游显式发送加入消息建立起来的。
2.PIM-SM剪枝
当主机不再希望收到组数据时,主机就向DR发送IGMP离开消息。DR收到IGMP离开后就将接收到该消息的接口从出接口列表中删除;如果出接口列表从非空变为空,DR将向RP发送剪枝消息。
上游路由器收到剪枝消息后,也将收到该消息的接口从出接口列表中删除。当其出接口列表从非空变为空时,上游路由器也向RP发送剪枝消息。这样组播数据就不再流向该分支了。
值得提醒的是:SM转发项是通过加入消息显式建立的。所以,剪枝后的接口不会象DM那样经过一段时间后会恢复。SM要恢复向剪枝接口转发数据必须等待下游或主机发送加入消息。
3.PIM-SM状态维护
PIM-SM如何维护转发项?在PIM-SM是依靠下游路由器周期性的发送加入消息来维护转发项。当路由器收到加入消息,路由器就刷新转发项和出接口。路由器如果长时间未收到加入消息,将删除该出接口;如果出接口列表为空,路由器就删除该转发项。
4.PIM-SM注册
在网络中某个作为核心的路由器RP。所有组播数据都被DR先发向RP。那么,DR是如何将组播数据发向RP的呢?这就依靠注册消息。
当源的DR收到组播数据后,将整个IP包封装注册消息中,并以单播的方式将注册消息发向RP。RP收到注册消息后,取出里面的组播数据包。如果RP有该组的转发项并且其出接口列表不为空,则转发该数据包;如果RP没有该转发项或者出接口列表为空,则向源的DR单播注册停止消息。
DR收到注册停止消息后,停止向RP发送注册消息。但经过一段时间后DR重新发起一次注册过程。
2)最短路径书切换
组播数据流在网络中分发途径可以用“树”模型来描述。组播分发树分为最短路径树(Shortest Path Tree)和汇接点树(RPT:Rezendous Point Tree, 也称共享树)。
最短路径树的树根就在源S。网络中所有组成员都根据到源的单播最短路径获得组播数据。按照这种分发树模型,组成员可以更快的接收到组播数据,同时还能避免在网络中某些点出形成拥塞。PIM_DM分发树就是这种模型。
共享树的树根是网络中某一个作核心的路由器RP。源的DR首先将组播数据发到RP。组成员再根据到RP的单播路径获得组播数据。PIM-SM分发树就是这种模型。
共享树的树根是网络中某一个作核心的路由器RP。源的DR首先将组播数据发到RP。组成员再根据到RP的单播路径获得组播数据。PIM-SM分发树就是这种模型。
为什么PIM-SM要采用这种模型?还得从PIM-SM假设说起:PIM-SM首先假定网络中没有组成员,并不需要组播数据流。因此,主机起初并不知道源是谁(当然知道组,因为这是一个前提,就如知道某个频道是某个电视台电视节目一样)。因此,DR在收到某组的IGMP加入后,只能向RP发起加入消息。通过RP获得组播数据,知道源S后才能直接从源获得组播数据。这个切换过程就是最短路径树切换(SPT Switch)。
PIM-SM中还涉及到其根节点RP的选择机制。PIM-SM域内配置了一个或多个候选自举路由器(Candidate-BSR)。应用一定的规则从中选出自举路由器(BSR)。PIM-SM域中还配置了候选 RP路由器(Candidate-RP),这些候选 RP将包含了它们地址及可以服务的组播组等信息的包单播至自举路由器。BSR 定期生成包括一系列候选 RP以及相应的组地址的“自举”消息。“自举"消息在整个域中逐跳发送。路由器接收并保存这些“自举"消息。若 DR 从直连主机收到了某组的成员关系报告后,如果它没有这个组的路由项,DR 将使用一个hash算法将组地址映射至一个可以为该组服务的候选 RP。然后 DR 将朝RP方向逐跳组播“加入/剪枝”消息。若 DR从直连主机收到组播数据包,如果它没有这个组的路由项,DR 将使用hash算法将组地址映射至一个可以为该组服务的候选 RP。然后 DR将组播数据封装在注册消息中单播到RP。
最短路径书切换
SPT切换由最后一跳路由器DR发起。发生切换的规则很多,最常用的就是流量统计:当流量超过一定阈值时,DR发起从RPT到SPT的切换。
DR首先向其RPT上游发送带有SPT标志的加入消息。上游路由器收到SPT加入后也向源方向发送SPT加入。如果本路由器的到源的出接口与到RP的出接口不是同一接口,则路由器还向RP发送带有RPT标志的剪枝消息。
这样路由器将不再从RP而是直接从源S获取组播数据。当然DR也能发起逆过程,当流量低于该阈值时从SPT切回RPT。
PIM-SM配置
+启动组播进程
multicast routing-enable
+在接口上启动PIM-SM
pim sm
禁用PIM-SM协议
undo pim sm
pim bsr-boundary
undo pim bsr-boundary
pim bsr-boundary 命令用来将以太网交换机的接口配置为PIM域边界,undo pim bsr-boundary命令用来删除配置的PIM域边界。
c-bsr vlan-interface vlan-id hash-mask length [priority]
undo c-bsr
c-bsr命令用来将以太网交换机配置成为C-BSR(Candidate Bootstrap Router),undo c-bsr命令用来删除C-BSR。
pim timer hello seconds
undo pim timer hello
pim timer hello命令用来配置接口发送Hello报文的时间间隔,undo pim timer hello命令用来恢复接口发送Hello报文时间间隔的缺省值。
c-rp vlan-interface vlan-id [accept-group-policy acl-number]
undo c-rp vlan-interface vlan-id
c-rp命令用来将以太网交换机配置成为C-RP(Candidate Rendezvous Point),undo c-rp命令用来取消以太网交换机为C-RP。
spt-switch-threshold {traffic-rate | infinity}[accept-group-policy acl-number]
undo spt-switch-threshold {traffic-rate | infinity}[accept-group-policy acl-number]
spt-switch-threshold命令用来配置从共享树切换到源最短路径树的阈值,undo spt-switch-threshold命令用来恢复配置从共享树切换到源最短路径树阈值的缺省值。
display pim bsr-info
显示当前BSR的信息。
display pim interface [interface-type interface-number]
显示当前运行PIM接口的简要信息
display pim routing0table [{{ *g [group-address [mask { mask-length | mask }]] | **rp [rp-address [maks { mask-length | mask }]]} | { group-address [mask { mask-length | mask }] | source-address [mask { mask-length | mask }]} *} | incoming-interface {interface-type interface-num | interface-name | null} | {dense-mode | sparse-mode}]*
显示dm或sm组播路由表
display pim neighbor [ interface interface-type interface-number ]
显示路由器发现的PIM邻居
display pim rp-info [group-address]
显示制定组的RP。不带参数则显示所有组的RP
例子
PIM-SM一般运行在接收者比较稀少的网络中。在以上网络中,全网都运行PIM-SM组播协议。则在每个三层交换设备上都要配置PIM-SM协议:
首先,配置VLAN虚接口。PIM-SM协议是应用层协议,运行在三层接口上。
其次,启动组播路由协议
multicast routing-enable
接着,在每个VLAN虚接口上配置PIM-SM
pim sm
最后,在整个PIM-SM域中要配置候选BSR和候选RP。RP一般配置在处于网络的中心,性能比较优越的交换机上。BSR一般与RP配置在一个交换机上
c-bsr vlan-interface 10 24 2
c-rp vlan-interface 10
这样,PIM-SM组播网络配置就完成了。注意:组播协议必须依赖单播路由才能工作。单播路由可以是OSPF、RIP或者是静态路由等等都可。
www.huawei.com
协议无关组播--稀疏模式 PIM-SM的更多相关文章
- 协议无关组播-密集模式 PIM-DM
一.组播路由协议 (一) 路由器依靠转发项来转发组播数据包.转发项的生成则是组播路由协议所要完成的任务.组播路由协议有距离矢量组播路由协议(DVMRP).协议无关组播-密集模式(PIM-DM).协议无 ...
- 计算机网络之网络层IP组播(IGMP、组播路由选择协议、组播地址)
文章转自:https://blog.csdn.net/weixin_43914604/article/details/105318560 学习课程:<2019王道考研计算机网络> 学习目的 ...
- Android为TV端助力:UDP协议(接收组播和单播)
private static String MulticastHost="224.9.9.98";private static int POST=19999;private sta ...
- HCNP Routing&Switching之组播技术PIM-SM 稀疏模式
前文我们了解了组播路由协议PIM以及PIM-DM密集模式相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/16084310.html:今天我们来聊一聊PI ...
- IP组播
1 IP组播基础 IP组播技术有效地解决了单点发送.多点接收的问题.组播源只发送一份数据,被传递的信息在距组播源尽可能远的网络节点才开始被复制和分发,并且只发送给需要该信息的接收者. 说明: 本章 ...
- HCNP Routing&Switching之组播技术-组播路由协议PIM
前文我们了解了组播技术中组播分发树相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/16019334.html:今天我们来聊一聊组播路由协议PIM相关话题 ...
- HCNP Routing&Switching之组播技术-组播协议IGMP
前文我们了解了组播地址相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15616740.html:今天我们来聊一聊组播协议中IGMP协议相关话题: 组播 ...
- IP组播技术介绍及实现例子
引 言 近年来,随着Internet的迅速普及和爆炸性发展,在Internet上产生了许多新的应用,其中不少是高带宽的多媒体应用,譬如网 络视频会议.网络音频/视频广播.AOD/VOD.股市行情发布. ...
- 组播IP地址
组播IP地址组播IP地址用于标识一个IP组播组.IANA(internet assigned number authority)把D类地址空间分配给IP组播,其范围是从224.0.0.0到239.25 ...
随机推荐
- Go Example--函数
package main import ( "fmt" ) func main() { res := plus(1,2) fmt.Println("1+2=", ...
- Scala之偏函数Partial Function
https://blog.csdn.net/bluishglc/article/details/50995939 从使用case语句构造匿名函数谈起在Scala里,我们可以使用case语句来创建一个匿 ...
- Python自建collections模块
本篇将学习python的另一个内建模块collections,更多内容请参考:Python学习指南 collections是Python内建的一个集合模块,提供了许多有用的集合类. namedtupl ...
- 推荐一篇文章 《为什么C语言不会过时?》
<为什么C语言不会过时?> 文章地址 : https://mp.weixin.qq.com/s?__biz=MzAxOTc0NzExNg==&mid=2665515153&a ...
- vscode vue eslint 快捷键格式化代码
添加vetur , eslint插件 在工作区添加以下代码 "workbench.startupEditor": "welcomePage", &quo ...
- js检测字符串的字节数
在js中字符串可以存放数字,字母或者汉字,但是又一个问题就是,数字和字母都是占一个字节,而一个汉字占2个字节.如果在一个字符串中既有字母又有汉字怎么判断字节数呢 第一种简单粗暴 var str = ' ...
- kafka 的 docker 镜像使用
Kafka 还没有提供官方的镜像(2019.01.29),能找到的都是一些社区维护的镜像包. 这里使用这个镜像:https://hub.docker.com/r/spotify/kafka
- sqoop上传数据到hdfs,并用hive管理数据。
sqoop导入mysql数据表到HDFS中sqoop import --connect jdbc:mysql://master:3306/test --username root --password ...
- WINSCP传输文件自动赋予777权限
WinSCP WinSCP是一个Windows环境下使用SSH的开源图形化SFTP客户端.同时支持SCP协议.它的主要功能就是在本地与远程计算机间安全的复制文件. 为了复制到Linux的文件具有777 ...
- 解决openwrt中文界面异常
openwrt的luci以中文字体显示时,出现以下异常情况: 是因为该固件编译了其他的luci application,我是编译了meshwizard. 可作如下修改: scp登陆打开/usr/lib ...