BGP 技术详解:邻居、报文、状态与路由全解析

目录

BGP邻居

BGP报文 

Open关键报文

BGP工作原理

BGP状态

BGP路由

产生方式

得到BGP路由

BGP路由通告原则

BGP的防环机制

BGP同步

BGP下一跳属性

路由黑洞 

BGP选路属性

协议首选值(PrefVal)

本地优先级(Local-pref)

        修改方式

优选本地生成的路由

优选AS路径(AS_Path)最短的路由

Origin(起源属性)

OSPF,IS-IS,BGP概念区分


BGP邻居

IBGP:邻居的AS号和自身的AS号相同,建立的BGP邻居叫IBGP邻居  默认TTL为255
EBGP:邻居的AS号和自身的AS号不同,建立的BGP邻居叫做EBGP邻居 默认TTL为1

BGP报文 

  • Open报文
    • 协商BGP参数
  • Update报文
    • 交换路由信息
  • Keepalive报文
    • 保持邻居关系
  • Notification报文
    • 差错通知
  • Route-Refresh报文
    • 用于在改变路由策略后请求对等体重新发送路由信息

Open关键报文

  • My AS:用于标识自身所处的AS,邻居的open报文中My AS要和本地配置的一致。
  • Version:用于标识当前的BGP版本,向下兼容。 BGP4
  • Hold Time:默认为180s,即keeplive时间的3倍,双方不一致将会协商使用一个小的。
  • Router ID:用于标识自身的BGP Router ID,不能和邻居冲突。
  • 认证:认证需要通过
  • 地址簇必须要有一种协商成功。(IPv4 单播  IPv4 组播  不能成功  IP四单播 IP四单播  可以成功)
  • 默认情况下在华为设备携带了3中可协商能力:1、IPV4单播路由功能 2、路由刷新能力 3、4字节AS号支持能力

BGP工作原理

BGP状态

  • Idle状态是BGP初始状态。在Idle状态下,BGP拒绝邻居发送的连接请求。也不会想邻居发送TCP syn,只有32s之才会向邻居发送TCP syn 并且将邻居转为connect状态。
    • 卡在idle状态的原因:本地没有去往邻居的路由。
  • connect状态下,BGP启动连接重传定时器(connect。Retry),等待TCP完成连接
    • 如果TCP连接成功,那么BGP向对等体发送open报文,并转至opensent状态。
    • 如果TCP连接失败,那么BGP转至Active状态。(邻居开BGP了 但是没配邻居)
    • 如果连接重传定时器超时,BGP仍没有收到BGP对等体的响应,那么BGP继续尝试和其它BGP对等体进行TCP连接,停留在connect状态
    • 常见卡在connect状态的原因:
      • 邻居没有启用BGP协议
      • 沿途路径存在流量过滤将TCP SYN拒绝了
      • EBGP邻居建立没有配置多跳。
  • Active状态下,BGP总是在试图建立ICP连接。
    • 如果TCP连接成功,那么BGP向对等体发送Open报文,关闭连接重传定时器,并转至opensent状态
    • 如果TCP连接失败,那么BGP停留在Active状态
    • 如果连接重传定时器超时,BGP仍没有收到BGP对等体的响应,那么BGP转至connect状态
  • opensent状态下,BGP等待对等体的open报文,并对收到的0pen报文中的AS号、版本号、认证码等进行检查。
    • 如果收到的open报文正确,那么BGP发送Keepalive报文,并转至openconfirm状态
    • 如果发现收到的open报文有错误,那么BGP发送Notification报文给对等体,并转至Idle状态。
  • Established状态下,BGP可以和对等体交换Update、Keepalive、Route-refresh报文和Notification报文
    • 如果收到正确的Update或Keepalne报文,那么BGP就认为对端处于正常运行状态,将保持BGP连接。
    • 如果收到错误的Update或Keepalive报文,那么BGP发送Notification报文通知对端,并转至ldle状态
    • Route-refresh报文不会改变BGP状态。
    • 如果收到Notification报文,那么BGP转至ldle状态
    • 如果收到TCP拆链通知,那么BGP断开连接,转至ldle状态。

