路由器模块二十三 组播.docx
《路由器模块二十三 组播.docx》由会员分享,可在线阅读,更多相关《路由器模块二十三 组播.docx(15页珍藏版)》请在冰豆网上搜索。
![路由器模块二十三 组播.docx](https://file1.bdocx.com/fileroot1/2023-7/3/66ec8fe3-6027-4b99-a8fa-1f43e35ccda2/66ec8fe3-6027-4b99-a8fa-1f43e35ccda21.gif)
路由器模块二十三组播
模块二十三组播
随着网络中的视频等应用越来越多,组播也越来越时髦。
路由器转发组播流的方式和转发单播流有很大的差别,发送数据的源不知道接收者在何处。
组播也有很多路由协议,它们为组播流建立一棵无环路、无重复流量的转发树。
本模块将介绍常用的、简单的两个协议:
PIMdense和PIMsparse。
第一讲组播简介
当有10000个用户通过网络看电视时,如果分别为每个用户传输一路流量,不仅服务器受不了,网络也承载不了。
组播(也称多播)则像电视一样,传输一份数据,需要接收数据的计算机加入到这个组就行了。
虽然组播配置并不复杂,但理论知识则相当复杂。
组播采用224.0.0.0--239.255.255的地址,不同地址就是不同的组,一个组可能有多个源,而需要接收数据的设备是这个组的成员。
路由器转发组播流的方式和转发单播流有很大的差别,发送数据的组播源不知道接收者在何处。
保证接收者能收到数据,并且数据不会在不必要的网络上存在是很重要的事情。
路由器必须为组播确定出一条转发路径。
路由器采用反向路径转发(RPF),即对每个接收到的组播进行源地址测试,如果数据是从到达源的接口上接收到的,就往下游路由器转发。
为了确定是否应该往某个网络转发组播流,路由器使用IGMP(InternetGroupManageProtocol)和主机之间通信,确定这个网络是否有某个组的成员。
IGMP有V1、V2、V3,目前IOS采用V2。
IGMP有各种消息,例如:
MembershipQuery消息、MembershipReport消息、LeaveGroup消息、GeneralQuery消息、Group-SpecificQuery消息等。
1、PIM(ProtocolIndependentMulticast)是一个组播路由协议,独立于协议的意思是该组播协议不关心单播路由是通过RIP还是OSPF或者其他方式学习到的。
PIM有两种模式:
PIMDense和PIMSparse,后者通常和Dense结合使用,成为PIMSparse-Dense。
2、Dense通常用于组成员比较密集的网络中。
在Dense模式中,当有组播源出现时,路由器假设所有的网络都有组成员,构建了一棵从源开始的转发树,全部网络就都有了组播流量。
然而各个路由器会紧接着查询自己的接口上是否有这个组的成员存在,如果没有成员,将停止往这个接口转发组播流。
如果路由器上一个成员都没有,它将向上游路由器发送消息,把它从转发树上修剪掉。
一级一级地往上发送消息,最终多播路由协议将构建一棵以源为根、不会有多余组播流量存在的转发树。
如果有新的成员加入,路由器将一级一级往上发送消息,建立转发路径。
在Dense模式中,会为不同的源建立不同的树,这样树的数量可能会很多。
3、Sparse则通常用于组成员比较稀疏的网络中。
在Sparse模式中,路由器假设所有的网络都没有组成员,除非有主机明确表示加入该组。
转发树的建立从终端的叶节点组成员开始,向后扩展到中心的根节点上。
和Dense模式不同,Sparse是基于共享树的。
也就是说某个组的流量是先发送到中心节点上(称为RP),然后在从RP转发到各个组成员上的。
组成员加入到这个组时,本地路由器向RP发送成员报告,沿途的路由器将树枝加入到共享树中。
组成员从组中退出时,才执行修剪。
这样好处是树的数量少,然而可能造成一些组播数据绕了一圈才到达主机。
因此,实际上默认时,当路由器发现不是从到达源的最佳路径的接口上收到组播流,会自动切换到基于源的树。
Sparse模式中,我们可以手工为某个组指定RP,也可以让路由器自动选举。
要注意的是,路由器自动选举RP时发送的是组播流量,由于RP还没出现,所以只能使用Dense模式传输这些组播流量,所以Sparse通常和Dense结合使用。
而对于交换机,也不能说从一个接口收到组播,就防洪到全部接口。
然而交换机并没有IGMP协议和主机通信,交换机采用2种方案,一种是IGMPSnopping,另一种是CGMP。
IGMPSnopping中,交换机监听主机和路由器之间的IGMP消息,从而确定出哪个接口上有什么组的成员存在,组播流则从这些特定的接口发送出去。
在2层交换机或者低端的三层交换机上,IGMPSnopping基本是默认采用的。
而CGMP协议则是交换机用来和路由器进行通信,从路由器获得组的成员名单,从而确定哪些接口应该转发哪些组的流量。
第二讲实验1:
PIMDense
1.实验目的
通过本实验,读者可以掌握如下技能:
(1)理解PIMDense的工作原理。
(2)掌握PIMDense的配置。
2.实验拓扑
图23-1实验1、实验2拓扑图
拓扑中R2的g0/0接口以及PC1也是接在交换机S1上的,我们把这两个接口单独划分在一个VLAN中。
图23-1没有画出它们和S1的连接情况。
3.实验步骤
(1)步骤1:
配置IP地址、把R2的g0/0和PC1所接的交换机接口单独划在一个VLAN各路由器的IP如图23-1所示,在每个路由器上创建环回口Loopback0,配置IP地址。
把R2的g0/0所接的f0/2和PC1所接的f0/5接口单独划分一个VLAN,如下:
S1(config)#vlan2
S1(config)#intf0/2
S1(config-if)#switchmodeaccess
S1(config-if)#switchaccessvlan2
S1(config)#intf0/5
S1(config-if)#switchmodeaccess
S1(config-if)#switchaccessvlan2
(2)步骤2:
配置路由协议。
R1(config)#routerrip
R1(config-router)#network1.0.0.0
R1(config-router)#network192.168.12.0
R1(config-router)#network192.168.134.0
R2(config)#routerrip
R2(config-router)#network192.168.12.0
R2(config-router)#network192.168.23.0
R2(config-router)#network192.168.2.0
R2(config-router)#network2.0.0.0
R3(config)#routerrip
R3(config-router)#network192.168.23.0
R3(config-router)#network192.168.134.0
R3(config-router)#network3.0.0.0
R4(config)#routerrip
R4(config-router)#network192.168.134.0
R4(config-router)#network4.0.0.0
(3)步骤3:
配置PIMDense。
R1(config)#ipmulticast-routing//以上是启用组播路由功能
R1(config)#intloopback0
R1(config-if)#ippimdense//组播的配置相当简单,在接口上运行pimdense协议即可
R1(config)#ints0/0/0
R1(config-if)#ippimdense
R1(config)#intg0/0
R1(config-if)#ippimdense
R2(config)#ipmulticast-routing
R2(config)#intloopback0
R2(config-if)#ippimdense
R2(config)#ints0/0/0
R2(config-if)#ippimdense
R2(config)#ints0/0/1
R2(config-if)#ippimdense
R2(config)#intg0/0
R2(config-if)#ippimdense
R3(config)#ipmulticast-routing
R3(config)#intloopback0
R3(config-if)#ippimdense
R3(config)#ints0/0/1
R3(config-if)#ippimdense
R3(config)#intg0/0
R3(config-if)#ippimdense
R4(config)#ipmulticast-routing
R4(config)#intloopback0
R4(config-if)#ippimdense
R4(config-if)#ipigmpjoin-group237.0.0.1
//该接口加入到237.0.0.1组中,我们要利用237.0.0.1组做测试
R4(config)#intg0/0
R4(config-if)#ippimdense
(4)步骤4:
检查pim邻居、测试组播路由。
R1#showippimneighbor
PIMNeighborTable
Mode:
B-BidirCapable,DR-DesignatedRouter,N-DefaultDRPriority,S-StateRefreshCapable
NeighborAddressInterfaceUptime/ExpiresVerDRPrio/Mode
192.168.12.2Serial0/0/006:
57:
59/00:
01:
27v21/S
192.168.134.3GigabitEthernet0/006:
25:
46/00:
01:
29v21/S
192.168.134.4GigabitEthernet0/006:
25:
46/00:
01:
24v21/DRS
//以上显示了R1上pim邻居
在PC1上配置IP地址,执行“ping-t237.0.0.1”,这时PC1实际上就是组237.0.0.1的组播源了。
在各个路由器上检查多播路由表:
R2#showipmroute
(此处省略)
(*,237.0.0.1),00:
03:
07/stopped,RP0.0.0.0,flags:
DIncominginterface:
Null,RPFnbr0.0.0.0
Outgoinginterfacelist:
Serial0/0/1,Forward/Dense,00:
03:
07/00:
00:
00
Serial0/0/0,Forward/Dense,00:
03:
07/00:
00:
00
(192.168.2.100,237.0.0.1),00:
03:
07/00:
02:
52,flags:
TIncominginterface:
GigabitEthernet0/0,RPFnbr0.0.0.0
//以上表明R2是从g0/0接口接收到多播流的
Outgoinginterfacelist:
Serial0/0/1,Forward/Dense,00:
03:
08/00:
00:
00
Serial0/0/0,Prune/Dense,00:
01:
09/00:
01:
50
//可以看到R2上只往s0/0/1接口转发多播流量;s0/0/0接口不转发,处于被修剪状态。
(*,224.0.1.40),06:
49:
33/stopped,RP0.0.0.0,flags:
DCLIncominginterface:
Null,RPFnbr0.0.0.0
Outgoinginterfacelist:
Serial0/0/1,Forward/Dense,06:
49:
33/00:
00:
00
Serial0/0/0,Forward/Dense,06:
49:
33/00:
00:
00
【技术要点】
需要仔细观察组播树的情况。
在各个路由器上使用“showipmroute”命令,应该可以看到:
组播数据从R2的g0/0接口接收到,从s0/0/1接口转发出去到达R3的s0/0/1,s0/0/0接口则不转发;R3从s0/0/1接口收到组播,从g0/0接口转发出去到达R4的g0/0;R4从g0/0接口收到组播,从loopback0接口转发出去。
把R1上的loopback0接口也加入到组237.0.0.1中,重新在R2上检查多播路由表。
如下:
R1(config)#intloopback0
R1(config-if)#ipigmpjoin-group237.0.0.1
R2#showipmroute
(此处省略)
(192.168.2.100,237.0.0.1),00:
10:
21/00:
02:
58,flags:
TIncominginterface:
GigabitEthernet0/0,RPFnbr0.0.0.0
Outgoinginterfacelist:
Serial0/0/1,Forward/Dense,00:
10:
22/00:
00:
00
Serial0/0/0,Forward/Dense,00:
00:
03/00:
00:
00
//可以看到R2上的s0/0/0接口开始转发数据了,原因在于R1上有组成员了。
可见PIMDense会根据组成员的加入或者退出,动态地维护转发树。
(此处省略)
R1#showipmroute
(此处省略)
(192.168.2.100,237.0.0.1),00:
10:
44/00:
02:
59,flags:
LTIncominginterface:
Serial0/0/0,RPFnbr192.168.12.2
Outgoinginterfacelist:
Loopback0,Forward/Dense,00:
02:
25/00:
00:
00
GigabitEthernet0/0,Prune/Dense,00:
01:
43/00:
01:
16
//可以看到R1上的g0/0处于修剪状态,因为R3已经往192.168.134.0/24网段转发数据了,这样该网段才不会有2份组播流量。
(此处省略)
R3#showipmroute
(此处省略)
(192.168.2.100,237.0.0.1),06:
42:
14/00:
02:
58,flags:
TIncominginterface:
Serial0/0/1,RPFnbr192.168.23.2
Outgoinginterfacelist:
GigabitEthernet0/0,Forward/Dense,00:
13:
21/00:
00:
00,A
//可以是看到R3在往192.168.134.0/24网段转发数据。
(此处省略)
【注】在PC1上停止ping,在各个路由器上查看多播路由表,各个路由器的多播路由表在大约3分钟后会消失。
这是因为没有了源,路由器无需再维护这些路由表了。
(5)步骤5:
查看IGMP组成员。
R1#showipigmpgroups
IGMPConnectedGroupMembership
GroupAddressInterfaceUptimeExpiresLastReporterGroupAccounted
237.0.0.1Loopback000:
15:
1400:
02:
481.1.1.1
//这是我们用命令加入的成员
224.0.1.40GigabitEthernet0/000:
28:
0700:
02:
50192.168.134.4
224.0.1.40Serial0/0/007:
30:
07stopped192.168.12.1
//以上是查看R1上各个接口上各组有什么成员存在。
(6)步骤6:
配置、检查IGMPSnooping。
IGMPSnooping是在交换机上工作的。
默认时就已经启用,也可以用以下命令打开:
S1(config)#ipigmpsnooping
S1#showipigmpsnooping
GlobalIGMPSnoopingconfiguration:
-----------------------------------IGMPsnooping:
Enabled
IGMPv3snooping(minimal):
Enabled
Reportsuppression:
Enabled
TCNsolicitquery:
Disabled
TCNfloodquerycount:
2
LastMemberQueryInterval:
1000
Vlan1:
--------
IGMPsnooping:
Enabled
IGMPv2immediateleave:
Disabled
Explicithosttracking:
Enabled
Multicastrouterlearningmode:
pim-dvmrp
LastMemberQueryInterval:
1000
CGMPinteroperabilitymode:
IGMP_ONLY
//以上是显示交换机上的IGMPSnooping运行情况
S1#showipigmpsnoopinggroups
VlanGroupTypeVersionPortList
-------------------------------------------------------------
1224.0.1.40igmpv2Fa0/1,Fa0/3,Fa0/4
//f0/1、f0/3、f0/4接口上有224.0.1.40组的成员存在,则应该往这些接口转发224.0.1.40的多播流,其他接口不转发,节约了带宽。
第三讲实验2:
PIMSparse-Dense
1.实验目的
通过本实验,读者可以掌握如下技能:
(1)理解PIMSparse-Dense的工作原理。
(2)掌握PIMSparse-Dense的配置。
2.实验拓扑
如图23-1。
3.实验步骤
在实验1基础上继续本实验。
(1)步骤1:
配置PIMSparse,采用静态RP。
R1(config)#intloopback0
R1(config-if)#ippimsparse-dense//在接口上运行pimsparse-dense协议即可
R1(config)#ints0/0/0
R1(config-if)#ippimsparse-dense
R1(config)#intg0/0
R1(config-if)#ippimsparse-dense
R1(config)#ippimrp-address3.3.3.3
//以上静态配置R3为RP。
R1(config)#ippimspt-thresholdinfinity
//以上是防止从基于RP的树切换到基于源的树,默认是切换的,稍后介绍树的切换问题。
R2(config)#intloopback0
R2(config-if)#ippimsparse-dense
R2(config)#ints0/0/0
R2(config-if)#ippimsparse-dense
R2(config)#ints0/0/1
R2(config-if)#ippimsparse-dense
R2(config)#intg0/0
R2(config-if)#ippimsparse-dense
R2(config)#ippimrp-address3.3.3.3
R3(config)#intloopback0
R3(config-if)#ippimsparse-dense
R3(config)#ints0/0/1
R3(config-if)#ippimsparse-dense
R3(config)#intg0/0
R3(config-if)#ippimsparse-dense
R3(config)#ippimrp-address3.3.3.3
R4(config)#intloopback0
R4(config-if)#ippimsparse-dense
R4(config)#intg0/0
R4(config-if)#ippimsparse-dense
R4(config)#ippimrp-address3.3.3.3
(2)步骤2:
测试组播路由。
在PC1上执行“ping-t237.0.0.1”,在各个路由器上检查多播路由表:
R1#showipmroute
(此处省略)
(*,237.0.0.1),07:
31:
41/00:
02:
59,RP3.3.3.3,flags:
SCLIncominginterface:
GigabitEthernet0/0,RPFnbr192.168.134.3
【注】可以看到R1是从g0/0接口接收到组播流的,原因在于RP是R3,而从R1到达R3,从g0/0是最近的。
这时,组播流实际上是从PC1到R2,再到R3(RP)上,然后从R3的g0/0再到R1的g0/0接口,很显然绕了一圈,这是不合理的。
【技术要点】
在基于RP的树中,组播数据是先从源到达RP的,然后从RP到达各个组成员。
从RP到达各个组成员的数据转发是根据共享树的构建情况来转发;而从组播源到达RP的组播流的转发实际上也需要一棵树,这时采用是基于源的树。
(3)步骤3:
从基于RP的树切换到基于源的树。
R1(config)#noippimspt-thresholdinfinity
【注】以上是允许从基于RP的树切换到基于源的树,实际上这是默认值,在步骤1中被我们修改了。
R1#showipmroute
(此处省略)
(*,237.0.0.1),07:
36:
48/00:
02:
58,RP3.3.3.3,flags:
SJCLIncominginterface:
GigabitEthernet0/0,RPFnbr192.168.134.3
Outgoinginte