前文我们了解了BGP相关概念、AS相关概念以及BGP邻居类型、基础配置等,相关回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15370838.html;今天我们来聊一聊BGP建立邻居的条件和优化相关话题;

  BGP建立邻居条件

  我们知道动态路由协议能够学习到路由,最基础的就是建立邻居;对于BGP来说,它工作在七层应用层,TCP179端口,所以两个路由器要想建立BGP邻居,首先满足对应两端的网络可达;即邻居地址可达;

  其次,我们配置的邻居地址所在AS号必须是邻居配置中声明的AS号;即本端配置邻居AS号一定是对端邻居所在AS号;

  最后,也是BGP建立邻居中最重要的一点,数据包源ip必须等于对方配置的邻居ip,这个源IP也叫更新源,也将作为路由的下一条IP;即配置邻居的ip地址,必须是邻居发送三次握手的源ip地址;

  提示:如上图所示,本端配置邻居ip地址10.1.1.2,首先本端会根据路由表查找去往10.1.1.2所在网络的路由,这也是配置邻居指定的ip地址,必须可达的原因;在路由表查找到对应路由的出接口后,对应路由器就会封装报文,把出接口的ip地址封装成对应数据包的源ip,把配置邻居ip地址作为目标ip进行封装,然后再从对应接口发送出去;在对端收到本端发送到TCP三次握手,只有三次握手成功以后,后续才会发送open包,keepalived包,这样邻居才能正常建立;

  BGP使用回环口建立邻居

  提示:如上图所示,R3想要本端的3.3.3.3和R1的1.1.1.1建立邻居,首先R3和R1之间3.3.3.3和1.1.1.1的路由要通,在路由通畅的情况下,R3会根据配置,将对应发送tcp三次握手的源ip更改为对应3.3.3.3接口,即更改更新源;然后封装报文从对应物理接口发送出去;在对端收到对应报文以后,首先检查该报文的源ip是不是本地配置的邻居ip地址,如果不是,对应三次握手的报文会被R1拒绝;如果是,那么对应三次握手就会进行下去;只有建立起TCP三次握手以后,对应才会发送BGP open包,对应open包中会封装ASN(as号码),这个号码就是指本端所在AS,即也是对端配置邻居所在AS号;

  实验:如下拓扑,配置bgp使用回环口建立邻居

  分析:根据BGP邻居建立条件,再结合上图,R1和R2通过bgp建立ibgp类型邻居,R2和R3建立ebgp类型邻居;要想R1和R2建立起邻居,首先R1的1.1.1.1的路由和R2的2.2.2.2的路由首先要互通,我们可以通过内部跑一个IGP路由协议(因为R1和R2在同一个AS内,可以使用IGP路由协议,互相学习对方的路由),让R1和R2的路由互通;对于R2和R3,他们各属于不同AS,通常情况下R2和R3要想建立邻居,首先也是R2要有去往3.3.3.3的路由,R3也有去往2.2.2.2的路由,因为他们不属于同一AS,所以不能跑IGP路由协议来学习路由;此时我们只能手动配置静态路由,让R2的2.2.2.2和R3的3.3.3.3互通即可;

  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 12
