Dense mode  详解

密集模式

只用到了源树,SPT,

使用(S,G)表项转发数据

PIM对dense 和sparse都支持

如何构建路由表?

*,G表项创建原因

1 收到了IGMP report (当然只会在最末跳路由器才会出现,连接着组成员)

2 或者是收到组播数据,为了创建S,G转发数据而先创建了*,G

这里也是和单播最大的一个区别 ,在转发单播数据时,如果没有目的地址,那么直接丢弃,而组播不同,它可以先创建这个条目S,G,然后再转发。

*,G 表项创建规则

Incoming interface : Null 因为对源的未知,因此无法获知RPF接口

OIL

A 运行了dense mode 的接口

B 该接口收到了igmp report 或者是存在pim neighbor

A,B 必须同时满足

S,G创建原因

当接收到了实际的组播数据,才会出现S,G表项

S,G创建规则

1 incoming interface: RPF接口,到达源的

2 outgoing interface list :

1)     直接复制*,G表项的OIL,并且排除incoming interface接口

由PC申请加入这个组,然后将report消息发送到了R7

R7查看自己的Mroute 时,会看到*,G类型的条目

请问是满足发哪个条件形成了*,G的表项了呢?

是接收到了来自于组成员的report消息了

此时,*,G的条目中,是没有RP的,因为是dense模式,

入接口也没有,是空的,在dense 模式中,*,G的表这个项都是空的,因为不知道源是谁,

Outgoing interface 是出口,之前说过,可以有多个

但也要按照*,G表项的建立原则来看,只有F0/1接口收到了IGMP的REPORT 消息,并且该接口运行了dense mode

现在让SERVER来Ping 一下这个组播地址

看看会有什么反应

通是可以通的,然后我们到R7上再看一下发生了什么变化

由于出现了源,所以现在S,G条目也出现了,

S ,是server

G, 这个组

Incoming interface 就是RPF接口,F0/0. RPF邻居是,也就是R6

另外,OIL会直接复制*,G的,但是有一条要求 ,

会将incoming interface 从中排除出去.

Outgoing interface 现在是f0/1接口,状态为转发,模式为dense

也就是说,当源为,组为的组播数据,需要转发时,是从f0/0口进来,然后从f0/1口转发出去的.

再来看一下R4,来巩固一下技术点

结合拓扑图来看,

首先接收到了组播数据,为了创建S,G而形成了*,G的表项,incoming 为空,

然后它的OIL中包含了所有的接口

S,G表项根据*,G表项而来,复制OIL

此时R3-R4有两条线,该选择哪一个呢?

因为RPF校验中明确指出,RPF接口在一台设备的一个组里 有且只有一个

那么两个接口就要进行比较,看谁的IP地址大,就选择谁为成RPF接口

对比,谁大就选谁,

那肯定是43大了,

而43对应的接口就是R4的f0/1口

所以F0/1为rpf 接口,对应的RPF neighbor 也就是

其它的都是forward 接口,

但如果按照这个逻辑还是存在问题

如果f0/0接口也是forward接口的话,会不会出现环路呢?

会的,所以系统直接将这个接口给prune了 修剪了,[dense 模式周期性30s泛洪+修剪](因为下面没有人需要接收组播流量)

改的是状态,并不会将条目删除

各种消息

Join / prune 消息

1) (*,G) join

2) (*,G) prune

 3) (S,G) Join

 4) (S,G) Prune

在dense 中只会用到(3)(4)两种

Assert 消息

这个是干架的消息,谁赢了,就会在接口条目后面加上一个A

肯定是有两条或以上

Graft / graft ack消息

Graft 请求组播

ACK 确认给你组播

(S,G)Prune

什么时候会发送prune呢?又是谁发的呢?发送的类型是什么?

当我设备上的OIL,为空时(这也就意味着没有接收者了)

是路由器发的,当它检测到自己后方没有组成员的话,会向上级发着prune消息,

发送的是S,G的prune消息,从S,G 表项的incoming interface 接口向上发送,

而且修剪的是上游设备的S,G 的OIL 转换为prune状态

如果说我有OIL,但是我所有的OIL都被prune了呢?

