目录

1.BGP概述

2.BGP的数据包

3.BGP的状态机

4.BGP的工作原理

4.1 BGP的路由信息处理

4.2 工作过程

4.3 对等体间的交互原则

      IBGP与IGP的同步


1.BGP概述

  • BGP是一种用于自治系统(Autonomous System )之间的动态路由协议。主要用于交换AS之间的可达路由信息,构建AS域间的传播路径,防止路由环路的产生,并在AS级别应用一些路由策略。当前使用的版本是BGP-4(RFC4271)。BGP作为的Internet外部路由协议标准,被广泛应用于ISP之间。
  • BGP是一种外部网关路由协议(EGP),与OSPF、RIP等内部网关路由协议不同,其着眼点不在于自动发现网络拓扑,而在于在AS之间选择最佳路由和控制路由的传播。
  • BGP使用TCP作为传输层协议(监听端口号为179),提高了协议的可靠性,且不需要专门的机制来保证连接的可控性,BGP进行域间的路由选择,对协议的稳定性要求非常高,使用TCP协议的高可靠性来保证BGP协议的稳定性。
  • TCP的三次握手条件使得TCP只能基于单播工作,同时BGP需要非直连建邻;BGP基于IGP之上,先运行IGP使BGP设备间IP可达,然后BGP才能基于TCP建立非直连邻居关系。
  • 路由更新时,BGP只发送更新的路由,大大减少了BGP传播路由所占用的带宽,适用于在Internet传播大量的路由信息。
  • BGP从设计上避免了环路:AS之间,BGP通过携带AS路径信息来标记途经的AS,带有本地AS号的路由将被丢弃;AS之内,BGP在AS之内学到的路由不再通告给AS之内的其他邻居,避免了AS内的环路。
  • BGP具有丰富的属性用来替代IGP协议中的度量进行选路;并且默认不被用于负载均衡,通过各种选路规则选出一条最佳路径。

2.BGP的数据包

基于TCP的179端口工作;故BGP协议中所有的数据包均在TCP会话建立后基于TCP会话来传递及保障可靠性。BGP协议首先是通过TCP的三次握手来寻找邻居。

BGP的运行是通过消息驱动的,共有Open、Update、Notification、Keepalive和Route-Refresh等5种消息类型。

  • Open消息:是TCP连接建立后发送的第一个消息,用于建立BGP邻居间的连接关系。正常仅收发一次,携带Route-id,hold time(默认3min)。
  • Update消息:用于在对等体之间交换路由器信息,携带路由条目(目标网络号+各种属性)。一条Update消息可以发布多条属性相同的可达路由信息,也可撤销多条不可达路由信息。
  • Keepalive消息:周期1min查询邻居关系是否存在;实际保活TCP会话。
  • Notification消息:当BGP检测到错误状态时,就向邻居发出Notification消息之后,之后BGP连接会立即终端。
  • Route-Refresh消息∶通过OPEN消息告知BGP Peer本地支持路由刷新能力。在所有BGP路由器使能Route-Refresh的情况下,如果BGP的入口路由策略发生了变化,本地BGP路由器会向对等体发布Route-Refresh消息,收到此消息的对等体会将其路由信息重新发给本地BGP路由器。这样,可以在不中断BGP连接的情况下,对BGP路由表进行动态刷新,并应用新的路由策略。

BGP使用TCP建立连接,本地监听端口为179。和TCP连接建立相同,BGP连接的建立也要经过一系列的对话和握手。TCP通过握手协商通告其端口等参数,BGP的握手协商的参数有:BGP版本、BGP连接保持时间、本地的路由器标识(Router ID)、授权信息等。这些信息都在Open消息中携带。

BGP连接建立后,如果有路由需要发送则发送Update消息通告对端。Update消息发布路由时,还要携带此路由的路由属性,用以帮助对端BGP协议选择最优路由。在本地BGP路由变化时,要通过Update消息来通知BGP对等体。

经过一段时间的路由信息交换后,本地BGP和对端BGP都无新路由通告,趋于稳定状态。此时要定时发送KEEPALIVE消息以保持BGP连接的有效性。对于本地BGP,如果在保持时间内,未收到任何对端发来的BGP消息,就认为此BGP连接已经中断,将断开此BGP连接,并删除所有从该对等体学来的BGP路由。

当本地BGP在运行中发现错误时(如对端BGP版本本地不支持、本地BGP收到了结构非法的Update消息等),要发送Notification消息通告BGP对等体。本地BGP退出BGP连接时,也需发送Notification报文。

3.BGP的状态机

状态机:BGP共有6个状态机:Idle、connect、active、opensent、openconfirm、Establish

Idle状态是BGP的初始状态,在Idle状态下,BGP 拒绝邻居发送的连接请求,只有在收到本设备的start事件后,BGP才开始尝试和其他BGP邻居建立TCP连接,并转至Connect状态(start事件是管理员配置BGP的过程,或者重置一个已经存在的进程,或者由软件重置BGP引起的)。

  • Connect状态下BGP启动连接重传计时器(默认32秒),等待TCP完成连接。
  • 此阶段主动发起TCP连接,如果TCP连接成功,那么BGP向对等体发送Open报文,并转至opensent状态;如果TCP连接失败,那么BGP转至Active状态。
  • 如果连接重传计时器超时,BGP仍没有收到对等体的响应,那么BGP继续尝试和其他对等体进行TCP连接,并停留在connect状态
  • 如果发生其他事件(由系统或者管理员操作),则退回到idle状态。

