News
发布日期:2022-04-03 浏览次数:13832 来源:WOLF(沃尔夫)实验室
思科EI CCNP认证培训考试之为什么要使用组播?WOLF-LAB(沃尔夫)
	
	1、当需要发送相同的数据去往多个接收者
	2、有效的节省带宽
	3、减少主机和路由器的处理进程,减轻工作量
	4、当接收者的地址是未知的
	5、实时性,当接收者要求能够同时收到数据
	
	单播、广播、组播的区别
	1、单播发向一个特定的目标节点
	2、广播发向网络上的所有节点
	3、组播发向网络上的一组特定的用户
	
	Multicast is UDP based 组播是基于UDP的
	
	由于组播是基于UDP的,所以继承了UDP的缺点
	1、只能是尽力而为的传输,传输无保证
	2、没有拥塞避免机制,不像TCP有windows窗口
	3、会产生重复的报文
	4、无序的、UDP包没有序列号
	
	组播应用的类型:
	1、一对多
	2、多对多,例如网络会议、共享白板
	3、多对一
	
	<RTP>
	实时传输协议,用来解决UDP的无序性
	
	端口号:16384-32767
	
	RTP-实时传输协议real-time
	RCTP-实时控制协议
先封装RTP,再封装UDP
| 
				 
					20byte  | 
			
				 
					8byte  | 
			
				 
					12byte  | 
			
				 
  | 
		
