边界网关协议(BGP)是运行于 TCP 上的一种自治系统的路由协议。 BGP 是唯一一个用来处理像因特网大小的网络的协议,也是唯一能够妥善处理好不相关路由域间的多路连接的协议。 BGP 构建在 EGP 的经验之上。 BGP 系统的主要功能是和其他的 BGP 系统交换网络可达信息。网络可达信息包括列出的自治系统(AS)的信息。这些信息有效地构造了 AS 互联的拓朴图并由此清除了路由环路,同时在 AS 级别上可实施策略决策。

BGP采用TCP179端口,BGP不会学习路由, 只会传递路由。

* BGP选路原则

   -- BGP的度量值叫做路径属性
   -- 特有的属性包括:
      * 公认必选属性(AS-Path、Next-hop...)
      * 公认自选属性
      * 任选可透明传递属性
      * 任选非可透明传送属性
   -- 公认属性:
      * 公认属性可以是强制性的, 意味这所有的BGP更新消息都必须包含该属性, 也可以是自己选择的, 更新中不包含此属性
      * 所有的BGP执行都必须识别它
   -- 公认必选属性
      * 强制更新中必须有此属性
   -- 公认可选属性
      * 在更新中可能有此属性
   -- 任选属性
      * 不要求BGP一定要支持该属性
   -- 任选可透明传送
      * 即使BGP过程不支持该属性, 它也应当接受包含该属性的路由并且把这个路径传送给它的对端
   -- 任选非可透明传送
      * 不识别该属性的BGP过程可以忽略包含这个属性的更新消息并且不向它的对端公布这条路径


 * BGP路径属性包括:

   -- AS-path *
   -- Next-hop *
   -- Origin(起源) *
   -- Local preference(本地优先)
   -- MED(度量值)
   -- Others
注: *表示公认必选属性


 * AS Path属性

   -- 是公认的必遵属性
   -- 是路由到达一个目的地所经过的一系列自治系统号码的有序列表
   -- 当BGP将一条路由通告到其他AS时, 便会把自己的AS号添加在AS_PATH列表的最前面


 * Next-hop属性

   -- 是公认的必遵属性
   -- 为BGP发言者指示去往目的地的下一跳


 * Origin属性

   -- ORIGIN属性定义路由信息的来源, 标记一条路由是怎么成为BGP路由的
   -- 三种ORIGIN属性类型:
      * IGP: 表明路由信息产生与AS内部, 一般是聚合路由或者通过Network命令引入的路由
      * EGP: 路由信息是通过EGP协议引入的(一般情况下, 不会碰到此标记, 因为EGP已经被淘汰了)
      * Incomplete: 路由信息是通过其他方式得来的, 一般是通过Import引入的IGP路由或者静态路由
   -- 在其它选路因素相同的情况下, BGP会比较ORIGIN属性来确定到达相同目的地的最佳路由
      * IGP优先于EGP, EGP优先于Incomplete


 * Local Preference属性  ----> 只适用于本地自治系统内选路

   -- 公认的可选属性
   -- 默认优先级为100
   -- 用于AS内IBGP邻居选择离开本AS时的最佳路由, 它表明BGP路由器的优先级
   -- 仅在IBGP对等体之间交换, 不传递或通告给其他EBGP对等体
   -- 本地优先级属性是一个公认可选的属性, 只在本地AS有效和传递, 默认值是100

 * BGP的路由优选

   -- 首先丢弃下一跳(NEXT_HOP)不可达的路由
   -- 优选weight值最大的路由
   -- 优选本地优先级(LOCAL_PREF)最高的路由
   -- 优选聚合路由
   -- 优选AS路径(AS_PATH)最短的路由
   -- 依次选择ORIGIN属性为IGP、EGP、Incomplete的路由
   -- 优选MED值最低的路由
   -- 依次选择从EBGP、联盟、IBGP学来的路由
   -- 优选吓一跳度量值最低的路由
   -- 优选CLUSTER_LIST长度最短的路由
   -- 优选ORIGINATOR_ID最小的路由
   -- 优选Router ID最小的路由器发布的路由
   -- 优选地址最小的对等体发布的路由



 * MED属性  -----> 适用于外部AS进入本地AS时选路

   -- 本地优先级影响离开AS的因素, 如果想要影响进入AS的因素, 则可以使用MED属性: 
      * 是可选非传递属性
      * 相当于IGP路由协议使用的度量值metric, 当一个AS有多个入口点时, 用于判断流量进入AS时的最优路径
      * 仅在相邻两个AS之间传递, 收到此属性的AS一方不会再将其通告给任何其他第三方AS

 * Weight 权重(Cisco私有) ----> 适用于本地AS去外部AS时选路

   -- 管理权重是CISCO特有的BGP参数, 只适用于一台路由器中的路由
   -- 为从对等体接收的路由分配首选值, 从而影响选路
   -- 权重是不会传递给其它的路由器, 只在本地路由器有效

 * 应用BGP负载分担时的选路

   -- BGP协议本身一定能选出唯一一条到达目的网段的最有路由
   -- 通过配置允许BGP负载分担
   -- BGP的负载分担与IGP的负载分担有所不同:
      * IGP是通过协议自身定义的路由算法, 对到达同一目的地址的不同路由, 将度量值(metric)相等的路由进行负载分担
      * BGP本身并没有路由计算的算法, 但BGP有丰富的选路规则, 可以在对路由进行一定的选择后, 有条件地进行负载分担


  * 管理大型BGP

   -- 大规模BGP网络所遇到的问题
      * BGP对等体众多, 配置繁琐, 维护管理难度大
      * BGP路由表庞大, 对设备性能提出挑战
      * IBGP全连接, 应用和管理BGP难度增加
      * 路由变化频繁, 导致路由更新频繁
   -- 解决大规模BGP网络所遇到的问题
      * BGP对等体众多
        -- 对等体组(Peer Group)
        -- BGP团体(Community)
      * BGP路由表庞大
        -- BGP路由聚合
      * IBGP全连接
        -- BGP路由反射(Route Reflection)
        -- BGP联盟(Confederation)
      * 路由器变化频繁
        -- BGP路由衰减(Route Dampening)


 * 对等体组

   Router(config-router)#
      neighbor [peer-group-name] peer-group
    * 创建对等体组
   
   Router(config-router)#
      neighbor [ip-address] peer-group [peer-group-name]
   
    * 定义一个邻居加入到这个组中来
    * 当有很多策略相同的邻居关系时, 它就变得非常有用
    * 成员可以有不同的入站策略
    * 一个对等体组只需要一次更新实例, 高效
    * 简单化配置