BGP路由

产生方式

  1. 通过network的方式,将本地路由中的路由发布出去。
  2. 通过import-route的方式,将其他协议的路由引入到BGP协议中。
  3. 通过手动聚合的方式,产生一条聚合路由(汇总)
  4. 通过自动聚合的方式,产生一条聚合路由。

得到BGP路由

  • IBGP邻居给我传递
  • EBGP邻居给我传递
  • 自身产生BGP路由

BGP路由通告原则

BGP只会将有效路由中的最优的BGP路由通告给邻居。

* -valid 有效       > - best 最优

  • 自身产生的BGP路由通告给所有的BGP邻居。
  • 从IBGP邻居收到的路由,不会传递给IBGP邻居。(防环)
  • 从IBGP邻居收到的路由,会传递给EBGP邻居
  • 从EBGP邻居收到的路由,会传递给IBGP邻居
  • 从EBGP邻居收到的路由,会传递给EBGP邻居

  • [AR2-bgp] peer 4.4.4.4 next-hop-local    //从EBGP邻居接受的路由,发送给IBGP邻居的时候修改下一跳地址。
  • @只需要在AS的边界设备上,针对本AS内的IBGP邻居配置。

BGP的防环机制

  • AS内的防环使用IBGP水平分割机制(只传一跳),即从IBGP邻居收到的路由不会传递给另一个IBGP邻居
  • AS之间的防环原则:利用了BGP的路由属性,即BGP将路由发送给EBGP邻居的时候会将自身的AS号添加到as-path列表中;并且规定,从EBGP邻居收到的路由如果携带自身AS号 则不接受该路由

BGP同步

BGP下一跳属性

  • 自身产生的路由发送给所有BGP邻居的时候,下一跳自动修改。
  • 从EBGP邻居接受的路由发送给IBGP邻居的时候,下一跳不会自动修改。
  • 从EBGP邻居接受的路由发送给EBGP邻居的时候,下一跳自动修改。
  • 从IBGP邻居接受的路由发送给EBGP邻居的时候,下一跳自动修改。
  • 从IBGP邻居接受的路由不存在发送给IBGP邻居的情况(防环)

自动修改,指的是将路由传递给该邻居的时候,下一跳修改为自身与该其建立邻居的接口IP。

路由黑洞 

  • BGP同步:用于防止BGP路由黑洞问题。
  • BGP同步机制:即从IBGP邻居接受的路由,需要在IGP表中存在,才会发送给EBGP邻居如果IGP表中不存在,则不会发送给EBGP邻居。
  • 为什么不使用BGP同步解决路由黑洞问题呢?
    1、BGP同步并不能完全解决路由黑洞问题。
    2、出现了更好的解决方案:
    • AS内部采用全互联的IBGP邻居架构,让所有路由器都运行BGP协议,从而使每台路由器都能够学到BGP路防止黑洞产生。
    • 在ASBR上将BGP路由引入到IGP协议中。(该方法已被淘汰)
    • 在ASBR之间建立GRE隧道,解决路由黑洞问题。(节约成本)
    • 通过LSP隧道解决路由黑洞问题。

BGP选路属性

  • 如果此路由的下一跳不可达,忽略此路
  • 由优选协议首选值(PrefVal)最高的路由
  • 优选本地优先级(LocalPref)最高的路由
  • 优选本地生成的路由
  • 优选AS路径(AS_Path)最短的路由
  • 比较Origin属性,依次优选Origin类型为IGP、EGP、Incomplete的路由
  • 优选MED值最低的路由
  • 优选从EBGP邻居学来的路由(EBGP路由优先级高于IBGP路由)
  • 优选到BGP下一跳IGP Metric较小的路由
  • 优选Cluster_List最短的路由
  • 起源ID
  • 优选RouterID最小的路由器发布的路由
  • 比较对等体的IP Address,优选从具有较小IP Address的对等体学来的路由