peer 2.2.2.2 as 12

  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 2
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
peer 1.1.1.1 as 12
peer 3.3.3.3 as 3

  验证:在R1上验证ospf邻居和路由

  提示:可以看到R1上ospf和R2的ospf建立起邻居,对应邻居关系为full状态,并且在ip路由表中也学习到R2宣告的2.2.2.2的路由,说明R1有去往2.2.2.2的路由;

  验证:在R2上查看ospf邻居和ospf路由

  提示:可以看到R2和R1也建立起ospf邻居,对应邻居状态为full,R2也能正常学习到R1的1.1.1.1的路由,说明R1和R2上跑的ospf配置正常;

  验证:查看R1或R2上bgp邻居是否正常建立?

  提示:可以看到R1上bgp邻居2.2.2.2状态是active,并非established,说明邻居关系没有建立起来;

  在R1上抓包

  提示:可以看到当R1向R2发起tcp三次握手时,R2的2.2.2.2拒绝了R1的请求;其实这是因为R1发送tcp三次握手的源ip地址不是R2配置的邻居ip地址,所以R2收到12.0.0.1发来的三次握手请求,R2查看对应邻居列表中并没有配置和12.0.0.1是邻居,所以拒绝了R1的请求;同样的道理R2向R1发起三次握手时,源地址为12.0.0.2,R1收到此类请求,查看自己的邻居列表中没有12.0.0.2,所以也拒绝了R2的请求;

  BGP更改更新源

  在R1上更改发送tcp三次握手的源ip地址为lo1的接口地址

  提示:上述命令表示和2.2.2.2建立邻居使用回环接口1的ip地址作为源ip地址,进行tcp三次握手包封装;

  验证: 在R1上抓包,看看对应源ip地址是否更改为lo1 的接口地址1.1.1.1了呢?

  提示:可以看到R1此时发送tcp三次握手的源ip地址为lo1接口的ip地址,对应三次握手也正常通过;其实在一端配置更新源以后,对应bgp邻居就会正常建立;一般情况建议两边都更改更新源;

  验证:查看R1或R2上bgp邻居是否正常建立?

  在R2上配置更改更新源

  提示:如果之前建立起邻居,配置更改更新源,会导致邻居断掉;其原因是R2此时会以新的更新源封装tcp三次握手包的源ip;如下所示

  提示:可以看到R2配置上更新源以后,对应R2会以lo2接口ip地址作为源ip发送tcp三次握手包,然后再次重新建立邻居;

  通过上述实验可以看到,更新源必须等于对端配置的邻居ip地址,如果两者不相同,这邻居建立不起来;使用回环口建立邻居,需要将更新源更改为对应回环接口ip地址;更改一段即可建立起bgp邻居,但通常建议两端都更改更新源;

  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 ip route-s 2.2.2.2 32 23.0.0.2 bgp 3
peer 2.2.2.2 as 12

  验证:在R2、R3上查看是否有去往对端回环接口ip路由?

  提示:可以看到R2上有去往3.3.3.3的路由,R3上也有去往2.2.2.2的路由;

  在R2上更改更新源

  在R3上更改更新源

  验证:在R2上或R3上查看bgp邻居是否正常建立?

  提示:在R3上查看bgp邻居,对应和2.2.2.2邻居关系为idle,为什么不是established呢?

  在R2上查看bgp邻居

  提示:在R2上查看对应邻居关系也是idle;

  在R2或R3上抓包

  提示:在R2的g0/0/1口可以抓到对应源ip为2.2.2.2向3.3.3.3发起三次握手请求,对应三次握手也是通过了,对应3.3.3.3、2.2.2.2也发送了open包,心跳包为什么邻居关系建立不起来呢?对比之前我们抓到的正常邻居关系包里,我们可以看到在心跳包后面多了notification包,然后后续就tcp4次挥手,断掉了;

  提示:从上面的抓包内容中可以看到,不管是R2还是R3在发送的心跳包,open包,对应ttl值为1;之所以R2和R3建立起邻居以后,马上就断了,其原因就是因为R2发送到包ttl为1;我们知道TTL的值是每经过一次路由以后,对应值减1;在R2的g0/0/1收到R3发送到TTL值为1 的报文,对应报文经过R2路由以后,对应R2的回环口收到此包的TTL就变为0;对于TTL为0的报文,路由器会认为该包无效,所以邻居马上断掉;同样的道理R2向R3发送到包也是经过R3路由以后,对应Rf3的lo3收到的包,对应TTL也为0,所以R3也会发送notification包,然后对应邻居马上断掉;

  BGP多跳技术

  为了解决BGP使用回环口建立ebgp类型邻居,我们可以修改对应报文的TTL值实现邻居关系的建立;

  在R2上修改TTL值为2,看看对应邻居是否正常建立?

  在R2上抓包验证,看看对应发送到包是否TTL值修改为2 了?

  提示:可以看到此时R2发送的open包对应TTL值为我们指定的值;但是邻居还是没有建立;

  提示:在R2的终端中,我们一会就会收到说对应邻居状态从established转变为idle;说明我们的邻居关系非常的不稳定;这里的原因是R3发送的包中TTL值为1,到R2的lo2接口对应TTL值变为0导致邻居关系一会建立,一会断掉;

  在R3上更改TTL值为255

  提示:默认命令后面不跟任何数字,默认就是将对应TTL修改为255;

  验证:在R3上抓包查看,对应发送的报文TTL值是否修改为255?

  提示:可以看到对应R2发送的包TTL值为2,R3发送的包TTL值为255;

  验证:查看bgp邻居是否正常建立?

  提示:可以看到邻居关系现在为稳定状态established;

  通过上述实验可以看到不同AS之间使用非直连网络建立邻居需要修改对应报文的TTL值,原因是不同AS之间建立邻居发送包的TTL值为1,如果不是直连,对应非直连经过路由以后,对应报文的TTL值会减为0,对端收到TTL值为0的包,会认为该包无效,所以会导致邻居关系建立不起来;如果一段修改了TTL值,另一端未修改,那么会导致邻居关系非常不稳定,一会建立,一会断开;通常情况下我们建议ibgp类型邻居使用回环口建立邻居,ebgp使用物理口建立邻居;用回环口建立邻居有一个好处就是对应回环口只要ip地址不变,它几乎都是up的,也就是说在同一as内,推荐使用回环口建立邻居,因为回环口非常稳定;

  BGP身份认证

  在R1上配置认证

  提示:BGP配置认证以后,对应发送的所有包都会启用,即bgp认证是在TCP上做的,并非在专有BGP报文上;

  在R1上抓包

  提示:可以看到R1发送的包对应tcp上会有可选项,对应R2发送的包里没有可选项;我们在R1上配置上认证以后,对应邻居不会马上断掉,它会经过3个keepalived包周期,对应邻居才会断掉;

  在R2上配置bgp认证

  验证邻居关系

  提示:可以看到在R2上配置好认证以后,对应bgp邻居就恢复正常;