就是我下游的设备没有需要组播流量的,所以就会给我发送prune消息,我会将所有的OIL 都置为prune 状态

来看一下purne消息的表现形态吧

PC申请加入绷,R7上形成了*,G的表项

Server ping ,R7上形成了组播S,G的表项

然后我们将PC退出该组,看看R7上面的接口变化

这是原有正常情况下,S,G表项中有OIL,

再看一 下组成员退出后的结果

表项不会立即被清楚,要等三分钟,

而这不是主要的,我们要看prune消息

由于R7下方的组成员PC,发着了离组消息,那么R7将不会再往下发放组播数据,

也就导致了S,G的表项中OIL为空,(当S,G为空,或者是全部为prune时)

既然不需要组播数据,也就意味着R7将顺着RPF接口向上游设备发送(S,G)prune消息,现在可以看到rpf neighbor 是 R6,

那就到R6上抓包看一下

里面有一个标记,

Upstream-neighbor , 其意思就是发给我的RPF neighbor R6

并且在ip address 中显示的是 是源,

只要是这里显示的是源IP,那么就是S,G的消息

如果显示的是RP的地址,那就代表的是*,G的消息

为什么?

为什么不直接发送给R6,以单播的形式?还要以组播的形式发呢?

因为此时不仅仅是R6可以看到,R5也可以看到,仅此而已,

牵扯到另外一个消息,Assert消息

R6上看一下组播路由表,

可以看到,由于R7给我发送了prune消息后,我所对OIL所执行的动作

那么此时R6会不会继续往上发呢?

当然会,

它会将这个消息发送给它的上游 R4,

那么R4上看到的接口也变成prune状态了

以此类推

直到R1

 Assert消息

这时我们到R5上来看一下,

R5为什么会prune ?

它又没有接收到实际的prune消息,

还记得选择RPF接口时的比较吗?

当出现多个RPF接口时,会进行比较,会选择对端 IP地址大的那个做为RPF接口

而这个过程,发送的就是assert 消息

R5-R6对比

1 对比AD值 谁小谁优

2 对比METRIC 值  谁小谁优   前两个是遵循IGP协议的

3 对比IP地址,越大的越优

前两个都比不出来,那就比第三个,更加直接

其实看到这里,明白一个点,

就是可以通过修改AD值 ,或者是metric来修改组播RPF接口的选举,从而影响选路

通过assert 消息对比出来的结果,类mroute表中也会有所体现

Assert winner 对比胜利者

而为什么现在也是PRUNE了呢?

因为我把下面的PC从组中拿掉了,

而R5这边就没有

Assert 最终对比后的动作,

R5由于是输了,会直接 将这个接口Prune掉

而R6,不会马上prune掉接口,会等3S时间,等什么呢?

在等S,G的join消息,如果3S内没有收到该消息,那么就会像上图所示,给prune掉

收到了(S,G)join消息后,马上改变状态为forward状态

说白了就是这么一个过程

再来看一下(S,G)join消息的小例子,来熟悉一下,它在里面的做用

什么意思呢,

其实看图应该就能理解 ,

R1上面的源发送数据到组中,R1会发给R2,R3,

而此时R3下面并没有接收者,肯定会给R1回复一个PRUNE消息的,这没毛病

但是它不是单独回复给R1,而是回复的,是所有运行了PIM的组播路由器都会收到,包括R2,

这倒底有什么用?

假设R2不知道,会发生什么,

R1收到了这个消息,由于下面只有一个接口,那么他将直接将这个接口给PRUNE了,这时做为R2是不是死的很冤?都不知道咋回事儿。

所以规定,在R3发送prune消息时,发送到组播地址,

这样了来,R2也收到了,(R3说。我这边儿没有组成员,修剪了吧)R2一急眼了,(不行,还有我呢,我这边儿有组成员,我需要组播流量)

就这样两个消息到达了R1,

R1先是收到了R3的prune 消息,等待3S,看有没有人发送Join消息,如果有,那么就不修剪,如果没有就修剪 接口

就在此时,R2的(S,G)join消息发过来了,那么这个接口最终被置为forward状态。