协议首选值(PrefVal)

  • 华为BGP私有属性
  • 只在本地有效,不会传递给任何的BGP邻居
  • 默认等于0
  • BGP的选路属性
  • 越大越优
  • 针对发送给邻居的BGP路由,无法修改协议协议首选值,因为报文中并不携带
  • 针对接受BGP邻居的路由,才可修改协议首选值
  • 当不想影响其他设备的选路,只针对单台设备的选路进行控制的时候,建议使用协议首选值。

本地优先级(Local-pref)

  • 公认任意属性
  • 只在一个AS内部进行传递,不会传递给EBGP邻居。
  • 用于BGP路由的路径选择(默认100,越大越优先。)
  • 应用在AS内存在多个出口的时候选择一个出口访问外部网络
  • EBGP路由不携带本地优先级属性,对于不携带本地优先级属性的BGP路由,设备将会认为这个BGP路由的本地优先级为默认本地优先级(默认的本地优先级为100)

        修改方式

  • 针对接受或者发送给BGP邻居的路由进行修改(Route-policy)
    • EBGP邻居之间out方向不可以修改  (图AR2上  写路由策略的方向)
    • EBGP邻居之间in方向可以修改
    • IBGP邻居之间in,out方向可以修改
  • 修改默认的本地优先级
    • [AR2-bgp]default local-preference //修改默认的本地优先级。
    • 关键点:在只会在对没有本地优先级属性的路由生效
  • 哪些BGP路由没有本地优先级
    1. 自身产生的:network和import-route指令变成的BGP路由没有本地优先级。
    2. 邻居传递的:EBGP邻居传递的路由默认没有本地优先级。

优选本地生成的路由

  • 手动聚合>自动聚合>etwork>import-route>邻居传递的
  • 当下一跳等于127.0.0.1(手动聚合,自动聚合)或者0.0.0.0(network,import-route)的时候,路由即为本地产生的。

优选AS路径(AS_Path)最短的路由

  • 公认必遵属性
  • 用于AS之间的防环属性
  • 用于BGP路由的路径选择。

AS之间防环:

  1. BGP设备将路由发送给EBGP邻居的时候,将会在路由的as-path属性中添加自身的AS号
  2. BGP设备从EBGP邻居接受路由的时候,将会检查路由的AS-PATH属性列表,如果存在自身的AS号,那么将忽略这条BGP路由。
  3. IBGP邻居之间不会做AS-PATH的防环检测。
  • 路径选择:当存在去往同一个目的地的多条BGP路由时,比较两条路由的AS-PATH列表,越短越优。
  • 修改方式:AS-path在任何BGP邻居之间的in/out方向都可以进行修改。
  • @apply as-path 100 100 additive    //在原有的As-path列表中添加新的AS号,
  • @apply as-path 100 100 overwrite  //使用指定的AS-path覆盖原有的as-path
  • @apply as-path none overwrite       //清空原有的as-path列表。

Origin(起源属性)

  • 公认必遵属性
  • 描述了这条路由是如何成为BGP路由的
  • 用于BGP路径选择
  • i:表明该路由是通过network的方式变成的BGP路由。
  • ?:表明该路由是通过import-route的方式变成BGP路由。
  • e:表明是从EGP协议学到的该路由。
  • 选路规则:i > e > ?

MED

  • 可选非过渡属性
  • 用于BGP路由的路径选择(越小越优)
  • 如果报文中不携带MED值,默认认为MED为0.

MED的修改方式:

  • 在所有BGP邻居之间 in/out方向均可修改。

MED选路方式:

  • @默认情况下,只有当两条BGP路由as-path列表中,最左边的AS号相同的时候,才会进行MED的比较
  • @compare-different-as-med //命令用来配置允许比较来自不同自治系统中的邻居的路由的MED值

​​​​​​​如何产生MED呢:

当一条路由变为BGP路由的时候,这个路由在IP路由表中的Cost为多少,那么变为BGP路由之后MED为多少。

​​​​​​​华为MED通告原则:

  1. 自身始发的路由,MED会通告为IBGP和EBGP邻居。
  2. 从IBGP邻居接受的路由,传递给EBGP邻居的时候,不携带MED值
  3. 从EBGP邻居接受的路由,传递给IBGP邻居的时候,携 带 MED值。
  4. 从EBGP邻居从EBGP邻居接受的路由传递给EBGP邻居的时候,不携带MED

