BGP原理综述

简介

定义

是一种实现在自治系统之间传输路由,并选择最佳路由选路的一种距离矢量路由协议。

目的

用来在不通自治系统之间传输路由信息。BGP能够进行路由优选、避免路由环路、更高效率的传递路由和维护大量的路由信息。

优势
  • 使用TCP作为传输协议,提高了路由传输的可靠性;
  • 可自定义路由汇总和使用路由惩罚实现路由的稳定性;
  • BGP使用丰富的路径属性来实现灵活的路径选择策略;

基本概念

AS

在一个实体管理下拥有相同路由选择策略的管理实体,每一个AS都必须拥有一个唯一的AS号码,AS号码分为16位和32位,通常只使用16位AS号,范围从1-65535,其中1-64511为公有AS号码,64512-65535为公有AS号码;

BGP邻居分类:
  • IBGP
    1.运行在同一AS内部的设备之间建立起BGP邻居关系为IBGP邻居关系;
    2.设备从IBGP邻居收到的BGP路由不会再传递给它的其它IBGP邻居,此规则叫做IBGP水平分割,用于IBGP路由防环,所以为了使IBGP路由将学习到的路由传递给它的IBGP邻居,使全网都能学习到BGP路由,IBGP邻居必须全互联,为了解决全互联带来的BGP对等体连接过多的问题,可以使用BGP路由反射器BGP联盟解决。
  • EBGP
    1.处于不同AS之间的设备形成的邻居关系为EBGP邻居关系;
    2.设备在将路由发送给它的EBGP邻居时会在AS-PATH属性中携带自身AS号码,收到路由的设备如果发现路由携带的AS号码同自身AS号码相同,则丢弃此路由,此为EBGP防环机制;
    3.IBGP同步机制:BGP在将路由发送给它的EBGP邻居时,首先会检查是否通过IGP学习到了此路由,如果没有就不会将此路由发送给它的EBGP邻居,现在所有厂商基本默认关闭了IBGP同步功能。
BGP router-id
  • BGP router-id是一个32位的标识,一般为ip地址;
  • BGP router-id在BGP建立邻居关系时会在open报文中携带,所以必须唯一;
  • 可以手动配置BGP router-id,如果没有手动配置则优先选择loopback接口的ip地址,如果没有配置loopback接口,则选择物理接口ip地址最大的地址作为router-id;

BGP工作原理

BGP报文
  • open报文
    用来建立BGP对等体连接
  • update 报文
    用来传递BGP路由信息
  • notification 报文
    用来中断BGP连接
  • keepalive报文
    用来保持BGP连接
  • router-refresh 报文
    用来在BGP路由策略改变时请求对等体重新发送update报文更新路由信息。只有支持路由刷新功能的BGP设备才会响应此报文
BGP状态机
  1. idle状态
    路由器默认处于idle状态,当配置一个BGP进程或者手动重置了BGP进程触发一个start事件后,BGP将尝试同其它对等体建立TCP连接,置为connect状态。BGP在任何状态下如果收到了notification报文或者TCP拆连通知后将置为idle状态。
  2. connect 状态,BGP启动连接重传定时器,等待TCP连接完成
  • 如果TCP连接完成,BGP将发送一个open报文,进入opensent状态;
  • 如果TCP连接失败,则BGP转至active状态直至连接重传定时器超时;
  • 如果连接重传计时器超时TCP连接任然未成功,BGP将继续尝试和其它对等体建立连接关系,停留在connect状态;
  1. active 状态,BGP总是在尝试同对等体建立TCP连接
  • 如果TCP连接建立成功,关闭重传定时器并且BGP发送一个open报文,转为opensent状态;
  • 如果TCP连接失败,那么BGP将停留在active状态到连接重传定时器超时;
  • 如果连接重传定时器超时后任未建立连接则转至connect状态;
  1. open-sent 状态,BGP等待对等体的open报文,对收到的open报文验证AS号码、认证、版本等
  • 如果收到对等体正确的open报文,则发送keepalive报文给对等体,转至openconfirm状态;
  • 如果收到了错误的open报文,则发送notification报文给对等体,转至idle状态;
  1. open-confirm状态,BGP等待对等体的keepalive报文或者notification报文
  • 如果收到对等体的keepalive报文,则转至establish状态
  • 如果收到对等体的notification报文,则转至idle状态
  1. establish状态,BGP将可以和对等体交互update报文,keepalive报文、notification报文和router_refresh报文;
  • 如果收到正确的update报文和keepalive报文,BGP将保持establish状态;
  • 如果收到错误的update报文和keepalive报文,BGP将向对等体发送notification报文并转至idle状态;
  • 收到router-refresh报文,如果路由器支持路由刷新功能,则向对等体发送update报文更新路由,如果不支持则忽略此报文;
  • 如果收到TCP拆连通知,这转至idle状态;
BGP路由更新原则:
  • 从IBGP邻居学习到的BGP路由,只会通告给它的EBGP邻居,并在BGP属性值中携带自身AS号码;
  • 从EBGP邻居学习到的BGP路由会通告给它的所有IBGP邻居和EBGP邻居,发送给BGP邻居是路由下一跳属性不会改变,发送给EBGP邻居是路由下一跳属性改变未路由更新源地址;
  • 当到达同一目的地有多个路由时,BGP只会选择一条最优的发送给它的对等体;
  • 所有对等体发送的路由,BGP都会接收;

