前文我们了解了BGP路由宣告相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15440860.html;今天我们来聊一聊BGP防环机制和路由聚合相关话题;

  BGP防环机制

  我们知道BGP的邻居类型分IBGP和EBGP,对于不同类型邻居关系,它们宣告路由的规则各有不同,对于邻居类型为IBGP,它们宣告路由只会传递一跳;对于邻居类型为EBGP,它们宣告路由是可以传递多跳和IGP传递路由相似,同时IBGP传递路由时,它们不会更改更新源,即宣告者是谁,对应学习的路由下一跳就是谁,我们可以通过命令强制修改更新源为自己,即对端学习到相关路由的下一跳指向自己;对于EBGP来说,EBGP之间传递路由,会自动修改更新,即从哪里学习到对应路由,其下一跳会自动修改为对端;对于BGP防环来说,我们也是从两种邻居类型分别来讨论;

  AS内(IBGP)防环机制

  水平分割,从IBGP收到的更新不会发布给IBGP(IBGP更新只传递一跳)

  提示:如上图所示,对于在同一AS内的4个路由器,RTA,RTB,RTC,RTD,它们手拉手建立邻居,对于RTA发布的更新,对于RTD来说它是学习不到的,原因是IBGP邻居关系,对应更新只传一跳;同样的道理,RTD发布更新,RTA也是学习不到的,对于RTB和RTC来说,是能够正常学习到;

  解决水平分割带来的路由学习不完整方案

  1、IBGP邻居全互联

  提示:如上图所示,RTA,RTB,RTC,RTD两两相互建立邻居,这样实现邻居全互联,不管哪个路由器发布更新,对应其他路由器都能够收到更新;这样虽然理论上解决了水平分割带来的路由学习不完整,但同时这样也给管理员带来很多不便,比如我们要增加一台路由,对应所有路由器都要更改配置,这样配置和维护的开销太大;一般路由器众多的情况下不推荐使用这样方式;

  2、路由反射器(Route Reflector)

  提示:路由反射器(Route Reflector),这个技术有点类似ospf里的DR;即在一个AS内,其中一台路由器作为路由反射器RR(Route Reflector),其它路由器作为客户端(Client)与路由反射器之间建立IBGP连接。路由反射器在客户机之间传递(反射)路由信息,而客户端之间不需要建立BGP连接。这样一来相比全互联就大大简化了配置和维护上的开销;

  3、联盟(confederation)

  提示:联盟就是将一个大的AS分割成多个小的AS,AS之间建立EBGP邻居,从而实现一个路由器发布更新,能够传递个其他所有路由器(其他小AS之间建立EBGP);

  AS间(EBGP)防环机制

  AS间建立的都是EBGP邻居,它的防环机制主要依靠AS_PATH这个属性,as_path是BGP更新内的一个重要属性,它主要用来描述一条路由所经过的AS;如果接受路由器发现AS_PATH里有与本地AS号,则对应路由就会被丢弃;

  提示:如上图所示,RTB发送一条更新,对应AS_PATH就会记录对应的AS号,对应RTC收到RTB的更新,首先要看看AS_PATH里是否有自己as号,如果没有则接受此更新,如果有就丢弃;RTC接受了RTB的更新后,它会继续向它的其他EBGP发送此更新,即RTC会向RTA和RTB发送此更新;同样的道理RTA和RTB都会检查对应更新中as_path里是否有自己的as号,如有,则丢弃,如果没有则接收;这样一来发出去的路由就不可能回到发出更新路由器所在as,即环路也就无法产生;

  总结:BGP的防环机制主要从两种邻居类型来说,对于IBGP来说,主要依靠水平分割机制,即IBGP间,路由更新只传递一跳;对于EBGP来说,主要依靠AS_Path这个属性来防止环路,即收到路由更新的BGP路由器,发现AS_Path 里有自己的AS号,则对应路由会被丢弃;

  BGP路由聚合

  BGP的路由聚合有三种方式,分别是静态聚合、自动聚合和手动聚合;聚合的目的就是精简路由表,从而优化路由器的性能;

  BGP静态路由聚合

  所谓静态聚合是指我们手动在BGP路由器上手动配置一条聚合后的静态路由,其出接口指向NULL0口,然后在通过network在BGP里进行宣告;我们知道对于BGP路由宣告规则中,对应宣告的路由必须存在路由表才可以被宣告;为了解决这样的限制,我们手动配置一条聚合后的静态路由,这样一来就解决了路由不存在路由表的限制,然后通过network宣告聚合后的路由即可;其他路由器收到的更新就只有聚合后的路由,从而实现路由聚合;

  BGP自动路由聚合

  BGP自动路由聚合,只能对引入的IGP路由进行主类掩码聚合,而原引入的明细路由被抑制,不会被有选和发布给BGP邻居;开启自动聚合命令summary automatic;

  BGP手动路由聚合

  手动路由聚合是指通过命令对引入和本地路由进行聚合,聚合命令aggretage;优先级顺序是手动聚合大于自动聚合;

  实验:如下拓扑配置BGP,分别对明细路由进行静态路由聚合、自动路由聚合和手动路由聚合;

  R1的配置