BGP负载

(负载后路由表就有2条路)

  • maximum load-balancing 
  • INTEGER<1-8>  //针对IBGP和EBGP路由都开启负载
  • ebgp        //针对EBGP路由开启负载
  • ibgp       //针对IBGP路由开启负载
  • 无论BGP设备是否开启负载功能,都会选取出一条最优的BGP路由传递给邻居。
  • BGP路由的负载需要满足AS-PATH属性完全相同:
    1. AS号码一样
    2. AS号出现的顺序一样
    3. AS号数量一样
  • load-balancing as-path-ignore       命令用来设置路由在形成负载分担时不比较路由的AS-Path屋性

BGP团体属性

  • 作用:
    1. 用于限制BGP路由的传递范围。
    2. 类似于IGP协议中的tag值,用于对BGP路由实现标记。
  • 分类:
    • 公共团体团体属性:
      • Internet:默认所有路由都有该属性,具有该属性BGP路由发送给所有的BGP邻居但是依然要满足BGP路由的通告原则。
      • No_Advertise:收到有这个属性的路由,自身不会发送给其他的BGP邻居
      • No_Export:收到了有这个属性的路由,不会发送给EBGP邻居。
      • No_Export subconfed:收到具有该属性的路由,不会发送给成员EBGP邻居,也不会发送给EBGP邻居。
      • 团体属性,不会自动传递给BGP邻居,需要在邻居之间配置开启团体属性的传递功能
      • [AR1-bgp]peer 10.8.12.2 advertise-community //开启团体属性的传递能力
      • 团体属性可以携带多个,当存在冲突的时候,传递范围小的生效。
    • 自定义团体属性:一共四个字节,用于对BGP路由实现标记。
      • aa:nn : aa占用2个字节,nn占用两个字节,取值都是0~65535。一般使用路由器所在的AS号表示。
      • 团体号:4个字节全部使用十进制数进行表示,其中存在一些私有的范围,具体查看华为说明。
  • 团体列表:
    • ipcommunity-fiter本质作用就是为了对BGP路由的团体属性进行匹配
    • 类型:
      • 基本:编号范围1-99,直接配置团体属性,匹配BGP路由。
      • 高级:编号100-199,通过正则表达是匹配BGP路由。默认拒绝所有

OSPF,IS-IS,BGP概念区分

概念 \ 协议OSPFIS - ISBGP
区域相关区域是将自治系统划分的不同部分,每个区域有独立链路状态数据库,通过 ABR 实现区域间通信区域用于划分网络,减少链路状态信息传播范围和处理复杂度自治系统(AS)是由一个或多个网络运营商或组织管理的一组路由器和网络,具有唯一的自治系统编号(ASN),是 BGP 路由信息交换的基本单位
边界路由器ABR(区域边界路由器)连接同一个自治系统内的不同区域,负责区域间路由信息传递和汇总
ASBR(自治系统边界路由器)连接 OSPF 自治系统与其他自治系统,引入外部路由并通告内部路由到其他自治系统
Level - 1/2 路由器兼具区域内和区域间路由功能,类似 OSPF 的 ABR,连接不同区域
Level - 2 路由器主要负责区域间路由,维护整个网络拓扑信息
EBGP(外部边界网关协议)用于不同自治系统之间的 BGP 连接,交换跨自治系统的路由信息
IBGP(内部边界网关协议)用于同一个自治系统内部的 BGP 连接,在自治系统内传播路由信息
路由信息交换单元链路状态通告(LSA),用于描述网络拓扑结构和链路状态链路状态协议数据单元(LSP),类似于 LSA,描述路由器连接状态和邻居关系等BGP 通过路径向量协议交换路由信息,携带丰富的属性来描述路由的特征和策略
特殊机制路由反射器(RR)用于解决 IBGP 全连接问题,将从一个 IBGP 邻居学到的路由反射给其他邻居
联盟(Confederation)将大型自治系统划分为多个子自治系统,简化管理和路由策略配置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值