(转载)PIM-SM协议初探(一)路由角色选举
PIM是Protocol Independent Multicast(协议无关组播)的简称,表示可以利用静态路由或者任意单播路由协议(包括RIP、OSPF、IS-IS、BGP等)所生成的单播路由表为IP组播提供路由。组播路由与所采用的单播路由协议无关,只要能够通过单播路由协议产生相应的组播路由表项即可。PIM借助RPF(Reverse Path Forwarding,逆向路径转发)机制实现对组播报文的转发。当组播报文到达本地设备时,首先对其进行RPF检查:若RPF检查通过,则创建相应的组播路由表项,从而进行组播报文的转发;若RPF检查失败,则丢弃该报文。
根据实现机制的不同,PIM分为以下两种模式:
1. PIM-DM(Protocol Independent Multicast-Dense Mode,协议无关组播—密集模式)
2. PIM-SM(Protocol Independent Multicast-Sparse Mode,协议无关组播—稀疏模式)
PIM-SM简介
PIM-DM使用以“扩散—剪枝”方式构建的SPT来传送组播数据。尽管SPT的路径最短,但是其建立的过程效率较低,并不适合大中型网络。
PIM-SM属于稀疏模式的组播路由协议,使用“拉(Pull)模式”传送组播数据,通常适用于组播组成员分布相对分散、范围较广的大中型网络。
PIM-SM的基本原理如下:
l PIM-SM假设所有主机都不需要接收组播数据,只向明确提出需要组播数据的主机转发。PIM-SM实现组播转发的核心任务就是构造并维护RPT(Rendezvous Point Tree,共享树或汇集树),RPT选择PIM域中某台路由器作为公用的根节点RP(Rendezvous Point,汇集点),组播数据通过RP沿着RPT转发给接收者;
l 连接接收者的路由器向某组播组对应的RP发送加入报文(Join Message),该报文被逐跳送达RP,所经过的路径就形成了RPT的分支;
l 组播源如果要向某组播组发送组播数据,首先由与组播源侧DR(Designated Router,指定路由器)负责向RP进行注册,把注册报文(Register Message)通过单播方式发送给RP,该报文到达RP后触发建立SPT。之后组播源把组播数据沿着SPT发向RP,当组播数据到达RP后,被复制并沿着RPT发送给接收者。
说明:
复制仅发生在分发树的分支处,这个过程能够自动重复直到数据包最终到达接收者。
工作机制
1. 邻居发现
PIM-SM使用与PIM-DM类似的邻居发现机制,具体请参见“邻居发现”一节。
2. DR选举
借助Hello报文还可以为共享网络(如Ethernet)选举DR,DR将作为该共享网络中组播数据的唯一转发者。
无论是与组播源相连的网络,还是与接收者相连的网络,都需要选举DR。接收者侧的DR负责向RP发送加入报文;组播源侧的DR负责向RP发送注册报文。
& 说明:
l 各路由器之间通过比较Hello报文中所携带的优先级和IP地址,可以为多路由器网段选举DR。选举出的DR对于PIM-SM有实际的意义;而对于PIM-DM来说,其本身其实并不需要DR,但如果PIM-DM域中的共享网络上运行了IGMPv1,则需要选举出DR来充当共享网络上的IGMPv1查询器。
l 在充当DR的设备上必须使能IGMP,否则连接在该DR上的接收者将不能通过该DR加入组播组。
如图3所示,DR的选举过程如下:
(1) 共享网络上的各路由器相互之间发送Hello报文(携带有竞选DR优先级的参数),拥有最高优先级的路由器将成为DR;
(2) 如果优先级相同,或者网络中至少有一台路由器不支持在Hello报文中携带竞选DR优先级的参数,则根据各路由器的IP地址大小来竞选DR,IP地址最大的路由器将成为DR。
当DR出现故障时,其余路由器在超时后仍没有收到来自DR的Hello报文,则会触发新的DR选举过程。
3. RP发现
RP是PIM-SM域中的核心设备。在结构简单的小型网络中,组播信息量少,整个网络仅依靠一个RP进行组播信息的转发即可,此时可以在PIM-SM域中的各路由器上静态指定RP的位置;但是在更多的情况下,PIM-SM域的规模都很大,通过RP转发的组播信息量巨大。为了缓解RP的负担并优化RPT的拓扑结构,可以在PIM-SM域中配置多个C-RP(Candidate-RP,候选RP),通过自举机制来动态选举RP,使不同的RP服务于不同的组播组,此时需要配置BSR(BootStrap Router,自举路由器)。BSR是PIM-SM域的管理核心,一个PIM-SM域内只能有一个BSR,但可以配置多个C-BSR(Candidate-BSR,候选BSR)。这样,一旦BSR发生故障,其余C-BSR能够通过自动选举产生新的BSR,从而确保业务免受中断。
& 说明:
1. 一个RP可以同时服务于多个组播组,但一个组播组只能唯一对应一个RP。
2. 一台设备可以同时充当C-RP和C-BSR。
如图4所示,BSR负责收集网络中由C-RP发来的宣告报文(Advertisement Message),该报文中携带有C-RP的地址和优先级以及其服务的组范围,BSR将这些信息汇总为RP-Set(RP集,即组播组与RP的映射关系数据库),封装在自举报文(Bootstrap Message)中并发布到整个PIM-SM域。
图4 RP与BSR信息交互示意图
网络中的各路由器将依据RP-Set提供的信息,使用相同的规则从众多C-RP中为特定组播组选择其对应的RP,具体规则如下:
(1) 首先比较C-RP的优先级,优先级较高者获胜。
(2) 若优先级相同,则使用哈希(Hash)函数计算哈希值,该值较大者获胜。
(3) 若优先级和哈希值都相同,则C-RP地址较大者获胜。
哈希函数的表达式为:Value (G, M, Ci) = (1103515245 * ( (1103515245 * (G & M) + 12345) XOR Ci) + 12345) mod 231,其中各符号的含义如表1所示。
|
符号 |
含义 |
|
Value |
哈希值 |
|
G |
IP组播组的地址 |
|
M |
哈希掩码长度(Hash Mask Length) |
|
Ci |
C-RP的IP地址 |
|
& |
逻辑运算符,表示与运算 |
|
XOR |
逻辑运算符,表示异或运算 |
|
mod |
算术运算符,表示整除取余 |
(转载)PIM-SM协议初探(一)路由角色选举的更多相关文章
- HTTP协议初探
HTTP协议初探 HTTP协议初探 什么是http协议? 遵守协议的双方 再来回答什么是http协议 抓到这两段文本 可以总结出以下规律 HTTP 请求命令(动作,谓词 ,METHOD) GET 和 ...
- gopher 协议初探
Gopher 协议初探 最近两天看到了字节脉搏实验室公众号上有一篇<Gopher协议与redis未授权访问>的文章,其中对gopher协议进行了比较详细的介绍,所以打算跟着后面复现学习一下 ...
- (转载)RTMP协议中的AMF数据 http://blog.csdn.net/yeyumin89/article/details/7932585
为梦飞翔 (转载)RTMP协议中的AMF数据 http://blog.csdn.net/yeyumin89/article/details/7932585 这里有一个连接,amf0和amf3的库, ...
- Keepalived中Master和Backup角色选举策略
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://ixdba.blog.51cto.com/2895551/1544858 在Kee ...
- Keepalived详解(五):Keepalived集群中MASTER和BACKUP角色选举策略【转】
一.Keepalived集群中MASTER和BACKUP角色选举策略 在keepalived集群中,其实并没有严格意义上的主.备节点,虽然可以在keepalived配置文件中设置state选项为MAS ...
- Keepalived 角色选举
简介: 1.在 Keepalived 集群中,其实并没有严格意思上的主.备节点,虽然可以在 keepalived.conf 中定义 state 选项为 MASTER 状态,但是这并不意味着此节点就一直 ...
- 【转载】TCP协议疑难杂症全景解析
说明: 1).本文以TCP的发展历程解析容易引起混淆,误会的方方面面2).本文不会贴大量的源码,大多数是以文字形式描述,我相信文字看起来是要比代码更轻松的3).针对对象:对TCP已经有了全面了解的人. ...
- 神州数码静态路由及直连网段引入到RIP协议配置(路由重定向)
实验要求:掌握静态路由及直连网段引入协议当中的配置 拓扑如下 R1 enable 进入特权模式 config 进入全局模式 hostname R1 修改名称 interface g0/6 进入端口 i ...
- 【转载】TCP协议要点和难点全解
说明: 1).本文以TCP的发展历程解析容易引起混淆,误会的方方面面 2).本文不会贴大量的源码,大多数是以文字形式描述,我相信文字看起来是要比代码更轻松的 3).针对对象:对TCP已经有了全面了解的 ...
随机推荐
- 开放式最短路径优先OSPF
1.OSPF基本知识 OSPF作为基于链路状态的协议,解决了RIP在收敛慢,路由环路,可扩展性差等问题,还有以下优点: 采用组播方式发布报文,可以减少对其他不运行ospf路由器的影响 ospf直尺无类 ...
- BZOJ3887 [Usaco2015 Jan]Grass Cownoisseur[缩点]
首先看得出缩点的套路.跑出DAG之后,考虑怎么用逆行条件.首先可以不用,这样只能待原地不动.用的话,考虑在DAG上向后走,必须得逆行到1号点缩点后所在点的前面,才能再走回去. 于是统计从1号点缩点所在 ...
- windows下多个python版本共存 及安装Django
了解python的人都知道python有2.x版本和3.x版本,而python3.x版本不向下兼容,但是根据具体的需要,有时候要2.x和3.x共存,python共存本身没有问题,只是需要设置一些环境变 ...
- 如何创建vue项目
Vue项目环境搭建 """ node ~~ python:node是用c++编写用来运行js代码的 npm(cnpm) ~~ pip:npm是一个终端应用商城,可以换国内 ...
- 用jquery实现Ping测试网络连接性
jquery的ping插件://要用的需要明白代码及自己改些地方 (function($) { $.fn.ping = function(options) { var opts = ...
- Waiting (TTFB) 时间
什么是 Waiting (TTFB) 时间 TTFB 是 Time to First Byte 的缩写,指的是浏览器开始收到服务器响应数据的时间(后台处理时间+重定向时间),是反映服务端响应速度的重要 ...
- vscode调整字体大小
在vscode中,通过setting>User>Text Editor>Font可以调整字体大小,但是这里只是调整右侧的代码编辑区域的字体,左侧的侧边栏确无法调整字体大小,找了很久都 ...
- 创建节点--DOM树
创建节点 快捷键:innerhtml outerhtml innertext outertext ==============创建节点方法有两种:============== <script s ...
- Codeforces Round #402 (Div. 2) D题 【字符串二分答案+暴力】
D. String Game Little Nastya has a hobby, she likes to remove some letters from word, to obtain anot ...
- BZOJ 2982 combination 脑子+组合数学
可以发现,整个数列构成一个树形结构,并且是个完全二叉堆(小根堆). 并且这个堆的形态在给定$n$后是固定的,第1个位置上显然只能放1. 对子树的根来说,他自己是所分得的数集中最小的那个,所以从剩下$s ...