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

  BGP路由宣告和IGP路由宣告区别

  我们知道IGP路由协议,在宣告路由时,不同IGP路由协议,对应宣告路由的方式都各有不同;比如RIP宣告路由,只需要宣告对应网络主类地址即可;ospf宣告网络,只需要对应宣告的网络能够包含对应网络即可;只有宣告了网络,对应邻居关系才会建立,然后自动学习对端宣告和学习到的网络;对于BGP来说,它和IGP不一样;首先BGP的邻居关系建立和宣告网络是手动分开实现的,它不像IGP那么智能;IGP只要邻居关系正常建立,对应网络就会自动从对方那里学习到;而BGP只有明确、精确宣告了以后,对端才能学习到对应网络;其次BGP不同类型的邻居,对应路由传递规则也有所不同;再其次BGP宣告网络,后面直接跟子网掩码或者掩码位数;而IGP里ospf宣告网络,对应后面是跟的反掩码;RIP不需要跟掩码,直接宣告对应主类地址;

  BGP数据库

  BGP路由信息处理过程

  提示:BGP路由处理过程如上图所示,首先当BGP从邻居收到一条新的更新,首先会将对应路由存入Adj-RIB-in(未经处理的路由信息)这个数据库中,然后再将对应信息传入输入策略引擎中进行匹配,看看是否有入站策略,只有满足对应入站策略的路由才会被存入LOC-RIB(本地路由路由信息)表中,然后再通过计算将对应路由最终存入ip路由表中;如果本端要将一条路由发送给邻居,首先会看对应ip路由表是否存在对应路由,如果有,就把对应路由与出站策略进行匹配,只有满足出站策略的路由才会被放置到adj-RIB-Out(即将要发出去的RIB信息)这张表中,然后在发送给邻居;总的处理流程是先进adj-rib-in,这张表类似缓冲区,它会存放邻居发送到所有更新,然后根据入站策略进行过滤,把满足入站策略的路由存入Loc-RIB表中,这张表类似缓存表,然后根据loc-RIB中的内容进行计算,最终将路由存入ip路由表;对于发送给邻居的更新,首先它会从loc-RIB这张表中检索对应路由信息,通过出站策略过滤,将符合出站策略的路由存入adj-RIB-out表中,这张表类似缓存表,即这种表中的所有路由都是满足出站策略的路由,都是即将可以发送给邻居的路由;

  BGP路由宣告规则

  1、只有明确宣告的网络才会发送给邻居;

  2、宣告的网络必须能精确地在路由表中找到;

  3、多条路径时,只选最优的给自己使用;

  4、只把自己使用的最优路由宣告给邻居;

  5、从EBGP学习到的路由会宣告给所有邻居;

  6、从IBGP学习到的路由只传一跳;

  7、从IBGP学习到的路由会宣告给EBGP;

  实验:如下拓扑,分别使用回环口建立邻居

  分析:使用回环口建立BGP邻居,首先对应回环口的路由必须可达;在同一个AS内部,我们可以使用IGP路由协议,对应不再同一AS我们只能使用静态路由,让对应回环接口的路由互通;其次IBGP需要更改更新源为对应回环接口;EBGP除了要更改更新源以外,对应还要修改TTL值,原因是EBGP之间建立邻居,对应数据包的TTL值为1,所以为了能够正常建立邻居,我们需要将对应数据包的TTL值;

  ·R1的配置

sys
sys R1
int g0/0/0
ip add 12.0.0.1 24
int lo 1
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 123
router-id 1.1.1.1
peer 2.2.2.2 as 123
peer 2.2.2.2 con lo 1

  R2的配置

sys
sys R2
int g0/0/0
ip add 12.0.0.2 24
int lo 2
ip add 2.2.2.2 32
int g0/0/1
ip add 23.0.0.2 24 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
net 23.0.0.2 0.0.0.0 bgp 123
router-id 2.2.2.2
peer 1.1.1.1 as 123
peer 1.1.1.1 con lo 2
peer 3.3.3.3 as 123
peer 3.3.3.3 con lo 2

  R3的配置

