组播

更新时间:2024-02-01 22:10:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

Multicast --------------

首先我们来看两个概念,每次说到这有很多朋友就会问我组播和多播的区别,其实这就是一个概念。叫法不一样。

其实像组播我们已经早就涉及到了,在IGP中像rip(v2),ospf,eigrp。它们都是组播更新。 我们接着往下看三个单词,unicast,broadcast,multicast。

那么我们想一个问题首先我们路由更新用单播行不行,以ospf为例它能不能用单播了?答案是肯定可以的,但是为什么不用了,很简单配置太复杂,因为你要像BGP一样去指邻居。那么广播也是可以的,但是我们也不用,因为广播带有受迫性,所有人都要收到这个广播信息,不管你要不要你都要收到,这样会照成网络的一个不安全,还有什么CUP开销啊等等。 那么单播,广播都不能用那么组播的优势就体现出来了。 --

1:首先配置组播不需要配置任何一个neighbor命令,它自动去发,在就是它有一个组的概念(group)。比如ospf 它是组播地址224.0.0.5,你只有加入了这个组你才能识别。像PC收到了这个消息直接lost。

幻灯片上面写的很多多播好处,

2:像一个原多个接收者像视频会议。 3:然后节约带宽。 看下幻灯片吧

上面的是单播我下面有三台主机那么我的原就要发三份信息。而组播我只用发一份就OK了。这样就节约了带宽,而且对于原的也节约了开销。 4:当接收者不知道不知道在哪里的时候,(幻灯片叫接收者未知的情况下),如果你用单播就麻烦了,因为你要指邻居,没有邻居关系什么都做不了,广播发的全网到处都是。组播我直接网这个组法就行了,我根本不需要知道你在哪。 5:同时性,(很简单单播肯定有个先后顺序,多播的话我只需要发送一个包),像比较重要的比如在证券业里面,单播肯定不行。

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

Multicast的缺点:

多播属于UDP,属于数据层面。当你构建了多播后它的流量都是UDP的。但是我们一般多网络进行控制都属于控制层面。

那么在这个地方我首先引出一个概念PIM,他就是我们多播里面的控制层面。多播路由协议。 1:没有ACK。

2:没有拥塞避免机制。这是相对于TCP的滑动窗口来说的。各位还记得滑动窗口是啥意思不?想不起来自己翻原来的笔记。 3:无序的传输,(所以要通过一个RTP来保障)其实前三种问题就是UDP自身的问题 4:多播有可能会照成一个点收到多份,也就是重复报文。(这个以思科官方经典例子来说:用组播命令一辆tank右转90度攻击一个目标,那么收到两份相同的指令效果就不言而喻了吧)

----------------------------------------------------------------------------------------- 多播的应用类型:

1:一对多(一个原然后多个接收者)

2:多对多(视屏会议,自己原和目的来回切换) 3:多对一(城市监控,老式电视里面的画中画)

------------------------------------------------------------------------------------------- 多播专用名词:

First-hop:第一跳路由器

Last-hop:最后一跳路由器,有些书上也翻译为叶子(leaf)路由器,(一棵树它的最末端就是叶子,我觉得老外说的很形象)

这张图基本上描述出了多播的三大块。

那么我们学习多播是从下往上来学习的,先看IGMP(它主要作用是要确定最后一台路由器下面是否有接收者)。

不知道各位还记得ospf协议中还有一个6类的LSA没?它就是ospf来传多播流量。

这张图在老版的TCP/IP中说的比较有意思,等哥把整篇全部看完了书上告诉我们,学完DVMRP,MOSPF,CBT你基本上用不到,那你写上去干嘛了?但是提醒各位同学主要是要把PIM学好,如果各位将来想考ISP的CCIE那么就会用到MBGP。

------------------------------------------------------------------------------------------------- 多播地址:

回忆一下ABC类地址: A:0---127 B:128----191 C:192-----223

D类地址多播地址224.0.0.0---239.0.0.0 我们分析下D类地址和ABC三类区别。

首先在接口上我们可以配置ABC三类地址,但是在接口上是配不上多播地址的,其次ABC三类地址既可以作原,又可以作目的,但是多播地址只能做目的。

这块稍微说下,1和2都好理解,3私网地址,这个和我们ABC三类地址一样的,可以在下面私下的用但是不能和公网组播地址互通。 1 :保留的我们经常用,224.0.0.0/24 224.0.0.1/24 代表所有的主机和路由器。

224.0.0.2/24 代表所有的路由器,PC这会就不认识了。 224.0.0.(5和6/)24 OSPF协议 224.0.0.9/24 rip版本2协议 224.0.0.10/24 eigrp协议

224.0.0.13/24 PIM发送组播hello包地址 -----