| 
				 
					IP  | 
			
				 
					UDP  | 
			
				 
					RTP  | 
			
				 
					Vlice payload  | 
		
	
	组播模型:
	两个术语:
	1、第一跳路由器
	2、最后一跳路由器
	
	组播分类:
	1、域内组播协议
	   例如:PIM、DVMRP、MOSPF、CBT
	2、域间组播协议
	   例如:MBGP、MSDP
	
	<Multicast Address>
	 
	
	保留的链路本地地址:224.0.0.0 - 224.0.0.255
	    保留给本地网段上的网络协议使用。路由器不转发目标地址为这段地址的数据包。
	    TTL=1 (FR Hub & Spoke 中。Spoke端不能建邻居)
	224.0.0.1   子网中的所有主机和路由器
	224.0.0.2   子网中的所有路由器(HSRP)
	224.0.0.5   所有ospf路由器
	224.0.0.6   ospf中的DR和BDR
	224.0.0.9   RIP
	224.0.0.10  EIGRP
	224.0.0.13  PIM路由器
	全局范围地址:      224.0.1.0 - 238.255.255.255
	    公司可以使用这段地址在组织之间和通过Internet以组播方式传输数据。
	    指定源多播地址:  232.0.0.0 - 232.255.255.255
	    此段地址被保留给SSM(指定源的多播)使用。SSM是PIM的一种扩展。
	    GLOP地址:        233.0.0.0 - 233.255.255.255
	    这段地址和AS号对应。
	    例:AS62010的16进制表示为F23A,F2的十进制242,3A的十进制58,
	        所以子网233.242.58.0/24被全局保留,供AS62010使用。
	除以上两段地址以外的公网组播地址需要单独申请。
	有限范围地址:      239.0.0.0 - 239.255.255.255这段地址不能在公网上路由
	    使用这些地址的组播被限定在本地或组织内。公司、大学和其他组织使用有限范围地址来进行本地组播。
	    与Internet相连的边缘路由器不会将这段多播地址帧转发到外网。
	R1(config)#access-list 100 deny ip any 224.0.0.0 15.255.255.255
	224.0.1.1   NTP
	224.0.1.39  RP-Announce
	224.0.1.40  RP-Discovery
	<组播IP和MAC的对应>
	组播MAC地址的前25位固定
	IP地址的最后23位被映射到MAC地址的最后23位
	0000,0001 0000,0000 0101,1110 0000,0000 0000,0000 0000,1010
	          24位                0             23位
	   01        00        5E        00        00        0A
	<多播IP地址相对应的MAC地址>
	
	
	
	
	
	<IGMP(Internet Group Management Protocol)>
	·IGMP报文封装在IP包中,Protocol NO.=2  / TTL=1
	
	IGMPv1(hold time :180second):
	只有两种报文--
	  1.Query包    每60秒发一次 由路由器发向224.0.0.1      DIP:224.0.0.1 GROUP:0.0.0.0
	  2.Report包   主机回应Queries或主动发                DIP:224.1.1.1  GROUP: 224.1.1.1
	·IGMP-V1没有查询者机制,要靠上层的PIM选出查询者
	·查询的间隔响应时间--默认最大为10S,以S为单位,当主机收到路由器的查询后,它必须在这个时间以内回应,为了防止大家同时发送回应报文导致冲突,每一个主机会随机选择一个不同的回应时间。
	·在MA网络上只要有一个主机回应report包就可以了,它在回应的同时也抑制了其它组员的report包,因为没必要大家都发,只要有一个组员。路由器就会将多播发下来。
	·IGMP没有离组消息,称之为静悄悄的离开,路由器连续发三次query包,都没人回应就停止发该组的消息,也即180S之后holdtime到时,才停止发送该组的数据流。
	IGMPv2: 多了一个查询者的概念和以下两种消息
	1.指定组查询消息Group-specific query  DIP: 224.1.1.1 GROUP:224.1.1.1
	2.离组消息Leaving a Group  DIP: 224.0.0.2 GROUP:224.1.1.1
	·查询者:当有多个路由器在同一个以太网段时,要先选出查询者(比最小IP地址),查询者超时时间默认是120S
	·查询的间隔响应时间--默认10S,以0.1S为单位
	IGMP有离组消息Leaving a group 发向所有路由器
	路由器由到离组消息后,会马上发出指定组查询消息group-specific query看本组还有没有组员
	实验:
	
	
	R1(config)#ip multicast-routing       //开启多播路由协议
	R1(config-if)#ip pim dense-mode
	R1/R2#debug ip igmp
	R2(config-if)#ip igmp join-group 224.1.1.1        //使R2加入"224.1.1.1"的组
	ip igmp query-interval 30                   //修改查询间隔时间,改了后查询者超时时间也会自动变化
	ip igmp querier-timeout 120              //修改查询者超时间隔,默认是120S
	ip igmp query-max-response-time 10  //最大查询响应间隔时间
	ip igmp last-member-query-count 3     //路由器修改发送指定组查询消息的次数,默认2次
	ip igmp last-member-query-interval 2000    //修改发送指定组查询消息的间隔,默认是1000ms,这个值乘上次数就得到路由器等待的最大时间
	比如本例3*2000=6000ms 也就是说在6S内没人回应,路由器就去掉这个组,不再把这个组的流量播下去。
	R1#show ip igmp groups [detail]             查看谁加入了哪个组
	IGMP Connected Group Membership
	Group Address    Interface                Uptime    Expires   Last Reporter
	224.0.1.40       Ethernet0                00:03:10  00:02:58  10.1.1.1
	224.1.1.1        Ethernet0                00:03:10  00:02:58  10.1.1.2
	R1#show ip igmp interface ethernet 0
	Ethernet0 is up, line protocol is up
	  Internet address is 10.1.1.1/24
	  IGMP is enabled on interface
	  Current IGMP host version is 2
	  Current IGMP router version is 2
	  IGMP query interval is 60 seconds    
	    (#ip igmp query-interval 60)每60S发送Query。"query-interval"乘以2等于"querier-timeout"
	  IGMP querier timeout is 120 seconds   
	    (#ip igmp querier-timeout 120)  非查询者在120S内没有收到查询者的包,自己充当这个角色。
	  IGMP max query response time is 10 seconds 
	   (#ip igmp query-max-response-time 20) 查询包中的字段,告诉主机回应Report的最大响应时间.
	  Last member query count is 2
	  Last member query response interval is 1000 ms
	  Inbound IGMP access group is not set
	  IGMP activity: 5 joins, 4 leaves
	  Multicast routing is enabled on interface
	  Multicast TTL threshold is 0
	  Multicast designated router (DR) is 10.1.1.1 (this system)
	  IGMP querying router is 10.1.1.1 (this system)
	     网络中如果有多个路由器发Query,选举IP地址小的作为发送查询者。
	  Multicast groups joined by this system (number of users):
	      224.0.1.40(1)
	Show ip mroute    查看多播路由表
	R1#debug ip igmp  开启debug,查看加、离组消息
	IGMP V3:
	IGMPv3 :与以上两种协议相比,该协议的主要改动为:允许主机指定它要接收通信流量的主机对象。来自网络中其它主机的流量是被隔离的。 IGMPv3 也支持主机阻止那些来自于非要求的主机发送的网络数据包。
	 
	IGMPv3同路由器的交互过IGMPv2程同相同。但是在IGMP V1/V2中,主机只根据组地址来决定加入某个组并从任何一个源接收发给该组地址的组播流。而使用IGMP V3的主机通告该主机所希望加入的 多播组,同时还通告该主机所希望接收的多播源的地 址。主机可以通过一个包括列表或一个排除列表来指明希望从哪些源能接收多播流。同时IGMP v3带来的另外一个好处是节省带宽,避免不需要的、非法的组播数据流占用网络带宽,这尤其在多个多播源共用一个多播地址的网络环境中表现明显。
	===========================================
	IGMP V3:  支持两种包类型,query和report,取消了leave,增加Source filtering功能, host可以通知路由器,指定只收或者不收某些特定的源发出来的包.  防止了Unkonw host的DOS攻击. 
	其中Membership Query分为三种:
	General Query         //用于查询接口下所有多播成员信息;也就是查询所有组
	Group-Specific Query    //用于查询接口下指定组的成员信息;也就是查询特定组成员
	Group-and-Source-Specific Query      //该类型为IGMPv3中新增加的,用于查询接口下是否有成员需要接收指定源列表中的源所发出的特定组的多播流。也就是查询有没有成员要不要接收特定源发向特定组的流量
	IGMPV3的report报文有六种:
	MODE_IS_INCLUDE
	MODE_IS_EXCLUDE
	CHANGE_TO_INCLUDE_MODE
	CHANGE_TO_EXCLUDE_MODE
	ALLOW_NEW_SOURCES
	BLOCK_OLD_SOURCES
	report报文全部发向组播地址:224.0.0.20
	关于V3为什么要取消Leave这个有助于快速收敛的包呢? 其实他将V2的Leave包的功能加入到report包中来了, 当host有任何变动且认为应该通知Router时,他就会发送report包. 还有一种情况下发生report包是回复query包的时候.
	===========================================================================
	二层组播:
	<CGMP(Cisco Group Management Protocol)>   
	在路由器和交换机上都要配,用于控制二层交换机如何转发多播流量,CISCO私有的
	配置:
	Router:
	int e0/0
	  ip cgmp              在R3的某个接口起CGMP
	SW:
	int f0/1
	  cgmp                   在交换机上起cgmp
	SW3#show cgmp             //2900交换机默认已起用CGMP,3550和2950不支持
	路由器会向交换机发送一个CGMP的消息,包含以下内容:
	1、Join or leave                                          //加组还是离组
	2、Group Destination Address (GDA)  //组MAC地址
	3、MAC address of the IGMP client   //客户端主机的mac地址
	Debug ip cgmp
	<IGMP Snooping> 
	只要配置交换机,业界标准
	正常情况下,交换机只看二层头部,不看三层头部,但是在IGMP的snooping中,交换机看到了三层头部。
	交换机通过截获主机发出的report包和离组包,就可以知道哪个接口加入了组或离开了组
	Show mac-address-table multicast  查看交换机多播MAC表
	ip igmp snooping                      //全局启用snooping
	ip igmp snooping vlan 1          //也可以基于VLAN 1 起用IGMP的SNOOPING
	show ip igmp snooping
	show ip igmp snooping groups
	2950,3550中默认就开启这一命令
	 注意:开启IGMP snooping以后,交换机就只会向接路由器的接口转发report消息。从而避免抑制的产生。
	----------------------------------------------------------------------------------------
	----------------------------------------------------------------------------------------
	
	< Tree >
	在通过网络下发组播流量时,有两种下发的方式,也称为组播的两种分发树。
	1、源树,也叫最短路径树
	2、共享树
	·Shortest-Path / Source Distribution Tree
	 
	原理:在源树的分发形式中,网络会找一条从源到目标最近的路径来下发组播流量
	 SPT(Shortest Path Tree)
	源树会在路由器上形成以下的组播条目:
	  (S,G)  (192.168.1.1,224.1.1.1)
	  源树的优点:在信源和接收方之间创建一条最优的路径,可以最大限度的降低转发多播流的网络延迟。
	  源树的缺点:同时也增加了开销,路由器要针对每个信源存储路径信息,在包含数千个信源的网络中,这种开销是庞大的。
	  一个源一棵树.适用于比较多接收者时使用.每3分钟修剪一次.推模型.一般运行在DENSE模式下.
	·Shared Distribution Tree
	 
	原理:在共享树分发形式中,需要在网络中先找出一个集合点(RP)。然后每一个源都会先将流量发给RP,再由RP转发给接收者。
	  RP(Rendezvous Point)
	共享树会在路由器上形成以下的组播条目:
	  (*,G)  (*,224.1.1.1)
	  共享树的优点:每台路由器存储的信息较少,降低内存消耗。
	  共享树的缺点:选择信源到接收方的路径不是最优的。所以要慎重考虑RP的位置。
	  拉模型.RP可以手工指定.receiver端向RP端发出register包.一般运行在SPARSE模式下.
	< RPF (Reverse Path Forwarding)>
	RPF校验的目地是为了防环和防止重复报文
	RPF的规则:收到组播包的方向(接口)也必须是本路由器用来向组播包的源地址进行数据转发的方向(接口),否则扔掉数据包
	upstream ( 前往信源的方向)
	downstream ( 前往接收方的方向)
	RPF选接口的比较原则:
	1、lower AD     同样的路由,选最小AD值的路由所用的接口为RPF接口
	2、longest match    同样的路由,比最长掩码
	3、lower metric    如果IGP是负载均衡,同样的路由,掩码一样长,比metric
	4、higher ip      以上都一样,比接口IP地址
	如果没有单播路由,也可以通过写多播静态路由来指定自已的信源接口
	ip mroute 1.1.1.0 255.255.255.0 12.1.1.2 写去到源从哪个接口发出,1.1.1.0是源,12.1.1.2是下一跳
	show ip mroute static  查看静态多播路由,注意多播静态路由的AD是0
	  "RPF check fails"-----先查多播路由表,再查单播路由表
	RPF接口默认每5秒检测一次
	
	
	<TTL>
	接口的TTL阀值必须<=数据包的ttl值,接口才会转发
	
	
	入向数据包的TTL值大于或等于出向接口的TTL值时,才转发.
	注意TTL值在入向不减,出方向才减,减过之后才做这一比较
	TTL值的作用:通常用来控制组播的传输范围。
	   例如:在边界路由器上设定TTL阀值为128,内部的源发出的组播包初始TTL值控制为127,就能起到作用。
	使用ACL过滤多播组
	R1(config)#access-list 1 permit 239.129.0.0 0.0.255.255
	R1(config-if)#ip multicast boundary 1   只有列表1中被允许才能通过,不分in,out方向
	Show ip pim int s0 detail
	Show ip igmp int s0
	R1(config-if)#Ip multicast ttl-threshold 2   设置TTL值,必须在接口下,默认为0
	《组播路由协议》
	组播路由协议分为两类:
	1、域内的组播路由协议,比如DVMRP、MOSPF、CBT、PIM
	2、域间的组播路由协议,比如:MBGP、MSDP
	重点是研究PIM协议
	<PIM(Protocol independent Multicast)>
	·PIM是基于IP的,它的报文直接封装在IP包中,在IP中的协议号是103
	·协议无关的组播,指的是和单播协议无关,不管是何种单播路由协议,PIM都可以使用他们实现组播转发。
	·使用现有单播路由表实现RPF校验。
	·路由器之间不必发送组播路由更新,所以PIM比其他组播协议开销降低了很多。
	·PIM有两种工作模式,dense-mode和sparse-mode
	·组播路由器之间也要建邻居:
	     Hello:30S    发向224.0.0.13
	     Hold :30*3.5= 1分45秒
	多播路由表的几个要素:
	1、源
	2、目的
	3、入接口
	4、RPF邻居
	5、出接口
	R1#debug ip packet detail
	*Mar  1 00:15:44.207: IP: s=12.1.1.2 (Serial0), d=224.0.0.13, len 54, rcvd 0, proto=103
	·PIM-DM ( Dense Mode )
	
	密集模式原理:当第一跳路由器收到组播流量后,会向整个网络泛洪,网络中的每一个分枝都能收到流量,然后其中一些没有用户的分枝会自动进行修剪。
	 
	·Dense模式用的是源树的模型
	·在Dense模式中Flood&prune 每三分钟就要做一次
	·被剪掉的路由器如果有用户加组了,也会主动发出嫁接信息重新接收组播流量。
	
	使用的5个PIMv2消息:
	Hello
	Join / Prune
	Graft
	Graft-Ack
	Assert
	
	★Hello消息:
	PIMv2路由器使用Hello消息来发现邻居,并且周期性的在启动PIM的接口上发送Hello消息
	     Hello消息的时间间隔默认为30s
	Ip pim query-interval                 //改变Hello消息间隔
	     Hello消息的超时时间自动设置为interval的3.5倍
	★Join / Prune消息:
	使用该消息加入或从某个多播组将自己剪除
	当一个下游路由器被剪除,在(S.G)对中针对连接被剪除路由器的直连接口启用一个计时器,当计时器超时后,将从新进行Flood过程
	★Graft消息:
	当一台路由器将自己从一个多播组中剪除后,收到子网中主机的Report消息,这时,路由器会以单播发送Graft消息给上游路由器,上游路由器收到这个Graft消息后,将收到Graft消息的接口设置为前转状态,并立刻发送Graft-Ack消息给下游路由器
	    
	     下游路由器发送Graft消息以后会等待Graft-Ack消息,等待时间为3s,若在3s内没有收到Graft-Ack消息,下游路由器将再次发送Graft消息给上游路由器
	★Assert消息
	    在MA网络,防止多台多播路由器向同一个MA网络同时前转同一个组的多播流量
	
	R2#show ip igmp int e0
	  Multicast designated router (DR) is 10.1.1.2 (this system)
	  IGMP querying router is 10.1.1.2 (this system)
	   Graft
	   Graft-Ack
	
	
	D:表示组播组是一个密集模式,仅在(*,G)出现.
	C:有直接的组成员,会在(*,G)和(S,G)都出现.
	L:表示自己就是组成员,会在(*,G)和(S,G)都出现.
	P:输出接口为空/输出接口都处于Prune状态,结果Prune会从此(S,G)送至上游RPF邻居.会在(*,G)和(S,G)都出现.
	T:信息经(S,G)转发,只要收到第一个(S,G)包,就设置该标志.因此,T始终都会出现,仅在(S,G)出现.
	J:........................
	
	
	R2#show ip mroute
	
	(*, 224.1.1.1), 00:14:14/stopped, RP 0.0.0.0, flags: D
	  Incoming interface: Null, RPF nbr 0.0.0.0
	  Outgoing interface list:
	    Serial1, Forward/Dense, 00:13:54/00:00:00
	
	(14.1.1.4, 224.1.1.1), 00:14:14/00:00:00, flags: T
	  Incoming interface: Ethernet0, RPF nbr 0.0.0.0
	  Outgoing interface list:
	    Serial1, Forward/Dense, 00:13:54/00:00:00
	
	(*, 224.1.1.1), 00:14:16/00:02:58, RP 0.0.0.0, flags: D
	  Incoming interface: Null, RPF nbr 0.0.0.0
	  Outgoing interface list:
	    Serial1, Forward/Dense, 00:13:56/00:00:00
	
	如果没有组播流,(*,G)等到(S,G)消失后,从3分钟倒计时.
	
	
	
	*Mar  1 01:05:36.191: PIM(0): Received v2 Join/Prune on Serial0 from 12.1.1.2, to us
	*Mar  1 01:05:36.195: PIM(0): Prune-list: (14.1.1.4/32, 224.1.1.1) 
	*Mar  1 01:05:36.199: PIM(0): Prune Serial0/224.1.1.1 from (14.1.1.4/32, 224.1.1.1)
	
	*Mar  1 01:08:38.467: PIM(0): Received v2 Join/Prune on Serial0 from 12.1.1.2, to us
	*Mar  1 01:08:38.471: PIM(0): Prune-list: (14.1.1.4/32, 224.1.1.1) 
	*Mar  1 01:08:38.475: PIM(0): Prune Serial0/224.1.1.1 from (14.1.1.4/32, 224.1.1.1)
	
	前转者与DR的选举:
	
	·在MA网络中,如果运行的是dense模式,会选出一个前转路由器,通过assert消息选出。
	  前转路由器的选举规则:
	  1、比较去往源的路由的AD值
	  2、比较去往源的Metric值
	  3、IP地址大的成为前转路由器
	
	·MA网络中PIM还会通过Hello包来选择DR,在IGMPv1中,DR将成为Querier。
	  DR选举方式: 1.Priority大的(默认=1)
	              2.IP地址大的
	 
	注意:DR可抢占。只有以太口才选DR,串口不选DR。
	如果运行的是IGMPv2,IGMPV2自已会选查询者,DR只担负数据转发任务
	DR的作用:1、充当IGMPV1的Querier
	          2、在Dense无用
	          3、sparse中 send&receive join®ister message
	R1(config-if)#ip pim dr-priority 2        在接口下改优先级
	R1#show ip pim neighbor
	PIM Neighbor Table
	Neighbor          Interface                Uptime/Expires    Ver   DR
	Address                                                            Prio/Mode
	10.1.1.2          Ethernet0                00:31:45/00:01:30 v2    3 / DR S
	                                                               10.1.1.2的优先级为3,且为DR
	
	PIM通用规则一:无论在什么时候,只要出现了(S,G),就会出现它的父项(*,G),但(*,G)不作转发选择。
	当组播流量停止后,(S,G)条目只会在多播路由表中保存三分钟。
	
	DENSE-MODE的配置:
	ip multicast-routing      //开启组播路由功能
	int s0/0
	  ip pim dense-mode    //接口下开启PIM  dense-mode
例:R1、R2、R3构成组播网络,R5充当用户,加入224.1.1.1多播组。R4充当源,产生组播流。
	
	
	第一步:
	先在R1、R2、R3上运行单播路由协议,注意,R2和源相连的接口一定要宣告。否则后面路由器无法做RPF。
	第二步:
	在R1、R2、R3上:
	ip multicast-routing
	int s0/0
	  ip pim dense-mode
	第三步:R5模拟加组
	int e0/0
	  ip igmp join-group 224.1.1.1
	第四步:
	在R4上PING 224.1.1.1,就产生了组播流,R5收到后就会做回应
	其它命令:
	Show ip pim neighbor            //查看PIM邻居
	Show ip pim interface [detail]      //查看运行PIM的接口
	int e0/0
	   ip pim dr-priority 2        //在MA网络中需要选举DR,此命令调整路由器接口的优先级,抢占DR。
	--------------------------------------------------------------------------------------------------------------------------------------------------
	
	 ·PIM-SM ( Sparse Mode )
	
	稀疏模式原理:在稀疏模式中,组播网络必须要先选举出一个RP,并且要让网络中所有的路由器都知道RP的位置。然后当第一跳路由器得到组播流量时,只需要将流量转发给RP就可以了。用户如果想要接收流量,需要最后一跳路由器去向RP发出申请,去要流量。
	
	·在稀疏模式中,第一跳路由器到RP之间形成源树,RP到最后一跳路由器之间形成共享树。
	
	使用的7个PIMv2消息:
	Hello
	Bootstrap
	Candidate-RP-Advertisement
	Join / Prune
	Assert
	Register
	Register-Stop
	Hello
	于PIM-DM相同
	Bootstrap
	    宣告C-BSR的优先级和BSR IP地址
	    更新周期60s
	    使用地址:224.0.0.13
	    TTL=1
	Candidate-RP-advertisement
	    该消息由C-RP单播向BSR传送,包含RP地址、担当C-RP那个组的组地址和优先级
	Join / Prune
	 与PIM-DE相同
	Assert
	 与PIM-DE相同
	Register
	  由与源直连的路由器封装多播组流量
	  单播发送的RP
	Register-Stop
	  由RP发出,来通知源DR停止在Register消息中封装多播包
	
	
	
	指定RP的方式
	1、 Static  指定RP(一般用环回口),并通告进IGP
	2、 auto RP
	3、 BSR
	Register包由信源发向RP,查询本组中有无组员,它是一个单播包。如果本组中有组员,则RP向信源发出一个(S,G)JOIN包和register stop包(停止单播),则后续数据以多播包下发,并形成spt树,
	
	*Mar  1 01:51:22.647: PIM(0): Building Periodic Join/Prune message for 224.1.1.1
	*Mar  1 01:51:22.651: PIM(0): Insert (*,224.1.1.1) join in nbr 13.1.1.1's queue
	*Mar  1 01:51:22.655: PIM(0): Building Join/Prune packet for nbr 13.1.1.1
	*Mar  1 01:51:22.659: PIM(0): Adding v2 (2.2.2.2/32, 224.1.1.1), WC-bit, RPT-bit, S-bit Join
	*Mar  1 01:51:22.663: PIM(0): Send v2 join/prune to 13.1.1.1 (Serial1)
	
	*Mar  1 01:52:21.823: PIM(0): Building Periodic Join/Prune message for 224.1.1.1
	*Mar  1 01:52:21.827: PIM(0): Insert (*,224.1.1.1) join in nbr 13.1.1.1's queue
	*Mar  1 01:52:21.831: PIM(0): Building Join/Prune packet for nbr 13.1.1.1
	*Mar  1 01:52:21.835: PIM(0): Adding v2 (2.2.2.2/32, 224.1.1.1), WC-bit, RPT-bit, S-bit Join
	*Mar  1 01:52:21.839: PIM(0): Send v2 join/prune to 13.1.1.1 (Serial1)
	
	WC-bit  :表示这个加入地址是一个RP地址,不是源
	RPT-bit :表示这个消息顺着共享树传送RP
	S-bit   :标识是Sparse-mode
	
	R2#show ip mroute
	(*, 224.1.1.1), 00:00:17/00:03:13, RP 2.2.2.2, flags: S
	  Incoming interface: Null, RPF nbr 0.0.0.0  (自己是RP,所以是Null,0.0.0.0)
	  Outgoing interface list:
	    Serial0, Forward/Sparse, 00:00:17/00:03:13
	
PIM-SPARSE模式详解:
	
	
	
	共享树的形成:
	一、PC发出一个igmp join(224.1.1.1)消息给last router。
	二、R5形成共享树条目(*,G),并且向R4发出一个Pim join(*,224.1.1.1)的加入消息。
	三、R4形成(*,G),并且向R3发起一个Pim join(*,224.1.1.1)的加入消息。
	四、R3形成(*,G)
	源树的形成:
	一、source发出流量给first route(R1)
	二、R1将源发过来的组播信息流的组播包封装为单播包(unicast register packet),发送到RP
	    register包的封装:DIP:23.1.1.3|SIP:1.1.1.1|224.1.1.1|server'IP
	三、RP收到register packet后,做三件事
	   1、解封装,并沿共享树发下去
	   2、产生(S,G)条目,并且RPF校验指向源
	   3、向source发起一个(S,G)的加入
	四、R2形成源树(S,G),并且向R1发起一个(S,G)的加入。
	五、R1形成源树(S,G),接着做两件事:
	   1、沿(S,G)源树发出组播
	   2、封装unicast register packet继续发
	六、RP从(S,G)收到multicast packet后,向first-hop router (R1)发出register-stop包。
	七、R1收到register-stop包后,停止单播register packet
	八、last router切换到源树,向源发出(S,G)的join消息
	注意:在源树中,RPF接口是去往源的接口
	      在共享树中,RPF接口是去往RP的接口
	PIM-SM SPT Switchover
	sparse模式省去了组播流量的泛洪,节省了带宽,但也有缺点,组播流量走的不再是最优路径。为了解决这个问题,sparse模式设计了一个从共享树自动切换到源树的机制
	在sparse模式中,最后一跳路由器会检测自已收到的组播流量,当收到的多播包超过一个切换阀值后,将主动切换到源树,默认情况下切换阀值等于0,也就是说一有组播流量播下来就立马切换到源树。
	Router(config)#ip pim spt-threshold 0          //修改last router的阀值,用于切换到源树。默认就是0,如果设为无穷大,则永不切换。
	PIM的sparse模式要正常工作,必须要有RP,产生RP的方法有三种:
	1、Static RP
	2、Auto-RP
	3、BSR
	一、静态RP
	Router(config)#ip pim rp-address 1.1.1.1 在每台路由器上都指定
	二、Auto RP
	原理:在网络中先指定一台MA(映射代理路由器),然后再指定多个想成为RP的候选路由器。每一个候选路由器都会向MA发出自已的申请,参与竞选。最后,由MA选出RP,再将RP的地址发给网络中的每一台路由器。
	C-RP----- 候选RP,也就是想成为RP的路由器
	MA(mapping agent)----- 映射代理,MA的多播地址:224.0.1.39,一旦指定MA,它的每一个组播接口都会加入224.0.1.39
	RP选举规则:IP地址大的成为RP
	所有运行组播的路由器都会加入224.0.1.40,MA会加入224.0.1.39
	所有的候选RP在发消息给MA时都是发向组播地址224.0.1.39,MA在发消息给所有路由器时是发向组播地址224.0.1.40
	当路由器配置成C-RP时,它开始向224.0.1.39发送RP-Announce消息,时间间隔为60s
	当3倍的发送间隔180s未收到C-RP消息,映射代理会认为该RP死亡,会重新选出RP
	映射代理监听地址224.0.1.39来获取C-RP的Announce消息,并选择出RP(最大的IP地址)
	并通过RP-Discovery消息向PIM域通过RP地址,时间间隔为60s
	注意:c-rp/ma 的用来参选的loopback口一定要宣告进IGP
	注意:Auto RP必须运行在sparse-dense模式下,cisco私有技术。
	默认是向224.0.0.0/4通告RP-Discovery消息(该地址是所有多播组)
	注:若RP发生故障,映射代理会自动切换RP,并向整个PIM域通告新的RP地址
	第一步:配置MA
	R1(config)#ip pim send-rp-discovery loopback 0 scope 5    //配MA,默认会每60S向224.0.1.40发送一个discovery消息,规定了只能传5跳
	第二步:配置候选RP
	R1(config)#ip pim send-rp-announce loopback 0 scope 5   //配置候选RP,向224.0.1.39每60秒发送一个RP-Announce,且只能传5跳
	注意点:
	R1(config)#int lo0
	R1(config-if)#ip pim sparse-dense-mode(要确保loopback口也运行PIM)
	指定RP只为特定组服务--
	ip pim send-rp-announce Loopback0 scope 20 group-list MUL-GROUP  //只允许lo0口参与特定组的RP选举
	ip access-list standard MUL-GROUP
	 permit 224.1.1.1
	ip pim accept-rp 1.1.1.1 MUL-GROUP  //只允许1.1.1.1这个RP接收MUL-GROUP这个组发过来join和prune消息
	R1(config)#ip pim rp-address 1.1.1.1 override  //默认情况下,Auto-RP优于静态RP,如果想静态优先,打上这一命令
	show ip pim rp mapping (in-use )  //查看网络中的RP信息
	Clear ip pim rp-mapping 
	ip pim autorp listener    //在sparse-mode下运行auto-rp必须要开这条命令,默认也是开启的,它会对发向224.0.1.39和224.0.1.40的流量通过dense-mode来传递
	三、BSR  自举路由器
	工作原理:
	先在网络中设定多台候选BSR和候选RP
	候选BSR之间先决定出谁是active BSR路由器
	Active BSR发出一个消息bsr message(bsr ip address)到224.0.0.13
	路由器收到bsr message信息
	想成为RP的路由器单播给active bsr 说明自已想成为某个组的RP
	Active bsr收到各个路由器想成为RP的消息后,不做决定,发出这些收集到的信息。To 224.0.0.13
	所以路由器根据自已收到的信息做选举,决定谁是RP
	选active BSR的规则:
	1、优先级高的优选,默认为0
	2、IP地址大的优选
	Router(config)#ip pim bsr-candidate loopback0   //指定BSR,后面还有个参数可以指定优先级
	Router(config)#ip pim rp-candidate loopback0     //指定想成为RP的路由器
	----------------------------------------------------------------------------------------------------
	----------------------------------------------------------------------------------------------------
	 组播命令集
	ip multicast-routing  起用组播
	int s0/0
	   ip pim dense-mode [sparse-mode] [sparse-dense-mode] 在接口下启用组播的模式
	Show ip pim neighbor
	Show ip pim interface [detail]
	int e0/0
	   ip pim dr-priority 2  在MA网络中需要选举DR,此命令调整路由器接口的优先级,抢占DR。
	Router(config)#ip pim spt-threshold 0  修改last router的阀值,用于切换到源树。
	Router(config-if)#ip igmp join-group 224.1.1.1  加入多播组
	Show ip igmp groups
	Show ip igmp interface [e0]
	Show ip mroute
	Show ip pim rp mapping   查看RP信息
	Clear ip pim rp-mapping  清除RP映射表项
	Show ip pim interface
	Show ip pim rp-hash 224.1.1.1  查看本组的RP是谁
	Debug ip pim ?   调试PIM的各项信息
	Debug ip pim auto-rp
	Debug ip pim bsr
	静态RP--
	Router(config)#ip pim rp-address 1.1.1.1 在每台路由器上都指定
	自动RP--
	Router(config)#ip pim send-rp-discovery loopback0 scope 5 指定RP映射代理,环回口必须运行space-dense模式
	Router(config)#ip pim send-rp-announce loopback0 scope 5 指定想成为RP的路由器,环回口必须运行space-dense模式
	R1(config)#ip pim rp-address 1.1.1.1 override  默认情况下,Auto-RP优于静态RP,如果想静态优先,打上这一命令
	BSR--
	Router(config)#ip pim bsr-candidate loopback0   指定BSR
	Router(config)#ip pim rp-candidate loopback0 指定想成为RP的路由器
	特定组--
	ip pim accept-rp 1.1.1.1 MUL-GROUP  只允许特定组接受1.1.1.1为它的RP
	ip pim send-rp-announce Loopback0 scope 20 group-list MUL-GROUP  只允许lo0口参与特定组的RP选举
	ip access-list standard MUL-GROUP
	 permit 224.1.1.1
	RP公告过滤
	 ip pim rp-announce-filter rp-list 1 group-list 22
	 Access-list 1 permit 10.10.1.1
	 Access-list 1 permit 20.20.2.2
	 Access-list 22 permit 224.10.10.10
	仅接收rp-list定义的C-RP发送的且仅做为224.10.10.10这个组的RP-Announce消息才会被映射代理接收