sys
sys R3
int g0/0/0
ip add 23.0.0.3 24
int lo 3
ip add 3.3.3.3 32
int g0/0/1
ip add 34.0.0.3 24 ospf 1 router-id 3.3.3.3
area 0
net 23.0.0.3 0.0.0.0
net 3.3.3.3 0.0.0.0 ip route-s 4.4.4.4 32 34.0.0.4 bgp 123
router-id 3.3.3.3
peer 2.2.2.2 as 123
peer 2.2.2.2 con lo 3
peer 4.4.4.4 as 4
peer 4.4.4.4 con lo 3
peer 4.4.4.4 ebgp-max-hop

  R4的配置

sys
sys R4
int g0/0/0
ip add 34.0.0.4 24
int lo 4
ip add 4.4.4.4 32 ip route-s 3.3.3.3 32 34.0.0.3 bgp 4
router-id 4.4.4.4
peer 3.3.3.3 as 123
peer 3.3.3.3 con lo 4
peer 3.3.3.3 ebgp-max-hop

  验证:查看所有路由器,看看是否是两两建立起BGP邻居?

  提示:可以看到对应邻居关系都established,邻居关系正常;

  BGP路由宣告--->本地宣告

  在R1上宣告8.8.8.8 32的网络,看看是否能够正常宣告?

  提示:BGP宣告网络的方式有两种,一种是network本地宣告,另外一种是引入宣告,即引入外部路由进bgp;从上面的实验可以看到,我们本地没有8.8.8.8/32网络的路由,对应在bgp里也是无法正常宣告;即在bgp里宣告网络,首先对应网络要存在自己的ip路由表;

  在R1上添加Lo 2 接口,并配置ip地址为8.8.8.8/32

  在bgp里宣告8.8.8.8网络

  提示:可以看到对应宣告网络,默认不跟掩码,它会按对应网络的主类掩码进行宣告;但它会提示我们对应网络不存在;如果后面的掩码和路由表中的掩码不匹配,也会提示我们对应网络不存在;这也意味着bgp宣告网络不能像ospf那样,只要宣告的网络能够包含对应网络即可;在bgp里必须精确宣告;所谓精确宣告就是指路由表中的路由掩码是多少对应在bgp里宣告时掩码就必须是对应的掩码;其次bgp的掩码是正掩码或者掩码的位数;这是和ospf不一样的地方;

  查看R2是否能够正常学习到R1宣告的网络呢?

  提示:可以看到只要R1精确宣告对应网络以后,R2是能够正常学习到对应路由;

  验证:查看R3是否能够正常学习到R1发布的路由呢?

  提示:可以看到R3并没有通过BGP学习到任何路由;说明R1宣告的路由R3没有学习到;这是因为R1和R2建立的是IBGP类型邻居,IBGP路由只传一跳;

  在R1上查看宣告的8.8.8.8路由传递给那些路由器学习过?

  提示:可以看到R1只把8.8.8.8宣告给R2,并没有宣告给R3,所以对应R3是肯定收不到对应R1的宣告;解决办法是R1和R3建立邻居;

  在R2上新建lo22接口,并配置ip地址为192.168.22.22/24 ,然后宣告进bgp,看看对应那些路由器能够正常学习到?

  在R2查看192.168.22.22/24的路由宣告给那些路由器了呢?

  提示:可以看到对应R2宣告的网络,对应R1和R3都能正常学习到;

  验证:查看R1和R3是否学习到R2宣告的网络?

  提示:可以看到对应R2宣告的网络,R1和R3都能正常学习到,对应下一跳都是2.2.2.2;这是因为R2和R1和R3建立的是IBGP类型邻居,对应路由只传一跳;

  验证:查看R4的路由,看看是否能够正常学习到R2发布的路由呢?

  提示:可以看到在R4上能够正常学习到R2发布的路由,对应路由的下一跳为3.3.3.3;这是因为R2发布的路由被R3学习到;而R3和R4建立的是EBGP类型邻居;在BGP里EBGP类型邻居,它是可以互传路由的;并且也会自动修改下一跳地址;所有R4能够正常学习到R2发布的路由,对应下一跳为R3;

  验证:在R4上新建lo44 ,并将接口地址配置为44.44.44.44/32,在bgp里宣告

  验证:在R3上查看是否学习到R4发布的路由呢?

  提示:在R3上查看bgp路由表,对应R3能够正常学习到R4发布的路由;其下一跳为4.4.4.4;

  验证:在R2上查看bgp路由表,看看是否能够学习到R4发布的路由呢?

  提示:可以看到虽然R2能够正常学习到R4发布的路由,但是对应路由是不可用的(没有星号,表示路由不可用);R2之所以能够学习到R4发布的路由,是因为R4发布的路由被R3学习到(EBGP间路由可以互传);而R2和R3由属于IBGP邻居(IBGP邻居关系,路由只传一跳),所以R2能够学习到R4发布的路由;在R2上看到R4发布的路由之所以不可用,原因是IBGP类型邻居,传递路由时不会自动修改下一跳地址为自己;所以在R3上学习到的路由下一跳是多少,对应R2学习到的下一跳地址就是多少;不可用的原因是R2没有去往4.4.4.4的路由;所以它不知道怎么去往下一跳,当然对应路由也就无法正常使用;解决办法,在R3上强制更改下一跳为自己;

  在R3上修改传递给2.2.2.2的路由,下一跳修改为自己

  验证:再次在R2上查看对应bgp路由表,看看44.44.44.44/32的路由是否可用了?

  提示:可以看到现在R2学习到的路由,其下一条为R3,对应路由也从原来的不可用变为可用(有星号了);

  总结:通过上述实验我们可以看到bgp宣告路由,首先宣告的路由在本地路由表中可以查看到,即对于宣告者来说,宣告的路由必须是最优的路由(存放在ip路由表中的路由对于本地路由器来说就是最优路由),其次默认情况下BGP建立起邻居不会宣告任何网络,只有宣告者手动明确、精确宣告以后,对应路由才会被邻居学习到;邻居类型为IBGP,对应路由只传一跳(为了防止环路);EBGP邻居类型,是可以正常互相传递路由;EBGP类型邻居,在互传路由时会自动修改路由为自己,然后再宣告给对端邻居;而IBGP类型邻居,不会自动修改下一跳为自己,只有手动使用命令强制将对应路由修改为自己,然后传递给邻居;

  BGP路由宣告--->引入宣告

  引入宣告其实就是将外部路由引入只BGP,其命令为import-route

  示例:在R1上新建静态路由,然后将对应静态路由引入至bgp

  提示:引入路由通常结合路由策略使用;

  查看R1引入的5.5.5.5的路由

  提示:引入路由至BGP对应在bgp路由表中表现的为OGN为问号,表示引入的路由;其下一跳为0.0.0.0表示下一跳为自己;

  验证:查看R2是否学习到R1引入宣告的5.5.5.5的路由呢?

  提示:可以看到对应R2能够正常学习到R1引入的路由;其下一跳为1.1.1.1;引入宣告和本地宣告只是宣告的方式不同,两者都遵循上述的路由宣告规则和传递规则;

  BGP宣告缺省路由

  BGP和ospf一样,默认情况下都不会引入缺省路由,只有手动使用命令允许

  示例:在R2上新建一条缺省路由,然后在bgp里发布

  提示:上述命令只是表示允许将缺省路由引入至BGP;默认是不允许引入缺省路由;

  在R2上引入静态至bgp

  验证:在R1或R3上查看,是否学习到R2发布的缺省路由呢?

  提示:可以看到R1和R3都能正常学习到R2发布的缺省路由;其实R4也能正常学习到R2的缺省路由;是因为R3学习到的路由会传递给R4(EBGP),并且还会将下一跳修改为自己再传递给R4;如下

  除了上述通过命令允许引入缺省路由的方式发布缺省路由,还可以直接向邻居宣告一条缺省路由,不管本地是否存在缺省路由

  验证:在R2上取消缺省路由发布,删除缺省路由,然后直接使用命令向R3发布一条缺省路由

  验证:查看R3是否学习到一条缺省路由?

  提示:可以看到R3学习到一条缺省路由,其学习到的方式是通过IGP内部学习到的;和上面引入的方式不同;这条命令是向指定路由发送缺省路由,不管本地是否有缺省路由,对应邻居收到都会生成一条缺省路由,将下一跳指向对端;