sys
sys R1
int g0/0/0
ip add 12.0.0.1 24
int lo 1
ip add 172.16.0.1 24
int lo 2
ip add 172.16.1.1 24
int lo 3
ip add 172.16.2.1 24
int lo 4
ip add 172.16.3.1 24
int lo 11
ip add 1.1.1.1 32 ospf 1 router-id 1.1.1.1
area 0
net 12.0.0.1 0.0.0.0
net 1.1.1.1 0.0.0.0 bgp 12
router-id 1.1.1.1
peer 2.2.2.2 as 12
peer 2.2.2.2 con lo 11

  R2的配置

sys
sys R2
int g0/0/0
ip add 12.0.0.2 24
int g0/0/1
ip add 23.0.0.2 24
int lo 22
ip add 2.2.2.2 32 ospf 1 router-id 2.2.2.2
area 0
net 12.0.0.2 0.0.0.0
net 2.2.2.2 0.0.0.0 ip route-s 3.3.3.3 32 23.0.0.3 bgp 12
router-id 2.2.2.2
peer 1.1.1.1 as 12
peer 1.1.1.1 con lo 22
peer 3.3.3.3 as 3
peer 3.3.3.3 con lo 22
peer 3.3.3.3 ebgp-max-hop

  R3的配置

sys
sys R3
int g0/0/0
ip ad 23.0.0.3 24
int lo 33
ip add 3.3.3.3 32
int lo 1
ip add 192.168.0.1 24
int lo 2
ip add 192.168.1.1 24
int lo 3
ip add 192.168.2.1 24
int lo 4
ip add 192.168.3.1 24 ip route-s 2.2.2.2 32 23.0.0.2 bgp 3
router-id 3.3.3.3
peer 2.2.2.2 as 12
peer 2.2.2.2 con lo 33
peer 2.2.2.2 ebgp-max-hop

  验证BGP邻居状态

  提示:可以看到BGP邻居都正常建立起来;

  在R1上使用静态聚合的方法将172.16网段路由聚合后宣告

  1、创建聚合后的静态路由,出接口指向NULL 0 口

  2、通过network在bgp里宣告聚合后的路由

  验证:在R2和R3上查看bgp路由表,看看是否学习到R1聚合后的路由呢?

  提示:可以看到R2和R3上都能正常学习到R2聚合后的路由;不同的是R2学习聚合后的路由其下一跳指向R1,而R3学习到聚合后的路由下一跳指向R2,原因是R2和R3是EBGP类型邻居,在同步路由时会自动修改更新源为自己,即下一跳会自动修改为自己;

  在R1上使用自动聚合的方法将172.16网段路由聚合

  在R1上取消将172.16网段聚合后在bgp里宣告

  在R1上开启自动聚合

  提示:开启自动聚合时,系统会提示我们自动聚合只能对引入的路由进行聚合,本地宣告的路由是不能聚合的;

  验证:在R1上将172.16网段路由引入至BGP

  验证:在R1上查看引入的路由

  提示:可以看到开启自动聚合后,对应引入的172.16网段路由,自动被聚合为172.16.0.0/16,而明细路由被抑制;

  验证:在R2和R3上查看bgp路由表,看看是否学习到R1自动聚合后的路由呢?

  提示:可以看到R2和R3都能正常学习到R1自动聚合后的路由;

  在R3上使用手动聚合聚合192.168网段路由

  1、将直连路由引入只bgp

  验证:查看R3bgp路由表,看看192.168网段路由是否引入至BGP

  提示:可以看到192.168.网段路由已经引入至BGP;

  2、手动聚合192.168网段路由

  验证:查看bgp路由表,看看对应明细路由是否被聚合?

  提示:可以看到bgp路由表中多了一条被聚合后端路由;但明细路由没有被抑制;这是因为默认情况下,手动聚合明细路由不会被抑制;必须手动使用detail-suppressed参数来抑制明细路由;

  使用detail-suppressed参数来抑制明细路由

  验证:查看bgp路由表,看看明细路由是否被抑制?

  提示:可以看到加了detail-suppressed参数以后,对应明细路由就被抑制了;

  验证:在R2和R1上查看bgp路由表,看看是否学习到R3手动聚合的路由呢?

  提示:可以看到R1和R2都能正常学习到R3手动聚合后的路由,但R1上不可用,原因是R3没有去往3.3.3.3的路由;解决办法在R2上开启修改更新源为自己;

  在R2上开启修改更新源为自己

  验证:在R1上查看bgp路由表,看看对应路由是否可用?

  提示:可以看到现在R1学习到192.168.0.0/22的路由是可用最优状态;

  as-set参数:保留原有as号码属性;该参数主要用来防止环路产生;默认情况下手动聚合路由后,它会以本端为起始点向周围邻居宣告,对应as号码是本端bgp路由器所在as号,这样一来就可能产生环路;如上,我们不在R3上手动聚合路由,只是在R3上引入路由,然后在R2上做手动聚合,看看对应聚合后的路由是否会照常发送给R3呢?

  在R3上取消手动路由聚合

  在R2上验证看看是否正常学习到R3引入的直连路由呢?

  提示:可以看到R3引入的路由R2能够正常学习到;

  在R2上做手动路由聚合,并抑制明细路由

  验证:查看R2bgp路由表,看看是否生成了聚合后的路由?明细路由是否被抑制?

  提示:可以看到在R2上生成了一条聚合后的路由,对应明细路由也都抑制了;

  验证:在R1上查看bgp路由表,看看是否正常学习到R2聚合后的路由?

  提示:可以看到现在R1学习到底192.168.0.0/22这条路由,对应的没有记录as号,说明这条路由是有同一as内部的其他路由器发布;和刚才看到的不一样,刚才R3手动聚合,对应R1学习到的路由,对应as号为3,而现在没有了;很显然不应该这样;

  再来看看R3是否学习到R2手动聚合后的路由呢?

  提示:可以看到R3也正常学习到R2手动聚合后的路由;对应as号为12;本来是R3发布的明细路由,被R2聚合后变为了再次发给了R3,这很不合理呀,正常情况R3是始发地,就不应该收到R2聚合后的路由;解决办法,在R2上做路由聚合时,加上as-set参数,保留原有as号

  在R2上手动聚合加上as-set

  验证:在此在R3上查看bgp路由表,看看R2聚合后的路由是否会被收到呢?

  提示:可以看到R3现在就没有接收R2发布的聚合后的路由,原因是R2发布的聚合后的路由中as_path里包含R3的as号,所以对应路由会被R3丢弃;

  验证:在R2上查看192.168.0.0/22这条路由通告给那些路由器,是否有R3在内呢?

  提示:可以看到R2是通告给R3,只不过R3查看对应路由里as-path里包含自己所在as,所以R3拒绝接收R2发布的聚合后的路由;

  验证:在R1上查看对应路由,看看对应路由现在as号是多少?

  提示:现在可以看到R1学习到的路由和R3发布手动聚合的路由一样,对应path属性为3,这说明该条路由的始发地as号为3,而非本地其他路由器;

