PIM-DM协议内核触发机制及协议执行机制记录
PIM-DM和PIM-SM是组播路由ASM(随意信源组播)中的两种不同模式。相对PIM-SM的组播注冊机制。PIM-DM的扩散机制显得更加粗犷。
一、PIM-DM无需向内核注冊pimreg虚接口。
可是同PIM-SM一样须要将三层接口增加MRT组播接口中。
以在内核收到组播报文后触发cache_miss消息。
二、协议初始化阶段,会创建PIM协议套接字和igmp套接字,igmp套接字通过配置相同能够接收来自内核的igmp组播控制报文(cache_miss、process_whole_packet(pim-dm无需解析))。
三、在接口上使能PIM-DM后,协议接口首先会进行DR选举维护邻居路由信息。
四、执行阶段。当PIM-DM路由接口收到组播信息后,内核会查找MFC表项,假设MFC表项中存在该组播转发表,则按转发表中的转发规则对组播报文进行转发,假设MFC表项中不存在该组播转发表。则内核触发cache_miss消息通过igmp 套接字送到PIM-DM协议。
协议得到这个cache_miss消息后 创建(S,G)表项并维护好出口、入口。下发到内核MFC中。之后,组播报文就会依照下发的MFC转发规则进行转发。
五、组播转发表的维护。
PIM-DM创建(S,G)转发表时,入口就是收到组播报文的接口,出口是除接口外的全部PIM-DM接口。
这样一来,一旦收到组播报文。PIM-DM路由器就会将组播报文从除接口外的全部PIM-DM接口转发出去。 这个过程就是sprase mode(稀疏模式)的工作方式。
六、剪枝过程。当终端PIM-DM路由收到来自源端的组播报文后,也会创建相应的(S,G)转发表。
并检查是否有该组播的接收者。假设剪枝定时器到期仍然没有接收者的话,终端DM路由器将会向该组播入口发送pruned 剪枝报文通告上联路由该路由接口无需接收该组播信息。 这样上联路由就会将pruned接口从(S,G)转发表的出口列表中剔除。临时增加到pruned接口列表中去。
七、接收者增加、离开。
当终端路由器接收到igmp report消息时,会将对应的接口增加到自己的(S,G)表项出接口中。并向组播入口发送alert报文。通告上联路由将自己增加到组播接收者中去。 当终端路由收到igmp leave消息时,则会将对应离开接口从(S,G)表项中剔除,反复六中的剪枝过程。
总而言之:PIM-DM的工作方式,以以下一个情景对话能够概括。
PC 1---------- Router A ------------Router B ------- src
|
PC 2------------Router C
src: 我開始发送组播报文了, 你们看着办吧。
Router B: Router A, Router C, 无论你们要不要这个组播, 我先发给你们了。不要再和我说下(sparse, 扩散机制)
Router A: 有人要这个组播吗(igmp query)? 草,半天没人回(剪枝定时器到期)。
算了, 我先把这个组播记录下来(创建(S,G)转发表),我会定时询问有没有人要的。
可是 Router B你临时不用再发给我了(pruned 剪枝)。
Router B:好的,我先不给你转发这个组播信息了(将和Router A级联的路由口从(S,G)的出口中剔除并增加到剪枝接口列表中)。
Router C: 有人要这个组播吗? (igmp query)
PC 2: 大哥。我要我要。 (igmp report)
Router C: 我先记录下(创建(S,G)转发表), 后面再收到这个组播报文,我就给你发一份哈(组播转发)。 不要的时候告诉我一下。
PC 1: 我靠,我也要。 (igmp report)
Router A: Router B我这边有人要这个组播,给我也发一份吧(alert)。
Router B:OK, 后面来的组播我会给你也发一份。(将和Router A级联的路由口又一次增加到(S,G)的出口中)。
PC 1:好像没什么用啊。。
。
老大。我不要了,别给我发了。
Router A:尼玛, 你玩我? 受不了了。 Router B我这边没人要这个组播了。不用再给我发了(pruned 剪枝)。
Router B: OK。(将和Router A级联的路由口从(S,G)的出口中剔除并增加到剪枝接口列表中)
PIM-DM协议内核触发机制及协议执行机制记录的更多相关文章
- 摘录和再编:彻底弄懂JS执行机制
网文: https://juejin.im/post/59e85eebf265da430d571f89 并发模型和事件循环:https://developer.mozilla.org/zh-CN/do ...
- 计算机网络之流量控制(停止-等待协议、滑动窗口、后退N帧协议GBN、选择重传协议SR)、滑动窗口、可靠传输机制
文章转自:https://blog.csdn.net/weixin_43914604/article/details/104908762 学习课程:<2019王道考研计算机网络> 学习目的 ...
- 在网络7层协议中,如果想使用UDP协议达到TCP协议的效果,可以在哪层做文章?(QQ 为什么采用 UDP 协议,而不采用 TCP 协议实现?)
为了解决这题,可以具体看看下面这个讨论. 解灵运工程师 185 人赞同 某次架构师大会上那个58同城做即时通信的人说:原因是因为当时没有epoll这种可以支持成千上万tcp并发连接的技术,所以他们使用 ...
- 网络协议之:sctp流控制传输协议
目录 简介 TCP有什么不好 sctp的特点 总结 简介 要讲网络协议,肯定离不开OSI(Open System Interconnection)的七层模型. 我们一般关注的是网络层之上的几层,比如I ...
- 基于UDP协议模拟的一个TCP协议传输系统
TCP协议以可靠性出名,这其中包括三次握手建立连接,流控制和拥塞控制等技术.详细介绍如下: 1. TCP协议将需要发送的数据分割成数据块.数据块大小是通过MSS(maximum segment siz ...
- RTSP RTSP(Real Time Streaming Protocol),RFC2326,实时流传输协议,是TCP/IP协议体系中的一个应用层协议
RTSP 编辑 RTSP(Real Time Streaming Protocol),RFC2326,实时流传输协议,是TCP/IP协议体系中的一个应用层协议,由哥伦比亚大学.网景和RealNetwo ...
- PHP服务器脚本 PHP内核探索:新垃圾回收机制说明
在5.2及更早版本的PHP中,没有专门的垃圾回收器GC(Garbage Collection),引擎在判断一个变量空间是否能够被释放的时候是依据这个变量的zval的refcount的值,如果refco ...
- ****** 四十二 ******、软设笔记【网络基础】-IPv6协议、常用的网络协议
一.IPv6协议 IPv6协议,全称"互联网协议第6版",即下一代的网际协议. 相对于IPv4来说,IPv6协议主要改进: *扩展的地址.IPv6地址长度为128位. *IPv6使 ...
- 【协议】3、HTTP 协议入门
HTTP 协议是互联网的基础协议,也是网页开发的必备知识,最新版本 HTTP/2 更是让它成为技术热点. 本文介绍 HTTP 协议的历史演变和设计思路. 一.HTTP/0.9 HTTP 是基于 TCP ...
随机推荐
- vim水平摆放全部窗体的三个方法
Method1: map <F7> <ESC>:windo exe "normal \<foobar<C-W>C-W>K"<C ...
- SQLite -- 嵌入式关系型数据库
SQLite -- 嵌入式关系型数据库 1.SQLite的数据类型:Typelessness(无类型) 1,能够保存不论什么类型的数据到表的随意列中 2.支持常见的类型如: NULL, VARCHAR ...
- 怎样在Ubuntu手机平台中开发Cordova HTML5应用
我们知道Cordova HTML5应用具有夸平台的特性,同一时候也具有訪问本地一些资源的能力.在今天的这篇文章中.我们将介绍一下怎样创建并执行一个Cordova HTML5的应用到我们的Ubuntu手 ...
- 编译并使用boost库(win7+boost1.63+vs2015+32位or 64位),超详细,boost于vs2017下编译(64/32bit)
首先下载得到boost的最新版(目前最新版是1.63) 下载地址: http://www.boost.org 也可以从这里直接下载 http://download.csdn.net/detail/ ...
- docker 命令合集
目录 image镜像操作 container 容器操作 访问仓库 Repository 数据管理 使用网络 容器互联: image镜像操作 列出已经下载下来的镜像: docker image ls 查 ...
- [HAOI2016]找相同字符 广义后缀自动机_统计出现次数
题目描述:给定两个字符串,求出在两个字符串中各取出一个子串使得这两个子串相同的方案数.两个方案不同当且仅当这两个子串中有一个位置不同. 输入输出格式输入格式:两行,两个字符串 s1,s2,长度分别为n ...
- ifsta---统计网络接口活动状态
ifstat命令就像iostat/vmstat描述其它的系统状况一样,是一个统计网络接口活动状态的工具.ifstat工具系统中并不默认安装,需要自己下载源码包,重新编译安装,使用过程相对比较简单. 下 ...
- uptime---系统总共运行时间和系统的平均负载
uptime命令能够打印系统总共运行了多长时间和系统的平均负载.uptime命令可以显示的信息显示依次为:现在时间.系统已经运行了多长时间.目前有多少登陆用户.系统在过去的1分钟.5分钟和15分钟内的 ...
- ssh 免交互式登陆
脚本: vim key.sh #!/bin/bash#make key\rm -f /root/.ssh/id_dsassh-keygen -t dsa -f /root/.ssh/id_dsa -P ...
- scrapy xpath选择器多级选择错误
在学习scrapy中用xpath提取网页内容时,有时要先提取出一整个行标签内容,再从行标签里寻找目标内容.出现一个错误. 错误代码: def parse(self, response): sel = ...