HCNP Routing&Switching之BGP路由宣告的更多相关文章

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

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

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

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

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

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

  4. HCNP Routing&Switching之BGP防环机制和路由聚合

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

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

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

  6. HCNP Routing&Switching之BGP基础

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

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

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

  8. HCNP Routing&Switching之IS-IS路由聚合和认证

    前文我们了解了IS-IS路由渗透和开销相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15302382.html:今天我们来聊一聊IS-IS路由聚合和认 ...

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

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

随机推荐

  1. QT学习日记篇01(1)-QT界面初探- *.pro文件详解

    一: 项目管理文件(.pro文件) 项目管理文件用于记录项目的一些设置,以及项目包含文件的组织管理 后缀为".pro"的 文件是项目的管理文件,文件名就是项目的名称,如Demo.p ...

  2. Django的form组件基本使用——生成标签

    from django.contrib import admin from django.urls import path from app01 import views urlpatterns = ...

  3. Redis消息的发布与订阅

  4. C# Dapper基本三层架构使用 (一、架构关系)

    Dapper是一款轻量级ORM工具.如果你在小的项目中,使用Entity Framework.NHibernate 来处理大数据访问及关系映射,未免有点杀鸡用牛刀.你又觉得ORM省时省力,这时Dapp ...

  5. rootfs -根文件系统制作

    目录 目录 目录 概述 概念 根文件系统是什么 根文件系统中有什么 根文件系统的形式 Busybox 简介 什么是 linuxrc VFS 简介 Busybox 工具 Busybox 目录结构 Men ...

  6. TypeScript 中命名空间与模块的理解?区别?

    一.模块 TypeScript 与ECMAScript 2015 一样,任何包含顶级 import 或者 export 的文件都被当成一个模块 相反地,如果一个文件不带有顶级的import或者expo ...

  7. 学习PHP中的国际化功能来查看货币及日期信息

    做为一门在世界范围内广泛使用的编程语言,国际化能力往往是衡量一个编程语言是否能够大范围流行的重要内容.特别是对于 PHP 这种以 Web 页面编程为主战场的语言来说,国际化能力更是重中之重.在 PHP ...

  8. 让tp6显示详细的错误信息及行号

    方法一:默认情况下Ttp6不会显示错误信息,在开发环境下想要查看错误信息需要将Config目录下的app.php文件的show_error_msg改成true 但是这样显示的信息也不够完整, 要看到更 ...

  9. PHP7兼容mysql_connect的方法

    在php7版本的时候,mysql_connect已经不再被支持了,本文将讲述在代码层面实现php7兼容mysql系列,mysql_connect等操作. PHP7不再兼容mysql系列函数,入mysq ...

  10. ECShop 文章添加缩略图功能

    为 ECShop 文章添加缩略图     ECShop 文章不包含缩略图比较遗憾,不过它的文章里包含一个附件上传,而且一般不会用到,这样,我们就可以改动一下,让它成为缩略图. 首先在 includes ...