2 :224到238公网里面有两块已经是被固定下来了,分别是SSM(制定原多播,这是一种协议,这种协议是PIM的一种高级协议,各位对ISP的IE感兴趣就去看看吧,我们这就不多说了,它的地址是232.0.0.0/8)。另外一种是GLOP地址是233.0.0.0/8(其实GLOP很有意思当我们申请一个AS号那么就会附送一段多播地址,亲!买一送多哦)。算法是这样滴哥教你们:比如你申请的 AS 65123=0xFE 63(转16进制)

254 99(然后分别把FE和63从16进制转成10进制)

结果就是233.254.99.0/24 。那么你申请的AS 65123送你多播地址就是233.254.99.0/24 -----

3:私网239.0.0.0/8。私网地址就没啥好说了。

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

IGMP--internet group management protocol 路由器和PC之间通信的。

版本有三个V1 V2 V3。重点是V2 -------

这张幻灯片我找了你好久好久,在此杨老师非常鄙视某些网站为了赚取利润把组播以及BGP还有IPV6等等幻灯片里面的内容大幅删减,然后想达到加价卖完整版的目的。

V1只有两种报文,一种查询包,另一种回应报告包。

查询包一般都是每60秒发一次,都是路由器向下发送查询组播地址是224.0.0.1。 TTL=1也就是只能在本链路上可以传。

报告包,PC报告路由器我可以加入某个组。然后回应224.1.1.1。

PC的这个回应包,有两点好处,就是这个多播地址不仅让本组的路由器知道也让其他PC知道。也可以让其他的组内PC抑止掉其他组传过来的查询报文。回应包一般是10秒时间。 Report报文两个具体的用途,首先充当一个ACK,再就是主动告诉路由器,PC这会加入到哪个组。(看下面的PPT)

还有一个消息要说就是。leaving a group消息,IGMP v1我们也称为静悄悄的离开,180秒内只要组内没有回应消息路由器就不会再理会这个信息,没有表象。其实这种不好。 Cisco原版PPT是这样解释的: 1路由器周期性的发送查询包。

2然后PC就回应一个report报文。这个回应报文两个意思1ACK、2主动发起者,让路由器得知哪个组员知道了。

------------------ IGMPv2

针对v1,v2增加了两个包1指定组查询包,2多了离开组报文。加上V1的两个包一共是4个包。

在v2里面有个概念就是querier:查询者

在网络中有多台路由器属于“最后一跳”发送查询的时候,v2版本,查询包IP地址较小的一台发查询。

V1版本(PIM,DR充当查询者)

最后一跳只有一台路由器的时候查询包每60发送一次,PC如果在180秒时间里面没有回应我就会认为下面没人了,这个180秒为holddown时间。

最后一跳有多台路由器的时候,无问题的情况下是由查询者发查询包,也是每60秒发送,120秒时间内非查询者收不到查询者的查询包那么我就确定查询者down了,我这会开始转发查询。

---------------------------------------------------------------------------- 好我们来看一个简单的多播实验,

R1 和R2为最后一跳路由器,PC3为接收者。 首先要让两台路由器能够发多播。 r1(config)#ip multicast-routing r2(config)#ip multicast-routing

然后两台路由器的接口上要同时运行一个PIM协议模式(现在各位先 不管什么PIM) r1(config)#interface fastEthernet 0/0 r1(config-if)#ip pim sparse-mode r2(config)#interface fastEthernet 0/0 r2(config-if)#ip pim sparse-mode ----

PC3模拟成接收的组:224.1.1.1/24 pc1(config)#interface fastEthernet 0/0

pc1(config-if)#ip igmp join-group 224.1.1.1 -----

1 好配置完毕后去R1上查看

这会R1为查询者,发送的都是版本2,查询周期是60秒,查询者挂了的时间为120秒,回应时间为10秒。123.1.1.1/24也就是R1自己是查询者。 2 PC1加入到这个组我们看?

3 然后把所有的debug信息全部打开,debug ip igmp,去PC上关闭看离组消息。 pc1(config-if)#no ip igmp join-group 224.1.1.1 首先PC上

会出现一个离组消息。

然后再R1上会出现两个消息。

一个是PC的离组消息,然后R1把超时时间至于2秒内,2秒内查询消息没有回应那么我就认为这个组挂了。

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

好我们接着往下看,V3版本多了一个源信息,假设源的信息来自多个,那么PC作为接收方我可以自己选择。

---------------------------------------------------------------------------------------------------------------- 二:2层组播地址

2层组播地址和自身的问题是很容易理解,我们回顾下NA的知识就行了,交换机在收到多播和广播的情况下都会给本VLAN泛洪。这样一些不愿意收到此类信息的PC也都要收到了。 ----------------------------

