查看组播路由表:
show ip mroute
查看igmp组成员:
show ip igmp group
通用规则:
1. 无论何时,只要创建一个(S,G)项而其相应的父(*,G)不存在,就首先自动创建新的(*,G)项。
2. RPF接口是作为对源IP地址(或稀疏模式(*,G)项,RP)的最小开销路径接口来估算的。如果多个接口开销相同,选择最高IP地址的接口作为“切入点”。(比较顺序:1.管理距离2.最长匹配3.开销,这和单播不同,单播先比较最长匹配)。
3. 在创建新的(S,G)项时,其出口表提供一个来自父(*,G)项的出口表副本。
4. 组播转发项的入口(RPF接口)决不能在其出口表上出现。
5. 每个组播状态项的RPF接口(即输入接口)每5秒重新计算一次,而且依据规则4对输出接口的列表做适当的调整(以防在出口表上出现输入接口)。
6. 对(*,G)项的出口表的添加和删除都被复制(在通用规则4的限制下)到所有与该组有关的(S,G)项。
密集模式规则
1. 密集模式(*,G)的输出接口列表映射了现有的PIM-DM邻居接口或直接连接的组成员接口。
2. 密集模式(S,G)项的出口在剪枝时不能删除,而是被标记为“Prune/Dense”,且仍保留在出口表上。
3. 当一个接口的PIM邻居列表上增加一个新邻居时,该接口在所有PIM-DM(S,G)输出列表重新设置“Forward/Dense”状态。
稀疏模式规则
1. 稀疏模式(*,G)项作为显示加入操作的结果而创建的。
2. 稀疏模式(*,G)项的入口总是指向RP的共享树。
3. 稀疏模式(S,G)项在下列条件下创建:
接收一条(S,G)加入消息/剪枝消息
上一跳路由器上切换到SPT时
不可预料的(S,G)到达时(*,G状态不存在)
在RP上收到一条注册(Register)消息
注意:PIM-SM SPT也是通过和共享树一样的基本显示加入(Explicit Join)机制创建的。
4. 增加到稀疏模式(*,G)或(S,G)项的出口表中的接口由如下两个条件之一决定:
当通过该接口接收到一个适当的(*,G)或(S,G)加入消息时
当该接口存在一个该组的直连成员时
5. 从稀疏模式(*,G)或(S,G)项的出口表中删除一个接口发生在如下两种之一的情形:
当通过该接口接受到一个适当的(*,G)或(S,G)剪枝消息(不被否决)时
当接口的有效倒计时器倒计时到0时
6. 接口有效计时器重新置回3分钟有两个条件:
该接口收到适当的(*,G)或(S,G)加入消息(下游邻居1分钟发送一次加入消息)
在接口上接收到一个来自直连成员的IGMP Membership Report。
7. 当(S,G)项的RPF邻居与(*,G)项的RPF邻居不同时,路由器将向共享树发送一个(S,G)RP位剪枝消息。即(S,G)RP位剪枝消息从共享树和SPT的分支点开始。
8. 稀疏模式(S,G)项的RPF接口(即入口)使用源的IP地址计算的,除了设置RP位的情况外,在这种情况下,使用RP的IP地址。
PIM密集模式
ip multicast-routing //开启全局组播
(config-if)#ip pim dense-mode //接口上开启组播
PIM转发
1. 通过输入包的源地址(S)和组地址(G)来搜索(S,G)的最长匹配项
2. (S,G)都不匹配则寻找(*,G),注意密集模式仅使用(S,G)项来转发,所以跳过这一步。
3. 如果无现有的(S,G)则根据规则创建一个(S,G)项。
4. 对输入包进行RPF检查,对组播路由表项的输入接口信息的维护可以不用每次进行RPF校验时都去查路由表,而只是每隔5秒对每个组播项的输入接口信息进行一次重新计算。
5. 如果检查成功则转发到所有未被剪枝的输出接口上。
PIM剪枝
在点到点链路,非RPF接口收到包后会以一个限制的速率向此接口的邻居发送剪枝消息,邻居收到后立即回应一个响应消息完成剪枝。
在多路访问网络,非RPF接口收到包之后只是简单的丢弃而不发送剪枝消息。
当路由器从下游邻居接收一个(S,G)RP位剪枝消息时:
1. 创建一个(S,G)状态项(如果不存在)
2. 在该(S,G)项中设置RP位(用R标记表示)
3. 根据通用规则3,用来自父(*,G)项接口的一个拷贝来形成(S,G)项出口表
4. 从出口表中删除该接口,即接收(S,G)RP位剪枝消息的接口。
5. 根据RP地址(而不是根据源地址)计算或重新计算(S,G)项的RPF信息(入口和RPF邻居)
思路:有一些流转成SPT,但是又不能把共享树的流量全部剪掉,所以就生成一个(S,G)表项,然后剪掉RP位剪枝消息进来的接口,因为转发是先匹配(S,G)表项,所以相当于把流量剪枝了
PIM嫁接
PIM稀疏模式
配置:
全局:ip multicast-routing
接口:ip pim sparse-mode
接口:ip pim rp-address
PIM稀疏模式转发
和密集模式不同,用(*,G)转发组播消息。(*,G)一般根据需要创建,要么有加入消息,要么有直连主机
Register过程:
接收者首先加入:
1. 源开始发送Group G信息流。
2. 路由器A在Register消息中封装包,单播到RP
3. 路由器C(RP)解包,沿着共享树向下转发。
4. RP向源发送(S,G)加入消息,建立SPT。
5. RP开始接收沿着SPT向下的(S,G)信息。
6. RP向路由器A发送Register Stop
7. 路由器A停止在Register消息中封装信息
8. (S,G)信息沿着单一的路径(SPT)向下游RP发包
注意:单纯的源并没有加入组播组
源首先注册:
1. 源开始发送Group G信息流。
2.路由器A在Register消息中封装包,单播到RP
3.路由器C(RP)在共享树上没有接收者,丢弃包
4.RP向路由器A发送Register-Stop
5.路由器A停止在Register消息中封装信息,丢弃来自源的后续包
6.路由器C接收来自共享树上一个接收者的(*,G)加入消息
7.RP向组中所有已知源发送(S,G)加入消息
8.RP开始接收沿着SPT向下的(S,G)消息
9.RP沿着共享树向下把(S,G)信息转发给接收者
PIM汇聚点
静态指定:
ip pim rp-address address [group-list acl]
自动RP:
原理:
加入组播224.0.1.40来每隔默认60s接收来自映射代理的自动RP信息,保持时间默认60*3,如果超时,切换到静态配置的RP,如果没有静态配置RP,则切换到密集模式
映射代理(mapping agent)加入224.0.1.39来接收RP候选的声明
候选RP每隔默认60s向224.0.1.39组播RP通知消息,映射代理中的候选RP保持时间默认60*3
基本配置:
把路由器配置成候选RP(IP地址高的成为主RP):
ip pim send-rp-announce interface scope ttl[group-list acl] [interval secs]
如:ip pim send-rp-announce loopback0 scope 16 group-list 10
access-list 10 permit 239.254.0.00.0.255.255
把路由器配置成RP映射代理:
ip pim send-rp-discovery scope ttl
稀疏-密集模式:
ip pim sparse-dense-mode
根据路由器是否有改组的RP信息,做出在一个接口使用稀疏模式的决定,这样可以先启动一个密集模式的网络,以后再切换到一个稀疏模式网络,而不必在网络的每个接口上改变PIM模式
查看RP和映射代理:
show ip pim rp mapping
如果有pimv1标记,表明该信息通过自动RP了解到
组播边界:
可以用来防止RP通知和RP发现消息流到网络边界之外:
int s0
ip multicastboundary 10
防止候选RP的欺骗:
在映射代理上全局命令:
ip pim rp-announce-filter rp-list acl[group-list acl]
如:ip pimrp-announce-filter rp-list 10 group-list 20
access-list 10 permit host 172.16.2.2
access-list 20 deny 239.0.0.0 0.0.255.255
否定的自动RP声明:
ip pim send-rp-announce loopback0 scope 16group-list 10
access-list 10 per 224.0.0.015.255.255.255.255
access-list 10 deny 225.1.1.0 0.0.0.255
候选RP会向组范围225.1.1.0 0.0.0.255发送一个否定的RP声明,强迫组播组仍然处于密集模式,当映射代理接收到一个否定的RP声明时,它就会否决掉任何积极的RP声明(在否决声明的组范围内),如果没有配显示的deny则不会发否定的RP声明
PIM自举路由器机制:
原理:
候选RP把其候选RP广播经过单播直接发送到当前候选的BSR
候选RP每60秒发送一次,保持时间60*2.5=150s
BSR(候选自举路由器,bootstrap router)用一跳一跳的特殊BSR消息流(分布)把所有组到RP映射信息分布到网络中的所有路由器。
按跳流动的BSR消息和对BSR单播的候选RP广播消除了组播的需要。
BSR消息包含一套已知的组到RP候选的映射信息,每台路由器运行相同的哈希算法为给定的组选择当前活动的RP,如果当前RP失效,则网络中的所有路由器快速容易的选出一个新的RP
可以配置多个候选BSR,但是只有一个BSR成为主BSR(优先级高),如果所有BSR失效,那么路由器会停止接收定期的BSR消息,并且其组到RP映射信息也同时到期,路由器将切换到一个静态配置的RP,如果没有则切换到密集模式。
自动RP一个RP是整个处于ACL组播范围的RP,但是在PIMv2 BSR中,因为根据哈希算法一个候选RP可能只是其ACL组播范围某一部分的RP。
BSR消息组播到所有PIM路由器(224.0.0.13)组播组(TTL值为1)。PIMv2路由器相邻的路由器接收BSR消息并从其他接口重新组播出去,TTL为1。BSR消息含有当前BSR的IP地址,如果一个路由器充当RP的时候要通过BSR消息了解到当前BSR的IP地址才能把RP消息单播给当前BSR。
配置:
把路由器配置成候选RP:
ip pim rp-candidate loopback0 group-list 10[group-list acl][interval secs]
把路由器配置成候选BSR:
ip pim bsr-candidate interfacehash-mask-length [priority] //默认BSR优先级为0,如果掩码为30,那么每4个组播地址映射到同一个RP
限制BSR消息:
接口:ip pim border
注意:只是让接口既不发送也不接收PIMv2BSR消息,防止BSR消息流入或流出网络。防止了BSR流出网络那么外部的候选RP就不知道内部的当前BSR地址(在BSR消息中),也就防止了外部RP发单播消息给内部BSR
不影响正常的PIM消息流(如加入和剪枝,组播信息流等)
管理RP:
如果一个路由器没有被配置成一个组的RP,但是这个路由器还是可能成为这个组的RP:如当一台路由器收到(*,G)加入消息,而这条消息的RP地址为自己时,就会把自己当做RP;当收到注册消息而注册的RP为自己时,也会成为RP。
限制命令:
所有路由器上全局:ip pimaccept-rp rp-address|auto-rp [group-list acl]
如果过滤器承认这个RP和组地址的组合那么RP就是合法的,否则拒绝或忽略,如果没有可选的group-list那么默认所有的组
如果用auto-rp那么自由已经被选作组的RP的路由器才能接收和处理(*,G)加入消息和PIM注册消息
有三种形式的命令:
1. ip pim accept-rp rp-address[group-list acl] //可出现多次
2. ip pim accept-rp auto-rp[group-list acl] //RP地址必须在组到RP映射缓存中,而这个猪不能是自动RP组播组(224.0.1.39和224.0.1.40),和第三种形式的命令互斥
3. ip pim accept-rp 0.0.0.0 [group-list acl] //通用RP项,与任何RP地址匹配,和第二种形式命令互斥
路由器从上而下匹配这个表,寻找第一个字段匹配的RP地址,如果找到且不是自动RP项则看group-list是否承认这个组,如果承认则允许这个RP地址作为该组的合法RP,否则拒绝;如果匹配的是自动RP,那么当group-list拒绝时则匹配通用RP项的group-list(如果有的话),有则允许,如果还没有才拒绝。如果匹配到结尾都没有找到匹配的第一个字段(RP),则拒绝。
例子1:
ip pim accept-rp 172.16.8.2 group-list 10
ip pim accept-rp auto-rp group-list 11
ip pim accept-rp 0.0.0.0group-list 12
允许172.16.8.2成为group-list 10的RP,RP缓存有的可以成为group-list 11的RP,RP缓存有但是group-list 11拒绝的可以继续匹配group-list12,如果有则可以成为RP,没有则不允许
例子2:
ip pim accept-rp 0.0.0.0group-list 12
让除了group-list 12以外的所有组都只工作在密集模式
注:没有必要为224.0.1.39和224.0.1.40使用ip pimaccept-rp 的deny语句,因为这两个组会自动采用deny语句比便不干涉正常的密集模式传送自动RP信息
定义“最后的壕沟”RP(即所有候选RP失效则用静态RP,防止转化为密集模式):
ip pim rp-address 172.16.9.1 10
access-list 10 deny 224.0.1.39
access-list 10 deny 224.0.1.40
access-list 10 permit any
CCIE学习笔记之组播