【其实对于R2而言,它并不知道实际的网络拓扑是什么样儿的,但它只知道一点,它收到了这个消息,但为什么能收到这个消息呢?因为这个消息在广播域中传递,无法穿越路由器,因为它的TTL=1,所以也就很简单的可以推断出有交换机的存在

Graft /graft ack

由来的组成员所请求的是的组播流量

现在由SERVER 向组发送数据,

肯定是不通的,并且没有人会给它回复,

但是R1收到了这个组播数据,肯定会建立 自己S,G表项

R2也不例外,

但是他们的OIL都是空的,因为就没有真正的组成员需要这些流量

此时让PC申请这个组的流量

会发生什么呢?

PC

Ip igmp join-group

马上R2就会收到report消息,

并且R2会顺着自己的S,G表项的rpf 接口发送一个graft消息给谁呢?给R1

R1收到这个消息后,会马上给予回复,一个graft-ack

其实从抓包中可以看得出来,这个graft 消息就是一个单播的S,G join 消息,只不过就是叫法不同而已 (可以看到单播目标地址)直接发送给rpf neighbor

有去有回,下游请求graft 上游回复graft-ack

小节

到此,应该可以掌握的东西有哪些呢?

1 哪些接口会被prune

2 prune的根源有哪几种?

3 S,G join 消息

4 assert 消息

5 graft/graft-ack消息

*,G的消息只会修改*,G的条目

S,G的消息只会修改S,G的条目

虽然这两个条目,在逻辑上存在着父子的关系,(也就是出接口会复制)但是彼此又是独立的。

dense整理

最后再通过一张图来理解整个dense的过程

首先确认使用的模式为dense,

另外使用的树结构为SPT

源树,最短路径树

一,

1 source 发送组播数据给A.B

2 A收到数据会向外泛洪,B也一样

3 此时C收到组播数据之后,由于有两个RPF 接口,为了避免重复数据,必须要进行RPF校验,只保留一个,(假设最终留下的是A方向的,那么连接B方向的就会被prune)

4 此时recelver 1 发送了IGMP的report 消息,C上也有了*,G的表项,同时也接收到了组播数据,那么这时就行成了S,G的表项,数据得以传递到recelver 1

二,

1 source 发送给播数据,给A,B

2 此时观察recelver 2 ,已经发送了igmp 的report 消息

3 在F上形成了*,G表项

4 从源发出来的数据到达D上,同时也到达了C设备上,

5 此时二人都会发给E ,E 收到了两个,那么这时C,D两台设备就要干架了,

Assert 消息干架,决定最终由谁来进行转发(假设最终由D设备胜利了)那么此时C上的接口就应该被prune ,但是由于C设备下面还有组成员,肯定是不可以被prune的,然后回到E上,E此时将收到的组播数据进行泛洪,到了F,F已经等待多时了,发送S,G的join 消息,顺理成章的接收了组播数据,

而这一路下来的接口状态,OIL 分别是谁,RPF接口又是谁?~有没有想明白?

三,最后的recelver 3 想要接收组播数据,都经过了哪些步骤呢?

这个不妨通过实验来自己验证一下,更加的直观,看看自己分析的对不对,

记住,一定是自己先分析,然后再来配置,

用实验的效果来验证我们的分析结果。

有助于对技术点的理解

------------------------------------

CCIE成长之路  --- 梅利