Active状态下,BGP总是在试图建立TCP连接。

  • 此阶段等待对方发起TCP连接。如果TCP连接成功,那么BGP向对等体发送Open报文,关闭连接重传定时器,并转至opensent状态;如果TCP连接失败,那么BGP停留在Active状态。
  • 如果连接重传定时器超时,BGP仍没有收到对等体的响应,那么BGP转至Connect状态。

在Opensent状态下,BGP等待对等体的Open报文,并对收到的open报文中的AS号、版本号、认证码等进行检查。

  • 如果收到Open报文正确,那么BGP发送keepalive报文,并转至Opencomfirm状态;如果发现Open报文有错误,那么BGP发送Notification报文给对等体,并转至idle状态

在Establish状态下,BGP可以和对等体交换Update、Keepalive、route-refresh、Notification报文

  • 如果收到正确的Update和Keepalive报文,那么BGP就认为对等体处于正常运行状态,并保持BGP连接;如果收到错误的Update和Keepalive报文,BGP就会发送Notification报文通知对端,并转至idle状态。
  • Route-refresh报文不会改变BGP的状态。
  • 如果收到TCP断开请求,那么BGP断开连接,并转至idle状态。

4.BGP的工作原理

4.1 BGP的路由信息处理

  • IP路由表(IP-RIB):全局路由信息库,包括所有IP路由信息
  • BGP路由表(Loc-RIB):BGP路由信息库,包括本地BGP Speaker选择的路由信息
  • 邻居表:对等体邻居清单列表
  • Adj-RIB-In:对等体宣告给本地BGP Speaker的未处理的路由信息库
  • Adj-RIB-Out:本地BGP Speaker宣告给指定对等体的路由信息库

当从对等体接收到更新数据包时,路由器会把这些更新数据包存储到路由选择信息库(Routing Information Base,RIB)中,并指明是来自哪个对等体的(Adj-RIB-In)。这些更新数据包被输入策略引擎过滤后,路由器将会执行路径选择算法,来为每一条前缀确定最佳路径。

得出的最佳路径被存储到本地BGP RIB(LOc-RIB)中,然后被提交给本地IP路由选择表(IP-RIB),以用作安装考虑。

除了从对等体接收来的最佳路径外,Loc-RIB也会包含当前路由器注入的(被称为本地发起的路由),并被选择为最佳路径的BGP前缀。Loc-RIB中的内容在被通告给其他对等体之前,必须通过输出策略引擎。只有那些成功通过输出策略引擎的路由,才会被安装到输出RIB(Adj-RIB-Out)中。

4.2 工作过程

管理员定义邻居的IP地址,前提要求对邻居IP可达(IGP可达);启动BGP协议后,先目标端口为179进行TCP的三次握手来建立TCP的会话;

  • 会话建立后,收发open报文来建立邻居关系,生成邻居表
  • 邻居关系建立后,邻居间使用update 共享路由条目,在收发了路由信息后,本地生成BGP;Bgp表中装载本地发出及接收到的所有路由条目;
  • 之后路由器将BGP表中的最优路径(不一定是最佳选路,仅为BGP参数最佳)加载于路由表中;

收敛完成,仅keeplive周期保活即可;

结构突变:

  1. 新增网段 – BGP更新源设备将使用Update来告知本地所有的邻居
  2. 断开网段 – BGP更新源设备将使用Update来告知本地所有的邻居
  3. 无法沟通 – 3min hold time到时时断开邻居关系和TCP会话,之后删除从该邻居处学习到的所有信息;

BGP更新源设备并不一定直连断开或新增网段的设备,而是第一台将该路由发布到BGP协议中的路由器;

4.3 对等体间的交互原则

  1. 从IBGP对等体获得的BGP路由,BGP设备只发布给它的EBGP对等体
  2. 从EBGP对等体获得的BGP路由,BGP设备发布给它所有EBGP和IBGP对等体
  3. 当存在多条到达同一目的地址的有效路由时,BGP设备只将最优路由发布给对等体
  4. 路由更新时,BGP设备只发送更新的BGP路由
  5. 从IBGP邻居学到的路由,只有当IGP中也存在相同的路由时才会宣告给EBGP对等体

IBGP与IGP的同步

将IBGP路由加入到路由表并发布给EBGP对等体之前,会先检查IGP路由表,只有IGP也知道这条路路由时,它才会被加入到路由表,并发布给EBGP对等体。

同步是指IBGP与IGP之间的同步,其目的是避免误导外部AS的路由器。

R4通过BGP学习到R1宣告的10.0.0.0/24网络。R4在将该网络通告给R5之前,会首先检查自己的IGP路由表是否已经存在10. 0.0.0/24网络。如果R4本地IGP路由表项存在10.0.0.0/24网络,则将该网络通告给R5;如果R4本地IGP路由表项不存10.0.0.0/ 24网络,则不能将该网络通告给R5。


BGP属性问题:https://blog.csdn.net/weixin_43997530/article/details/106741945 

 posted on 2020-09-05 11:11  嚴∞帅  阅读(198)  评论(0编辑  收藏  举报