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)的出口中剔除并增加到剪枝接口列表中)

最新文章

  1. Shader实例:2D流光
  2. sql server 游标 写给自己
  3. Android调用相机并将照片存储到sd卡上
  4. iOS 常用基础框架
  5. ubuntu soft install
  6. Git 解决同步 No value for key branch.master.merge found in
  7. Java之【线程通信】--标志位练习
  8. Unity优化之贴图
  9. 面向对象_内置函数 property
  10. hadoop的一点小常识(1.0环境)
  11. 谈谈你对spring的理解?
  12. JDBC工具类
  13. LOJ6089 小Y的背包计数问题 背包、根号分治
  14. SVN上拖下来的项目,缺少build path怎么办?
  15. 图像处理之生成ColorBar
  16. 关hashMap跟hashTable的区别
  17. 九数组分数|2015年蓝桥杯B组题解析第五题-fishers
  18. Linux 基础教程 42-xargs命令
  19. 阅读《Android 从入门到精通》(24)——切换图片
  20. 【BZOJ5073】[Lydsy十月月赛]小A的咒语 DP(错解)

热门文章

  1. 11.怎样自学Struts2之Struts2验证[视频]
  2. codeforces@281 B
  3. poj_2481,Cows,树状数组
  4. 48.AngularJS ng-src 指令
  5. Word或Excel里画柱状图和折线图组合体
  6. ACM-ICPC 2016 Qingdao Preliminary Contest
  7. Ubuntu14.04下tensorflow安装
  8. 工作日志:dispatch_once、网络缓存、分享问题
  9. docker切换默认镜像源
  10. 同门不同类—创新Aurvana Live2/Air简评(附随身视听设备心路历程)