HCNP Routing&Switching之BGP防环机制和路由聚合的更多相关文章

  1. HCNA Routing&Switching之RIP防环机制

    前文我们了解了RIP的基础概念.RIP的特点.RIP报文格式.RIP度量以及RIP配置认证等相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/150085 ...

  2. HCNP Routing&Switching之BGP路由属性和优选规则

    前文我们了解了BGP防环机制和路由聚合相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15458110.html:今天我们来聊一聊BGP路由属性和选路规 ...

  3. HCNP Routing&Switching之BGP基础

    前文我们了解了路由注入带来的问题以及解决方案相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15362604.html:今天我们来学习下新的路由协议BG ...

  4. HCNP Routing&Switching之BGP邻居建立条件、优化和认证

    前文我们了解了BGP相关概念.AS相关概念以及BGP邻居类型.基础配置等,相关回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15370838.html:今天我们 ...

  5. HCNP Routing&Switching之BGP路由宣告

    前文我们了解了BGP报文结构.类型以及邻居状态相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15422924.html:今天我们来聊一聊BGP路由宣告 ...

  6. HCNP Routing&Switching之BGP路由控制

    前文我们了解了BGP的路由属性和优选规则相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15489497.html:今天我们来聊一聊BGP路由控制相关话 ...

  7. HCNP Routing&Switching之BGP报文结构、类型和状态

    前文我们了解了BGP的邻居建立条件.优化以及BGP认证相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15395723.html:今天我们来聊一聊BGP ...

  8. HCNP Routing&Switching之BGP路由过滤和AS-Path-Filter

    前文我们聊了下通过修改BGP路由属性来影响路由,从而达到控制BGP路由的目的:回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15495585.html:今天我们 ...

  9. HCNP Routing&Switching之BGP团体属性和团体属性过滤器

    前文我们了解了BGP的路由过滤已经as-path过滤器的使用相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15542559.html:今天我们来聊一聊 ...