HCNP Routing&Switching之BGP邻居建立条件、优化和认证的更多相关文章

  1. HCNP Routing&Switching之IS-IS邻居建立、LSDB同步、拓扑计算和路由形成

    前文我们了解了IS-IS的报文结构和类型相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15260670.html:今天我们来聊一聊IS-IS建立邻居. ...

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

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

  3. HCNP Routing&Switching之BGP基础

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. 【Office Excel】vlookup函数的反向查找实例教程,不只是正向查找,还可以反向查找,实例讲解

    VLOOKUP 反向查询 众所周知,vlookup只能从左向右查找,而不能从右至左的反向查找.为此高手们设计了一个让无数新手迷惑的公式.今天优爱酷将彻底帮同学们解开这个迷团. [例]如下图所示要求根据 ...

  2. Servlet学习笔记(三)之HttpServletResponse

    init() 方法中参数 ServletConfig 对象使用 通过ServletConfig 获得 ServletContext对象 使用 HttpServletRequest 与HttpServl ...

  3. 小程序 mpvue page "xxx" has not been registered yet

    新增了几个页面,改了下目录结构,就开始报这个错. 重启了几次不管用,google 一番也无果. 灵机一动试一下 build npm run build build 版本没报错,OK 然后 $ rm - ...

  4. vue 微信二维码扫码登录,附加 自定义样式

    大概流程:   先安装 微信 的登录, 然后 局部引入,局部注册,方法调用,存 token,跳转路由 npm 安装 npm install vue-wxlogin --save-dev 微信安装 微信 ...

  5. python入门-变量与数据类型

    1.命名规则 变量名只能包含字母.数字和下划线.但不能以数字打头. 变量名不能包含空格 不能与关键字冲突 变量名应尽量简短且具有描述性 2.字符串 python中引号括起的内容,其中引号可以为单引号或 ...

  6. Python - 面向对象编程 - 使用 super() 的一些注意事项

    super() 详解 https://www.cnblogs.com/poloyy/p/15223443.html 多继承中使用 super() class A: def test(self): pr ...

  7. 深入理解SpringBoot核心机制《spring-boot-starter》

    深入理解SpringBoot核心机制<spring-boot-starter> 前言: 对于这几年java火爆天的springBoot我相信大家都有所使用过,在springBoot的项目中 ...

  8. SQL语句分组获取记录的第一条数据的方法

    使用Northwind 数据库 首先查询Employees表 查询结果: city列里面只有5个城市 使用ROW_NUMBER() OVER(PARTITION BY COL1 ORDER BY CO ...

  9. 深度探索-Redis复制

    1.前言 本文介绍了Redis复制的主要流程和设计思想.通过本文的阅读,您大致能理解复制在软件架构方面的通用思想.在阅读本文之前,希望读者首先对Redis有一定的认识,对Redis的事件类型.和事件处 ...

  10. 求1+2+…+n

    求 1+2+...+n ,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). 示例 1: 输入: n = 3 输出: 6 示例 2: ...