other os和windows uefi mode_multicast-6 dense-mode - 梅利333相关推荐

  1. Chrome OS与Windows

    1.Chrome OS不是狭义的"OS" Chrome OS并不是全新的操作系统内核,它仍然是基于OS之上的应用软件.从目前的消息来看是基于Linux内核的,但是这并不是说Chro ...

  2. Palm OS、Windows CE及Linux OS之比较

    1 Palm OS与Windows CE的比较 3Com公司的Palm OS是掌上电脑市场中较为优秀的嵌入式操作系统,是针对这一市场专门设计的系统.它有开放的操作系统应用程序接口(API),支持开发商 ...

  3. os系统共享的 不显示计算机,Windows与Mac OS共享文件-windows无法访问指定设备路径或文件...

    大家知道,微软的Windows和苹果的Mac OS是两种不同架构的操作系统.但是,对于用电脑干活的我们来说,其实最终关心的并不是使用什么操作系统,而是如何用这些系统来生成和编辑图.文.声.像等类型的文 ...

  4. 一分钟了解“MAC OS 和 Windows系统的优劣对比”

    先上结论: 如果你需要一台电脑用来写文档和代码,你的工作过程中需要频繁用到不同程序之间的切换(比如工作过程中需要参考网上资料或者其他文献),或者需要频繁在不同文件夹之间操作(复制剪切等),或者需要高效 ...

  5. 微信小程序微信开发者工具常用快捷键(含MAC OS和Windows)以及各种设置

    微信小程序微信开发者工具常用快捷键(含MAC OS和Windows)以及各种设置 最常用的快捷键: 快捷键(含MAC OS和Windows) 设置页打开方式 通用设置 外观设置 快捷键设置 编辑设置 ...

  6. 【UEFI实战】如何在OS下获取UEFI变量

    说明 UEFI变量在BIOS启动过程中创建. 它们有不同的类型,可以直接看属性: /// /// Attributes of variable. /// #define EFI_VARIABLE_NO ...

  7. 【OS基础】UEFI与 Legacy BIOS两种启动模式详解

    uefi和legacy是两种不同的引导方式,uefi是新式的BIOS,legacy是传统BIOS.你在UEFI模式下安装的系统,只能用UEFI模式引导:同理,如果你是在Legacy模式下安装的系统,也 ...

  8. linux桌面环境 mac os,在Windows或Linux桌面上使用Mac OS Dashboard Widget | MOS86

    Windows Vista中引入了 Gadgets,并在Windows 7中继续使用.它们允许您从最新的新闻更新到月球的各个阶段查看各种信息,并在桌面上使用一些有用的实用程序.我们以前写过一个程序,允 ...

  9. QtXlsx第三方库在Mac OS和Windows下的配置及简单使用

    这里是小白一只,为了参与项目,最近自学了一点qt.要求先做一个实现excel导出的小demo,由于还没看到这部分知识的内容,在书里反复查找也没找到确切的内容,所以开始在网上看了很多博客. 了解到 QA ...

最新文章

  1. Cell子刊:粘上你-细菌生长素介导的植物根部细菌定殖
  2. linux apache web服务器
  3. 专访季虎:如何突破瓶颈构建高质量风控系统?
  4. CloudCC CRM探讨如何建立完善的服务体系
  5. 了解java.nio.file.Path – 2
  6. vCenter Converter Standalone使用文档
  7. 前端学习(1801):前端调试之清除浮动练习3
  8. 学习《深度学习入门:基于Python的理论与实现》高清中文版PDF+源代码
  9. 高中计算机编辑程序,高中信息技术信息的编程加工教案
  10. YUV格式简介、YUV444、YUV422、YUV420
  11. android5.0电话录音,用Xpose完美实现电话录音,支持android 8.1.0
  12. ABtest用于推荐系统性能衡量
  13. 杰理之低延时无线麦功能支持以下两种组合配置【篇】
  14. 正则表达式匹配英文和法文
  15. 3D点云的快速分割:自动驾驶汽车应用的LiDAR处理实例
  16. 深度解析dubbo源码系列
  17. 唤醒手腕 - 爆肝 3 天整理出来关于 Opencv 计算机图像处理详细教程(更新中)
  18. C和python中%d %.2d %2d %02d的区别
  19. 【单片机】时钟及温度的显示
  20. linux解压rar

热门文章

  1. 【putty】putty、psftp、pscp【原创】
  2. 卡洛斯·鲁依斯·萨丰的《风之影》
  3. 拉丁猪文字游戏——这是一个英语语言游戏。
  4. NC65 REST接口开发及调试
  5. php hhvm nginx并发,php-Nginx和HHVM始终返回404
  6. EasyGUI-4:选择函数
  7. 精确查询和模糊查询,前端往后端传值
  8. IO流--FileReader和FileWriter简介和使用
  9. 【linux】查看文件目录大小
  10. 蛙泳、自由泳、仰泳、蝶泳,图解动画,教你游泳,不会游的看了包你学会!!!...