|
多播2 PIM/Dense mode/Sparse mode
一、PIM
1、概念:协议独立的多播(不依赖单播路由协议,RPF也只是咨询单播路由表)
2、模式:dense模式与sparce模式
3、协议无关:必须保证IP可达,但是也只是须要IP可达,有路由表就行了,具体什么协议不关心
4、也须建立邻居
5、构建PIM表:组播路由表
6、反向路径检测RPF:依赖于树的类型,源树检查源,共享树检查RP
二、Dense密集模式
1、原理:反向路径广播。所有路由器在收到多播流量时向所有非接收接口转发,下游路由器收到之后首先检查直连接口有没有加入多播组,再检查下游有没有客户,没有则向上反馈一个prune修剪信息。上游路由器在收到修剪信息后,将该接口置为**状态,超时时间为3分钟。超过则继续反向路径转发。
2、理念:默认所有下游路由器都有多播客户
3、场合:适合客户密集、高速链路、免费节目
不适合稀疏客户、低速链路、付费节目
4、应用:实验室
5、配置:
R1(config)#ip multicast-routing 打开多播路由
R1(config-if)#ip pim dense-mode 设置为密集模式
R1(config-if)#do sh ip pim neighbor 查看PIM邻居
PIM Neighbor Table
Neighbor Interface Uptime/Expires Ver DR
Address Prio/Mode
202.100.0.2 Serial1/0 00:00:13/00:01:31 v2 1 / S
R1#debug ip pim 打开debug
PIM debugging is on
R1#
*Jun 29 12:18:20.747: IP: s=202.100.0.1 (local), d=224.0.0.13 (Serial1/0), len 54, sending broad/multicast
*Jun 29 12:18:21.507: CEF: Try to CEF switch 224.0.0.13 from Serial1/0
*Jun 29 12:18:21.507: IP: s=202.100.0.2 (Serial1/0), d=224.0.0.13, len 54, rcvd 0
可以看出,发送数据包的源地址为参与多播的接口地址,目的地址为所有运行PIM的路由器地址224.0.0.13。每30秒发送一次。
R3(config-if)#ip igmp join-group 224.10.10.10 加组
R3#sh ip mroute 查看多播路由表
(*, 224.10.10.10), 00:04:05/00:02:48, RP 0.0.0.0, flags: DCL
Incoming interface: Null, RPF nbr 0.0.0.0
Outgoing interface list:
FastEthernet1/0, Forward/Dense, 00:04:05/00:00:00
Loopback0, Forward/Dense, 00:04:05/00:00:00
(*, 224.0.1.40), 00:05:06/00:02:53, RP 0.0.0.0, flags: DCL
Incoming interface: Null, RPF nbr 0.0.0.0
Outgoing interface list:
FastEthernet1/0, Forward/Dense, 00:05:06/00:00:00
三、Sparse稀疏模式
1、原理:拉。
2、两种消息:join--接收者加组消息,发向RP
register--源向RP的注册信息,发向RP (单播)
3、数据流量沿共享树向下游发送,并进行反向路径检测(如何到达RP)
4、在一个特定的组中只有一个RP
5、RP的决定:静态配置或者动态学习(auto-rp/pim v2 bsr)
6、PIM SMv2数据包:
(1)Hello:建立邻居
(2)Join/prune:加组或离组
(3)Register:源向RP注册
(4)Register-stop:RP向源说注册停止
(5)RP-Announce:
(6)RP-Discovery
(7)Candidate-RP-Advertisement
(8)Bootstrap
7、mroute(用来转发组播流量)
(1)(*,G)(S,G)组播路由条目
(2)每个条目都会包含RPF的信息:入接口、RPF邻居
(3)每个条目都会有一出接口列表(可以为空)
从一个接口收到Join消息则将该接口置为相应组的OIL出接口列表中。如果从该接口收到离组消息,则发送特定组查询。如果长时间未收到join消息,则将该接口从相应组的出接口列表中删除。
8、pim SM flags states
T----代表这个组的流量已经切换到了源树(在RP完成源树和共享树对接,源和目的双方都清楚后,这样可以走最佳路径。罚值默认为0,一有流量立马就走SPT。数据包在发送到RP时走(S,G)的路由条目,数据包结构为源IP为源的IP地址,目标地址为组IP,再转发给下面的客户时,走(*,G)的路由条目,源地址为源的IP地址,目标地址为组IP地址。当数据包到达主机后,就可以走单播路由了,故用SPT)
J--Join SPT。通常只出现在最末一跳路由器
F--第一跳路由器
R--会向RP的方向发出一个修剪(在切换到SPT的时候用到)
9、邻居发现
在MA网络中会选出一个DR,以最高IP地址决胜负
10、共享树的形成过程
(1)IGMP Join信息:路由器的一个接口接收到join消息,则产生一个(*,组地址)的多播路由条目(不知道源的地址),并将该接口放进OIL列表。以后当这个组的不管哪个源发过来的数据包,路由器都会将它从这个接口转发出去。
(2)PIM Join信息:这个过程完成之后路由器会向上游路由器发送PIM的Join消息,上游路由器在收到这个路由器发送的Join消息后也会做同样的事情,直到找到RP
11、源树的形成过程
(1)Register信息:源发送一个多播注册信息(*.*.*.*,组IP),到达第一跳路由器,由于RP不再向上游路由器发Join信息,故第一跳路由器上关于这个组的出接口列表为空,故这个组的多播流量无法被发送。这时这个第一跳路由器将这个多播包再打一次封装,封装进单播包并通过IP路由协议发送给RP。这种数据包就叫Register.RP在收到这种注册信息后将在多播路由表里产生一个该源和该组IP对应的多播路由条目,即(S,G)。这时上面的源树还未形成,故源和RP的通信将一直通过Register发送。
(2)Join信息:建立源树。RP向上游路由器发送Join信息,上游路由器在收到这个消息后也产生一个(S,G),并将收到的接口加入该条目的OIL出接口列表。注意这时(*,G)的出接口列表仍然为空。再由这个路由器向上游路由器发送Join信息,直到到达第一跳路由器,源树就此形成。
(3)Register stop:在这种消息发送之前,源一直会发送Register信息,哪怕源树已经形成。因此,RP在收到第一个通过源树发送来的多播流量,即发送一个Register stop消息,告诉源不要再发Register消息了。这时因为源地址和组IP地址都已经清楚,路由器会更新组播路由表,以后有流量只查多播路由,不走单播了。这时RP的(S,G)和(*,G)的出接口列表都会有相应接口。 |
|