随机推荐

  1. 虚拟数字存储表——SQLServer2012可高用

    窗口函数之虚拟数字辅助表 数字辅助表是一个整数序列,可以用它来完成多种不同的查询任务.数字表有很多任务,如生成日期和时间值序列,及分裂值列表.通常,建议在数据库中保存这样一个永久表,并填充尽可能多的数 ...

  2. linux 下 I/O 多路复用初探

    本文内容整理自B站up主 free-coder 发布的视频:[并发]IO多路复用select/poll/epoll介绍 引入 一般来讲,服务器在处理IO请求(一般指的是socket编程)时,需要对so ...

  3. https://www.cnblogs.com/spec-dog/p/11161744.html

    转自:https://www.cnblogs.com/spec-dog/p/11161744.html 在软件项目研发管理过程中,是否经常出现这样的场景:开发人员不知道什么时候转测:项目经理拿个Exc ...

  4. Maven专题1——坐标与依赖

    1. 坐标 坐标用来唯一定位一个Maven构件: GAV(必需):groupId, artifactId, version packaging(可选): 可取值如:jar(缺省), war, pom, ...

  5. 自己用树莓派做了一个电视盒子,还可以看优酷和cctv

    我刚接触树莓派时间不久,安装过raspberry(树莓派官方系统),ubuntu mate,openelec等系统,openelec是一个电视盒子系统,但是我的用的电视机是一个老式的,老是出现闪屏的问 ...

  6. 回忆之placeholder

    直接看效果点这里 HTML <!DOCTYPE html> <html> <head lang="zh-CN"> <meta charse ...

  7. vijos题解

    Vijos题解 题库地址:https://vijos.org/p P1001 谁拿了最多奖学金 题意:按照指定要求计算奖学金,直接用if判断即可 #include<iostream> us ...

  8. js不记录某个url链接历史访问,返回时不返回该链接

    (function(){ var fnUrlReplace = function (eleLink) { if (!eleLink) { return; } var href = eleLink.hr ...

  9. 修改文件权限后,再git pull后提示文件已修改

    问题: 从git上面pull下来脚本文件,在Linux上面执行.执行chmod +x 后,如果再次有修改文件,git pull 的提示会终止.每次都要使用 git checkout -- <fi ...

  10. mac php安装扩展 如 seoole apcu

    //下载 --安装 --复制扩展文件到对应目录 wget https://pecl.php.net/get/apcu-5.1.7.tgz tar -zvcf pcu-5.1.7.tgz cd 到解压目 ...