两个技术解决这个问题:igmp snooping(igmp的窥视---公有) Cisco group managament protocol(CGMP---思科私有) -----------------------------

igmp snooping做法简单一些只需要在交换机上启用就行了。 Cgmp 需要在路由器和交换机上都要做。 ----------------------------

好我们现在看snooping,首先我们看交换机默认来说是不会拆开三层信息的,那么snooping就是拆掉了三层信息。简单的说交换机截获PC发上来的igmp端口的report报文,然后做端口和多播地址的对应表象。

当我们全部配置完毕后我们可以在交换机上查看到PC组播对应的接口信息,很可惜这是杨老师在真实机上截下来的,而我们的虚拟设备上没有这个命令。

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

CGMP:思科私有协议,当有些交换机不能直接拆三层怎么办,如果是个二层交换机怎么办那么这会就要用CGMP了,(思科这个技术很狡猾看上去是解决了些低端二层设备的组播问题但是作为用户有可能要为此多买设备)。

当低端的二层设备收到PC传上来多播信息,那么直接上传给路由器,这会路由器就会发CGMP报文,这个报文头部直接封装2层信息传给交换机,这会交换机就能明白PCmac和组播目的mac的对应关系了。

------------------------------------------------------------------------------------------------------------------- 多播转发:

说到多播转发首先就要看它和单播的一个区别,单播路由表指的是这个信息如何离去,多播路由表指的是这个信息是如何进来。

一个路由器收到多播报文只能有一个接口。

那么我们如何确定这个数据包从哪里进来,靠的就是反方路径转发(RPF)。 RPF校验,

多播流量传下来和我单播返回信息的接口不一样那么RPF的校验就失败了看张图。

这个图说的很清楚,多播流量是从S0口传下来的,但是下面路由器和上层原通信是从S1口走的,也就是下来和回去的路径不一样,这样RPF校验就失败了。

我们再换一种方式去想想,当S1,S0,S2口都发了多播流量那么谁是RPF转发接口了?很明显S1口,其他接口收到这个多播信息直接就丢弃,只有S1口收进来,然后从E0口发出去。

接下来我们再看一个图。

这就是RPF接口的选举规则。扩展下如果运行OSPF的话那么信息会从E0口走,那么这会FR这边就不会走任何信息,我们可以规定一些组的信息走FR,达到负载分担的效果。

实际做法:第一通过改metric值可以搞定。

第二写多播静态路由,它的目的仅仅只是让你选择一个RPF接口,不做多播转发。

“注意 这个地址写的是源地

址,一定要和我们原来的静态路由写法要区分开来”。 那么静态多播地址的AD是多少了?

是0。

这个命令一旦写上那么就会从S0口走,因为S0口的AD是0。

基于目标组来做负载分担,这个就做不了了,再次申明它只选择RPF接口,我们后面会做PIM可以搞定。--------再啰嗦一句做多播的时候IGP一定要通。

---------------------------------------------------------------------------------------------------- 讲下multicast的树形结构。 1:源树,也就是spt最短路径。 2:共享树,RPT

原树,最短路径树====一个源一棵树。

这是原1的。源树的好处就是每个源一棵树并且是路径最短。坏处就是多个源就会多颗树,每台路由器上面都要保留S(源),G(目的)信息,对路由器的内存开销太大,网络大了就问题多了。其实啊 这个就是我后面会说到的dense模式。一会讲大家别急~~~。 共享树,RPT

我们在网络中找见一个集合点。

这个图上D就是RP也就是集合点,那么我们的源1和源2都是先发像RP。然后由RP向下发多播流量。

那么针对最后一跳路由器来说C和E 来说我们不知道源在哪里,但是我们知道组。那么C和E上只会有*和G。

其实还有一个问题就是源到达最后一跳路由器的路径不见得是最优的,我们在PIM解决。 这个图是源树和共享树的结合属于spare模式。

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

终于到PIM了,不容易啊。

PIM(protocol independent multicast--协议无关的多播,这个协议指的是IGP协议)

两种模式,sparse稀疏模式 Dense密集模式 ----------------

先看一个dense模式,这个比较简单我们先看。 原理很简单就是push(推),当在网络中有很多接收者,就是我的这个路由器先把这些多播信息全部推下去,我不管你接收者在哪。 Dense模式------push------源树spt。

这张图就是标准的push模式,左边的源这会不知道接收者在哪里,那么我就把组播流量全部推下去。

有些路由器下面没有接收者然后就有一个prune (修剪)信息回传给源。

当源向下推所有信息的时候只有下面的路由器才能收到report,上面的不会收到,也就是没有组员,但是他会周期的3分钟时间再发。密集模式哥总结一句话就是“先泛洪后修剪”。

