multicast-9 MSDP
MSDP 域间组播
实例
RP : 按理说RP应该是每个AS都有,不可以所有AS共用一个RP,共享树的规模就太大了,
如果是在AS内部都有RP的话,那么共享树,只在自己的AS内完成
需要解决的问题
两侧所使用的RP选举方法不同,左侧使用BSR,右侧使用AUTORP
另外,两个AS之间需要 运行MBGP吗?
不用,因为并不需要使用MBGP去进行RPF校验,和这个关系
而BSR的工作原理,就是向外泛洪bootstrap消息,并且这个消息会从R2的F0/1口发出去,发出去不要紧,但是做为右侧的AS,是否就会收到这个bootstrap消息,从而进行选举,导致最后两个AS所选举出来的RP是一样的,
这显然是不行的,
怎么办呢?
AS之间的RP 消息过滤
让R2不从F0/1口向外发送BSR的消息
R2(config-router)#inter f0/1 R2(config-if)#ip pim bsr-border
不会跨越AS发送BSR消息
而做为R3,上面要对AUTORP的消息进行限制,
从R3 的f0/0接口上, 无论是进还是出,都阻止224.0.1.39和224.0.1.40这两个地址的流量
R3(config)#access-list 1 deny 224.0.1.39 R3(config)#access-list 1 deny 224.0.1.40 R3(config)#access-list 1 per any R3(config)#inter f0/0 R3(config-if)#ip multicast boundary 1 //调用组播ACL列表
后面还可以加参数 ,in ,out ,很好理解 了吧,进来的,发出去的,
如果什么都不加,那就代表都生效。
在做域间组播时,先做的一定是RP的消息的阻止泛洪
现在我们让R2成为as100的RP,还是BSR
让R4成为AS200 的MA 和RP
这样一来,共享树得以构建完成
让PC加组224.1.1.1
然后就可以在R4上可以看到*,G表项
而R3上毛都看不到,
因为此时他没有收到igmp report 消息,以及没有收到*,G 的join 消息,
它也不可能收到,因为在AS200 里,RP是R4
同再AS100也是一样的,
但是不会出现*,G表项,是空的,为什么?因为使用的是BSR模式来选举的RP,不会AUTORP那样,可以看到239,240的
那现在要怎么办呢?
让SERVER发送组播流量即可
现在是肯定不通的,为什么呢?
到底发生了什么?
此时到R1上看一下,现在的*,G表项和S,G表项都是空的,怎么办?
在sparse 模式里面找RP啊~要怎么找呢?
单播注册啊~
但是R1发送出来的register 消息,R2马上就给回复了?~
为啥这么快呢?
什么时候才会回复register stop消息呢?
要么是R2是真正的收到了组播流量,显然这里有收到真正的组播流量
要么是R2下面没有接收者,显然,R2下面就真的没有接收者,所以立刻回复了注册停止的消息
也就是说没有形成共享树,
那如何解决这一问题呢?
解决的问题就是
当R2收到注册消息以后,复制一份给AS200 的RP
这时候就要用到MSDP,域间组播 组播源发现协议
组播源发现协议MSDP
1 MSDP 在多个AS之间的RP之间建立 TCP 连接,TCP源端口是高位随机端口,TCP的目的端口号是639
该TCP连接负责将组播数据包封装在P2P 的TCP数据包中进行传输,从而让其它AS内的2 RP可以收到组播数据包,并且获知源的信息,
3 组播数据包封装到单播包以后称之为SA (source active)message,就是一个AS的RP,发送给另外一个AS的RP 源是自己的IP,目标是另一个AS的RP地址
4 其它AS内的RP在获知源的信息后,可以按照SPARSE MODE中的源树的构建方法来主动向源发起(S,G)join message 从而建立 真正的组播路径
并且这个包的源是AS100的RP 目标是AS200 的RP
并且发送的是SA消息,实际就是register消息
配置也很简单
直接指定MSDP的邻居
建立方法
R2(config)#ip msdp peer 4.4.4.4 connect-source lo 1 remote-as 200 邻居地址 连接的源是我本地的RP接口 对端 的AS号 R4(config)#ip msdp peer 2.2.2.2 connect-source lo 1 remote-as 100
Ip msdp peer [peer address] connect-source [int][remote-as][as number] Ip msdp originator-id [interface]
Peer 是TCP的远端的地址,必须有路由可达,
Remote-as 用于指定对端 AS号,不设置不影响TCP的建立 和MSDP的工作
Originator id 是可选项,如果没有设置,则用本地的RP地址作为ID ,就是RP的RID 标识
两端输入完成后,会由先配置的一方主动发起tcp的建立 ,
2.2.2.2---4.4.4.4 发起SYN
4.4.4.4---2.2.2.2 回复SYN+ ACK
2.2.2.2---4.4.4.4 回复ACK
并后发起请求时使用的是高端口号随机的
去和对端建立639端口号
两侧建立形成之后,使用keepalive 进行维持邻居关系
来看一下SA消息
R2给R4发送SA消息,
里面包含了真正的组播流量
从而形成了S,G表项
并且会向着S,G的in 口发送S,G的join消息
创建S,G表项
4-3发送S,G join消息
3-2发送S,Gjoin 消息
一直传到了R1
整个的过程图是这样的
由于使用了sparse 模式,并且两侧AS都配置了RP 以及bsr,和MA
得以建立共享树
然而两侧的AS之间内部的RP无法实现数据的交互,无法完成注册信息的传递,也就无法完成组播流量的正常传递,
这时候的解决办法是使用MSDP
收到了SA消息之后,由于SA消息中包含了真正的组播流量,所以为R4创建S,G表项提供了帮助,
剩下的就是创建 S,G表项的事儿了,以构建最短路径树,不再赘述了
SA 过滤
2 指对源接收,只收谁,或者是不收谁 标准ACL
3 对SA消息的内容,哪个源针对于哪个组发的流量, 扩展ACL
扩展ACL
Ip msdp sa-filter [in][out][peer address][list | route-map]
PS:
1 List 和route-map 均可以用来匹配扩展ACL,如果是route-map的话,就需要用route-map调用ACL
2 扩展ACL 用于限制哪些源到哪些组地址的信息可以用于构建组播路由表
那什么时候需要 修改originator Id呢?
别急,后面说,anycast 时,会用到
实例
在server处又新加了一台设备,当做源 R5 192.168.1.20
此时 在R2上(SA的过滤配置肯定是在RP上的)
Extended IP access list 100 10 permit ip host 192.168.1.10 host 224.1.1.1 (5 matches) R2(config)#ip msdp sa-filter out 4.4.4.4 list 100
当然也可以先写deny 再写permit ,这个和 正常的ACL没啥区别
现在只允许192.168.1.10 这个源向组播224.1.1.1 地址发送流量时,才会进行SA的转发,而其它的源地址将不给予转发SA ,
没有SA也就意味着无法创建S,G,没有S,G也就意味着没有办法通信
此时R5是死活也通不了的。
但是现在我们再来修改一下ACL
允许192.168.1.20 这个源, 然后再来看一下吧
好,加完了,
这样就过来了,
然后我们再来试一下,现在是在R2上配置Out 的,
我们现在在R4上(另外一台RP上)做In 方向上的filter,
现在两个源都可以,
我在R4上将192.168.1.10 deny 掉,看看有什么变化
此时源为192.168.1.10的server ,打死也通不了了
那么R5呢?另外一台192.168.1.20 的 server呢?
等待一段时间,等组播路由表收敛完成,就可以了
但是通过wireshark 抓包可以明显的看到,SA的消息是发出去了,但是到达对端的时候有什么问题和我这边没有关系了,问题是出在了对端 的RP上
现在再加上RP-LIST 和 rp-route-map
标准ACL
Ip msdp sa-filter [in] [out] [peer address] [rp-list] [rp-route-map]
Rp-list 和rp-route-map均可以用来匹配标准ACL
标准ACL用于限制 哪些peer 产生的SA可以发送,其中的ACL 匹配的是peer 上的originator id
Originator id 如果不手动配置的话,就会以RP的地址来代替这个地址,
如果想要修改的话,可以使用命令来修改
Ip msdp originator-id [interface]
R4(config)#ip msdp sa-filter in 2.2.2.2 rp-list 1 //调用RP-LIST R4(config)#ip access-list standard 1 R4(config-std-nacl)#deny 2.2.2.2 R4(config-std-nacl)#per any
这样就可以直接deny 掉R2这台RP所发来的SA消息,针对的是RP,而不是RP所发来的具体内容。直接就给你拍死了。
但是如果说现在将R2的RP 的originator 地址改一下会发生什么呢?
来看一下,
由于默认会使用RP的地址来做为originatorID ,并且我们在R4上配置的filter 也是针对的2.2.2.2 这个地址,现在来改一下看看
R2(config)#ip msdp originator-id f0/0
然后用SERVER 去Ping 一下组播地址,
发现可以通,
抓包来分析一下
现在发送的SA 消息中,源是2.2.2.2 到4.4.4.4 外层IP没有问题
但是里面的MSDP中发生了变化,RP address 变成了12.0.0.2
变了,那么在R4上面针对2.2.2.2 所做的策略,自然也就不生效了
现在是server 和 R5都没有问题
那么此时,我们在R4上再针对于12.0.0.2这个新的originatorID 来做一个filter呢?
R4(config)#ip msdp sa-filter in 2.2.2.2 rp-list 2
你所指向的还是RP,因为RP的地址不变,你所变的是originator ID
都不通了,
这也就是Originator ID的做用,
默认情况下是RP的地址,当然是可以改的,如果是改完之后,必须要重新的针对这个ID做filter才可以
-------------------------------------------
CCIE成长之路 --- 梅利