BGP与IGP路由交互

BGP路由

BGP协议本身不自己发现路由,因此需要将其它路由协议发现的路由导入BGP,为了将一个AS的路由传递给另外一个AS需要在AS边缘路由器将路由导入BGP,导入方式有两种:

  • 重分发
    通过重分发的方式将其它路由协议注入到BGP路由表,BGP起源属性为imcomplete
  • network
    通过network命令逐条将已经在路由表中存在的路由引入到BGP,BGP起源属性位IGP
  • 在BGP路径选择过程中,如果前面的属性都没有选择出最优路由的话,起源属性IGP优先于重分发的imcomplete
BGP引入IGP

如果需要在AS边缘路由器将一个AS学习来的BGP路由引入IGP,请最好配置路由策略对需要引入的路由进行过滤,以免因为大量的BGP路由引入对设备性能和网络造成影响

BGP安全性

  • BGP认证
    • MD5认证:
    • keychain认证:
  • 设置TTL

BGP路由属性和路径选择

BGP只会将BGP路由表中最优的一条路由发送给其对等体。

BGP属性
  • 公认必选属性
    所有BGP设备必须能识别此类属性,并且在BGP update报文中必须包含此类属性
    • as-path属性
      当BGP给对等体发送从自身引入的路由时:
      • 当发送给它的EBGP对等体时,BGP将自身AS号添加到AP-PATH属性中发送给它的对等体;
      • 当发送给它的IBGP对等体时,BGP会在update报文中创建一个空的AS-PATH列表发送给对等体;
        当对等体传播从其它对等体的update报文中学习到的路由时
      • 当发送给它的EBGP对等体时,BGP会将自身的AS号码添加到update报文的as-path列表的前面发送给它的对等体;
      • 当发送给它的IBGP对等体时,BGP不会对update报文中的as-path属性做修改;
    • origin 属性
      此属性记录了路由是怎么进入BGP路由表的。
      使用network命令通告的路由,此属性位IGP;
      使用重分发的方式将其它路由协议重分发进BGP时,此属性位imcomplete;
      IGP属性优先于imcomplete;
    • next-hop 属性
      BGP在给它的EBGP邻居使用update报文通告路由时,下一跳属性填写为建立邻居关系时的路由更新源地址;
      BGP在将产生于自身的路由使用update报文通告给它的IBGP邻居时,下一跳属性填写为建立邻居关系时的路由更新源地址;
      BGP在将从EBGP邻居学习到的路由使用update报文通告给它的IBGP邻居时,下一跳属性不做修改;
  • 公认可选属性
    所有BGP设备必须能识别此类属性,但是BGP在update报文中不一定要包含此属性
    • local-pre 属性
      只在本AS内部传播,用来标识流量离开本AS的最佳路径;
  • 可选可传递属性
    BGP设备可能不能识别此属性,如果没有识别,任然可用接受并通告给它的对等体
    • commuity 属性
      可以使用community属性来标识相同路由策略的一组路由,便于路由策略的灵活运用;
  • 可选不可传递属性
    BGP设备可能不能识别此属性,如果没有识别,则忽略此属性并且不向它的对等体通告;
    • MED属性
      MED(Multi-Exit Discriminator)属性用于判断流量进入AS时的最佳路由,当一个运行BGP的设备通过不同的EBGP对等体得到目的地址相同但下一跳不同的多条路由时,在其它条件相同的情况下,将优先选择MED值较小者作为最佳路由。
      MED属性仅在相邻两个AS之间传递,收到此属性的AS一方不会再将其通告给任何其他第三方AS。MED属性可以手动配置,如果路由没有配置MED属性,BGP选路时将该路由的MED值按缺省值0来处理
    • originator_id 属性
      用于在路由反射器场景下标识路由的起源,当路由第一次被路由反射器反射时,添加此属性为路由的router-id,如果已经有此属性则不在做变更;当一个路由器收到的路由如果 originator_id同自身router-id相同,则丢弃此路由。
    • cluster_list 属性
      用于在多路由反射器场景下标识一个路由反射器集群,防止路由环路;一个集群中的多台路由反射器必须设置相同的cluter_list;
BGP路由选择规则:
  1. 路由优先级属性,一般为厂家自定义,本地有效;
  2. local_preference 优先选择本地优先级属性小的为最优路由;
  3. 优先选择本地产生的路由、手动聚合的路由、network进入的路由、重分发的路由;
  4. 优先选择AS-PATH最短的路由
  5. 优先选择origin属性为IGP>imcomplete
  6. 优先选择MED值小的路由;
  7. 优先选择从EBGP邻居学习到的路由;
  8. 优先选择BGP路由下一跳IGP度量值最小的路由;
  9. 如果都是从EBGP收到的路由,优先选择最早收到的路由;
  10. 优先选择cluster_list最短的路由;
  11. 优先选择router-id最小的路由;
  12. 优先选择具有最小ip address的对等体的路由;

你可能感兴趣的:(BGP原理综述)