原来我们讲过hello的时间和死亡时间的对应关系一般都是3倍hello时间,ospf特例是4倍hello时间,PIM更加特殊是3.5被的时间也就是105秒。 选举DR方式先看优先级较高的,在看IP地址较高。

优先级DR调高这个地方是可以抢占的,S代表可以更新,默认都是S最常见。B属于高级的PIM协议,双向PIM。

N早期的路由器根本就没有hello优先级那么会用N代表。 -------------------------------------------------------- 通过实验来看dense:

R1和R5模拟成PC,R1为源R5为目的。

多播源为224.1.1.1。然后把pc5加入到这个组。

好开始实验:先运行IGP,因为RPF要校验。

12,,23,36,34,都要宣告进IGP,45网段不需要宣告进IGP因为我们可以直接在pc5上指网关(45.45.45.1)就行了。 做完IGP后我们在PC5上 ip default-gateway 45.45.45.1 接口上interface Serial1/0

ip igmp join-group 224.1.1.1(把PC5加入到224.1.1.1.这个组) 剩下的R2,R3,R4,R6上运行 ip multicast-routing 打开多播模式 interface Serial1/0

ip pim dense-mode运行PIM里面的dense模式。(友情提示R2的S1/0口和R4的S1/1口一定要加入不然多播就不会传下去也不会有report传上来) 当全部做完后我们去R3上查看。Show ip pim neighbor 会发现R6是DR,原理很简单和ospf一样的, “优先级如何改,

interface FastEthernet0/0 ip pim dr-priority 3”

改完后在R6上查看会发现R3是DR了。 也可以查看 show ip pim interface

r3#sh ip pim interface

Address Interface Ver/ Nbr Query DR DR Mode Count Intvl Prior

23.23.23.2 Serial1/0 v2/D 1 30 1 0.0.0.0 34.34.34.1 Serial1/1 v2/D 1 30 1 0.0.0.0 36.36.36.1 FastEthernet0/0 v2/D 1 30 3 36.36.36.1 看下多播接口信息。

最后我们去PC1上测试下ping 224.1.1.1这个组播地址。

要是在PC1上看见这个结果就代表组播通了,大家可以看当我ping224.1.1.1的时候是有一个45.45.45.2回应的,这个地址其实就是PC5.(多播默认只ping一个包)。 这个要是OK啦我们就让PC1一直ping 224.1.1.1 repeat 999 然后去R2:

这是一个重点,我们第一次看多播路由表,留意接口的模式dense。然后留意多播流量从哪些接口发进来,从哪些接口发出去。但是我们发现上面有个问题运行的是dense模式那么只有S *G,为什么会有* G,大家不要慌这其实是一个规范而已,只要是运行一个源树就会立即生成一个共享树,只不过这个共享树是不会做多播转发的。

-------------------------------------------------------------------------------------------------------------------- Sparse稀疏模式:

Sparse--pull---spt模型和RRT模型(源树和共享树)sparse模式是一种源树共享树来回切换的模式。

拉流量,简单说,我这下面有组员我的多播流量才会下来,我下面没有组员多播流量就不会下来。

Sparse模式的配置方式其实比较简单。

首先刚才所有做了ip pim dense-mode接口上改成ip pim spares-mode就行。 然后做RP。方式一共三种。 1、Static

2 auto-RP(思科私有,类似于IGP自己学习) 3 BSR (各位到ISP 的CCIE再说吧) ---------

第一种静态指RP。

R3指为RP:那么就直接用R3上的回环接口为RP,还有要把R3的环回口通告到IGP协议

中,原因很简单最好不用真实接口。 接着r3(config)#ip pim rp-address 3.3.3.3 r2(config)#ip pim rp-address 3.3.3.3 r6(config)#ip pim rp-address 3.3.3.3 r4(config)#ip pim rp-address 3.3.3.3 --------------------------------------------

做完这个后我们可以发现其实R3----R4----R5之间的共享树已经形成。那么我们去所有路由器上清理一下#clear ip mroute * 再去R3上查看:

上面是打S的,也就是sparse。而且已经有组源了从S1/1接口走。 然后在PC1去ping224.1.1.1

-接着

然后我们去看多播路由表。

然后我们去第一跳路由器R2查看

R3上查看

这点和dense完全不一样,dense里面outgoing是全部列举出来,而sparse模式出接口只有一个。这个它们的原理是同理的。这会我们想想dense下面如果有很多出口那么在路由器上还是非常消耗资源的。而sparse模式显示的接口只有下面有report信息才会显示。

本文来源:https://www.bwwdw.com/article/nhfw.html

Top