梅利333

从无到有,自有至精

导航

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成长之路  --- 梅利

 

posted on 2020-10-26 09:43  梅利333  阅读(238)  评论(0编辑  收藏  举报