Multicast
为什么使用组播:
使用相同的数据包发往不同的接受者
更加有效的节省了带宽
节约主机和路由器的CPU资源
使用组播不需要知道接收者的IP地址
多个接收者同时接收相同的报文(用于股票)
组播的缺点:
基于UDP(数据层面)PIM
提供尽力而为的传输
没有拥塞防止
重复报文
传递乱序
组播的使用:
One to many :视频会议
Many to many
Many to one
组播动态协议:IGP {PIM MOSPF(6类LSA)}
EGP{MBGP MSDP}
组播地址:224.0.0.0 --239.255.255.255 (首字节为 1 1 1 0)
注意:组播地址没有子网掩码,或者说都是/32位的
组播地址的类型:
被保留 224.0.0.0---224.0.0.255
224.0.0.1 :发给同一个广播域内的所有PC和路由器
224.0.0.2 :发给同一个广播域内的所有路由器
224.0.0.5 :OSPF
224.0.0.6 :OSPF
224.0.0.9 :RIPv2
224.0.0.10:EIGRP
224.0.0.13:PIM
公网组播地址:(IANA)
224.0.1.0――238.255.255.255
232.0.0.0――232.255.255.255(SSM范围,可以修改)
233.0.0.0――233.255.255.255(GLOP,买AS送组播地址)
注意:ASM:不管源是谁,只要地址正确就发
SSM:指定源组播
私有组播地址:
239.0.0.0――239.255.255.255
IGMP:四层协议
载荷:帧头 IP IGMP FCS 注意:对应的上层协议号为2,ICMP为1
IGMPv1:
1.组播成员自主查询 Query (60s一次更新,hold time=180s)
2.组播成员自主发送 Report
载和: 版本 Type 保留 校验和
组地址
Report的作用:1:ACK
2:主动加组
注意:IGMPv1使用PIM的DR来解决重复报文
IGMPv2:
四个报文:
1.组播组成员自主查询
2.组播组成员自主应答
3.指定组查询
4.离组报文
注意:为实现冗余,有多个最后一跳路由器
查询者选举的原则:比较最后一跳路由器连接下游网段的接口IP地址,谁的地址小,谁就充当查询者,备份路由器等待(120s)
路由器收到离组报文(做两件事)
1.把关联接口的 IGMP表象中的超时时间从180s改为2s
2.通过这个接口发送指定组查询报文 (目的:224.1.1.1 group:224.1.1.1)
配置命令:
R1(config)#ip multicast-routing (把路由器开启成为组播路由器)
R1(config)#int f0/0
R1(config-if)#ip pim sparse-mode (模式后边详解)
注意:交换机上启用组播:ip multicast-routing distributed
查看命令:
R1#sh ip igmp int f0/0
R1#sh ip igmp groups
IGMPv3:
不仅可以指定源,PC还可以选择从哪个服务器接收
R1(config)#int f0/0
R1(config-if)#ip igmp version 3 (启用IGMPv3,默认为2,所有设备都要开启,包括PC)
组播IP到组播MAC地址的映射:01-00-5e(第25位为0)
映射法则:提取组播IP地址中后23位转换为16进制,填入到 01-00-5e-后面(因为第25位为0)
注意:前24位(OUI)永远不会变
防止交换机泛洪:
1.IGMP snooping:窥探
2.CGMP
3.IGMP proxy :代理,需要高级的交换机
注意:这三个基本都快过时
IGMP snooping:建议使用3560以上的三层交换机。二层严重影响传播速度,因为二层交换机拆三层地址需要使用CPU
show ip igmp snooping groups
no ip igmp snooping (关闭窥探,默认是开启的)
CGMP配置命令:
1.路由器连接交换机接口上:igmp
2.交换机上全局模式:CGMP
RPF校验:
一台路由器收到了一个组播信源发送的组播流量,当路由器收到了该组播流量,会提取3层报头源IP地址,并且在其单播路由表内查找是否拥有去往信源所在网段的单播路由条目,如果没有,则该路由器对于该组播信源没有RPF接口,报文直接在接收接口被丢弃。如果该路由器路由表内拥有去往该信源所在网段的单播路由,则查看该路由器对应的出战接口和接收该报文的接口是否为同一个接口,如果是,则转发该报文,如果不是,则丢弃该报文
目的:防止重复报文,解决路由环路
RPF遇到负载均衡,出战接口IP地址越大,该接口越有可能成为RPF接口,一台路由器对于一个RPF信源,有且只有一个RPF接口
组播静态路由:
ip mroute x x x x mask x x x x inter f0/0
show ip mroute static (不能转发流量,只能确定RPF接口,AD=0)
PIM
Source-rooted:源树/最短路径树(SPT) Dense mode :密集模式
Shared-trees :共享树/RPT树 Sparse mode :吸收模式
注意:单播是先有路由表象,然后开始传递路由,而组播中当都启用密集模式后只是两者之间建立邻居,只有数据层面的流量过来的时候才会生成组播路由表,开始传递路由(跟单播刚好相反)
SPT总结:
1.一个信源对应一棵树
2.从源到达目的的树距离最短
3.伴随着网络的增大,树源增多,每台路由器表象增大(S,G)占有大量路由器资源
RPT树:
所有信源先把报文发送到一个共享点,然后再由共享点发给目的地。从共享点到目的地的路由器并不关心信源所在地,所以生成(*,G)表象,而从信源到共享点依旧使用的是源树,使用表象(S,G)
PIM:(v1,v2)
四层协议:载和―― 帧 IP PIM FCS (对应的上层协议号13)
邻接关系:
发送hello ,地址为224.0.0.13,30s发送一次,hold time=30x3.5=105s
运行PIM后路由器接口的工作改变:
1.对于第一跳路由器的接收组播流量接口,如果该接口没有启用PIM,则无论收到的是什么组播报文,都会本地拆包丢弃
2.对于最后一跳路由器连接接收者所在网段的接口,如果该接口没有启用PIM,则路由器不会周期性的发送IGMP的Query报文
3.对于中间路由器,彼此互连的物理接口,如果没有启用PIM,这些路由器不会通过任何接口转发任何报文
注意:PIM应该在整个域内的物理接口启用
Dense Mode(密集模式):
DM-Push-SPT工作模式
初始时,信源会把流量泛洪到整个域内,而没有接收者的路由器会向给它泛洪的流量的路由器返还一个Prund,80s和内该报文有效,180s过去后,流量会继续泛洪
show ip pim neighbor
show ip mroute
clear ip mroute
Sparse Mode(吸收模式)
SM-Pull-RPT+SPT
先检测到有接收者,信源才会开始传播流量
配置:
全局:ip pim rp-address 1.1.1.1 (指定RP)后面加(ove)可以修改优先级最大
注意:所有路由器都要配置,且定义RP必须相同
show ip pim rp mapping
禁止RPT切换为SPT树
全局:ip pim spt-threshold infinity (永不切换)
clear ip igmp group
clear ip mroute *
动态RP:
Auto RP
BSR
一、Auto -RP(思科私有)
使用Auto-RP原则:
整网迁移使用Sparse-Dense-Mode
依旧使用纯Sparse-Mode,但是所有路由器启用ip pim auto-rp listener
配置:
CRP:相当于班长 MA:相当于班主任(用来决定谁是RP)
定义CRP:inter loopback 0
ip add 1.1.1.1 255.255.255.0
ip pim sparse-mode
全局:ip pim send-rp-announce loopback 10 scope 5
定义MA:
ip pim send-rp-discovery loopback 0 scope 10
ip pim autorp listener(所有路由器都要配置)
接口启用Sparse-dense-mode :
inter f0/0
ip pim sparse-dense-mode
ping 224.1.1.1 repeat 100
BSR:
ip pim rp-candidate loopback 10 priority 10 (越低越好)
ip pim bsr-candidate loopback 0
PIM DR:
在IGMPv1中充当查询者,IGMPv2无用
在PIM中,DR无用,在PIM SM中,DR负责发送(*,G)的Join报文,以及(S,G)的Register报文