BGP学习笔记

BGP的特征:

  • BGP是外部路由协议,用来在AS之间传递路由信息。
  • 是一种增强的距离矢量路由协议(AS_PATH)。
    1. 可靠的路由更新机制(TCP)(目的端口为179,源端口随机生成)
    2. 丰富的Metric度量方法(12条选路原则)。
    3. 从设计上避免了环路的发生
  • 为路由附带属性信息。
  • 支持CIDR(无类别域间选路)。
  • 丰富的路由过滤和路由策略(router-policy)。
  • 无需周期性的更新,只存在触发更新,并且值更新部分路由。
  • 周期性(60s)的发送KeepAlive报文检测TCP的连通性。

BGP报文种类:

  1. Open:负责和对等体建立邻接关系。
  2. KeepAlive:该消息在对等体之间周期性地发送,用以维护TCP的连接。(60s)
  3. Update:该消息被用来在BGP对等体之间传递路由信息。(通告和撤销路由)
  4. Notification:当BGP Speacker检测到错误的时候,就发送给消息给对等体。
  5. Router-refresh:用来通知对等体自己支持路由刷新能力。

BGP邻居:

BGP的邻居关系:

  • BGP邻居关系建立在TCP连接的基础之上。
  • 可以通过IGP或静态路由来提供TCP连接的可达性。

注:BGP的邻居是通过单播的方式建立的,所以首先需要在BGP进程下手动配置邻接地址。BGP没有自动发现邻居的机制,只能手动建立。

BGP中影响邻居建立的条件:

  1. 停留在Idle状态。
    1. 没有到达Peer的路由条目。
    2. EBGP多跳。(不去发送TCP的建立连接报文)
  2. 停留在Connect或者Active状态。
    1. 源地址错误。(查看对端的IP地址是否是本地指定的邻居地址)
    2. TCP的认证。(TCP MD5)
    3. 有到达peer的路由,但是路由错误。
    4. 过滤了TCP的报文。

注:在华为中如果是通过默认路由的方式到达邻居,那么该邻居通告的所有路由都为无效路由。

关于BGP AS Number:

默认使用连个字节的AS number,可以扩展到四个字节。AS Number需要进行申请。

  1. 1- 64511//公有的AS Number范围。
  2. 64512~65535 //私有的AS Number范围。

BGP状态机:

这里写图片描述

图:BGP状态机

  • Idle:BGP连接的第一个状态。在空闲状态,BGP在等待一个启动事件。启动事件出现以后,BGP初始化资源,复位连接重试计时器(Connect-Reitry),发起第一条TCP连接,同时转入Connect(连接)状态。

  • Connet:在此状态,BGP发起第一个TCP连接,如果连接失败,则进入到active状态。如果TCP连接成功,就转入OpenSent状态,如果TCP连接失败,就转入Active状态。

  • Active:在此状态,BGP总是在试图建立TCP连接,如果连接重试计时器(Connect-Retry)超时,就退回到Connect状态,如果TCP连接成功,就转入OpenSent状态,如果TCP连接失败,就继续保持在Active状态,并继续发起TCP连接。

  • OpenSent:在此状态,TCP连接已经建立,BGP也已经发送了第一个Open报文,剩下的工作,BGP就在等待其对等体发送Open报文,并对收到的Open报文进行正确性检测,如果有错误,系统就会发送一个条出错的通知消息并回退到Idle状态。如果没有错误,BGP就开始放KeepAlive报文,并复位KeepAlive计时器,开始计时。同时转入OpenConfirm状态。

  • OpenConfirm:在此状态,BGP等待一个KeepAlive报文,同时复位保持计时器,如果收到一个KeepAlive报文,就转入Established阶段,BGP邻居的关系就建立起来了。

  • Established:在此状态,BGP邻居关系已经建立,这时,BGP将和它的邻居们交换Update报文,同时复位保持计时器。

    另外,在除Idle状态以外的其他五个状态出现任何ERROR的时候,BGP状态机就会回退到Idle状态。在BGP对等体建立的过程中,通常可见的三个状态是:Idle,Active,Established。

    Idle状态下,BGP拒绝任何进入的连接请求,是BGP的初始状态。

BGP路由通告原则:

  1. 连接建立时,BGP Speaker只把本身用的最优路由通告给对等体。

  2. 多条路径时,BGP Speraker只选择最优的路由放入路由表。

  3. BGP Speraker从EBGP获得路由会向它所有的BGP对等体通告(包括EBGP和IBGP)。

    通告给EBGP时,下一跳为自己。(注:如果通告路由的EBGP邻居需要接收的的EBGP邻居在同一网段,则通告时不修改下一跳。)

    通告给IBGP时,不更改下一跳。防止次优路径。

  4. BGP Speraker从IBGP获得的路由不会通告给其他的IBGP邻居。

    IBGP的水平分割原理:从一个IBGP邻居收到的路由条目不会再通告给其他IBGP邻居。

    如果想让所有的IBGP邻居都能收到路由,有三种解决方案:

    1. 全互联(每两台设备之间都建立IBGP邻居)。
    2. RP(路由反射器)。
    3. 联盟
  5. BGP与IGP同步。BGP不将从IBGP对等体获得的路由通告给它的EBGP对等体,除非该路由信息也能通过IBGP过得。

    所有厂商同步功能默认关闭。华为不支持开启,思科可以开启。

BGP路由信息处理:

这里写图片描述

图:BGP路由信息处理

BGP路由信息处理:

  • 当从对等体接收到更新数据包时,路由器会把这些更新数据包存储到路由选择信息库(Routing Information Base, RIB)中,并指明是来自哪个对等体的(Adj-RIB-In)。这些更新数据包被输入策略引擎过滤后,路由器将会执行路径选择算法,来为每一条前缀确定最佳路径。
  • 得出的最佳路径被存储到本地BGP RIB (Loc-RIB)中,然后被提交给本地IP路由选择表(IP-RIB),以用作安装考虑。
  • 除了从对等体接收来的最佳路径外,Loc-RIB也会包含当前路由器注入的(被称为本地发起的路由),并被选择为最佳路径的BGP前缀。Loc-RIB中的内容在被通告给其他对等体之前,必须通过输出策略引擎。只有那些成功通过输出策略引擎的路由,才会被安装到输出RIB (Adj-RIB-Out)中。

BGP路径属性(12条):

BGP作为一个策略工具,主要作用是实现AS间的路由信息传递。BGP就是结合丰富的路径属性,很好的控制路由信息的传递,从而实现路径的选择。

BGP属性分类(四类):

  • 公认必遵(Well-known mandatory)公认强制

    所有BGP路由器都可以识别,且必须存在于Update消息中。如果缺少这种属性,路由信息就会出错。

    1. origin
    2. as_path
    3. next hop
  • 公认任意(Well-known discretionary)公认非强制

    所有BGP路由器都可以识别,但不要求必须存在于Update消息中,可以根据具体情况来决定是否添加到Update消息中。

    1. Local-Preference
    2. Atomic-Aggregate(as-set)原子聚合//标识汇总路由
    3. MP Reach NLRI
  • 可选过渡(Optional transitive)

    BGP的路由器可以选择是否在Update消息中携带这种路由属性。接收的路由器如果不识别这种属性,可以转发个邻居路由器,邻居路由器可能会识别并使用到这种属性。

    1. Aggreagator//聚合者,标识聚合路由的来源AS和聚合者。通告汇总设备的Router-ID。
    2. Community
    3. Extended-Communities
  • 可选非过渡(Optional non-transitive)

    BGP路由器可以选择是否在Update消息中携带这种属性。在整个路由发布的路径上,如果部分路由器不能识别该属性,可能会导致该属性无法发挥效用。因此接收的路由器如果不识别这种属性,将丢弃这种属性,不必在转发给邻居路由器。

    1. MED(cost)
    2. Originator-ID//标识路由的来源设备
    3. Cluster-List//防止路由的反射回路

Oeigin

Origin属性用来定义路径信息的来源,标记一条路由是怎么成为BGP路由的。它有以下3种类型:

  • IGP:具有最高的优先级。通过路由始发AS的IGP得到的路由信息,比如通过network命令注入到BGP路由表的路由,其Origin属性为IGP。
  • EGP:优先级次之。通过EGP得到的路由信息,其Origin属性为EGP。
  • Incomplete:优先级最低。通过其他方式学习到的路由信息。比如BGP通过import-route命令引入的路由,其Origin属性为Incomplete。

AS_Path

AS_Path属性按矢量顺序记录了某条路由从本地到目的地址所要经过的所有AS编号。当BGP路由器从EBGP对等体接收路由时,如果发现AS_Path列表中有本AS号,则不接收该路由,从而避免了AS间的路由环路。

  • 当BGP Speaker本地通告一条路由时:
    1. 当BGP Speaker将这条路由通告到其他AS时,便会将本地AS号添加在AS_Path列表中,并通过Update消息通告给邻居路由器。
    2. 当BGP Speaker将这条路由通告到本地AS时,便会在Update消息中创建一个空的AS_Path列表。
  • 当BGP Speaker传播从其他BGP Speaker的Update消息中学习到的路由时:
    1. 当BGP Speaker将这条路由通告到其他AS时,便会把本地AS编号添加在AS_Path列表的最前面(最左面)。收到此路由的BGP路由器根据AS_Path属性就可以知道去目的地址所要经过的AS。离本地AS最近的相邻AS号排在前面,其他AS号按顺序依次排列。
    2. 当BGP Speaker将这条路由通告到本地AS时,不会改变这条路由相关的AS_Path属性。

AS-path属性的类型:

  1. AS-Set :由一系列AS号无序的组成,包含在Update消息中。
  2. AS-sequence:由一系列AS号顺序的组成,包含在update消息中。
  3. AS-confed-sequence:在本地联盟内由一系列ad号按顺序地组成,包含在Update消息中,只能在本地联盟内传递。
  4. AS-confed-set:在本地联盟中由一系列AS号无序的组成,包含在Update消息中。只能在本地联盟内传递。

Next_Hop

Next_Hop属性记录了路由的下一跳信息。BGP的下一跳属性和IGP的有所不同,不一定就是邻居设备的IP地址。通常情况下,Next_Hop属性遵循下面的规则:

  • BGP Speaker将本地始发路由发布给IBGP对等体时,会把该路由信息的下一跳属性设置为本地与对端建立BGP邻居关系的接口地址。
  • BGP Speaker在向EBGP对等体发布某条路由时,会把该路由信息的下一跳属性设置为本地与对端建立BGP邻居关系的接口地址。
  • BGP Speaker在向IBGP对等体发布从EBGP对等体学来的路由时,并不改变该路由信息的下一跳属性。

Local_Pref

  • 该属性仅在IBGP对等体之间有效,不通告给其他AS。它表明路由器的BGP优先级。
  • 该属性用于判断流量离开AS时的最佳路由。当BGP路由器通过不同的IBGP对等体得到目的地址相同但下一跳不同的多条路由时,将优先选择Local_Pref属性值较高的路由。

MED

MED属性用于判断流量进入AS时的最佳路由,当一个运行BGP的设备通过不同的EBGP对等体得到目的地址相同但下一跳不同的多条路由时,在其它条件相同的情况下,将优先选择MED 值较小者作为最佳路由。

MED属性仅在相邻两个AS之间传递,收到此属性的AS一方不会再将其通告给任何其他第三方AS。MED属性可以手动配置,如果路由没有配置MED属性,BGP选路时将该路由的MED值按缺省值0来处理。

团体属性

团体属性是一组有相同特征的目的地址的集合。团体属性用一组以4字节为单位的列表来表示,设备中团体属性的格式是aa:nn或团体号。

  • aa:nn:aa和nn的取值范围都是0~65535,管理员可根据实际情况设置具体数值。通常aa表示自治系统AS编号,nn是管理员定义的团体属性标识。例如,来自AS100的一条路由,管理员定义的团体属性标识是1,则该路由的团体属性格式是100:1。
  • 团体号:团体号是0~4294967295的整数。RFC1997中定义,0(0x00000000)~65535(0x0000FFFF)和4294901760(0xFFFF0000)~4294967295(0xFFFFFFFF)是预留的。

团体属性用来简化路由策略的应用和降低维护管理的难度,利用团体可以使多个AS中的一组BGP设备共享相同的策略。团体是一个路由属性,在BGP对等体之间传播,且不受AS的限制。BGP设备在将带有团体属性的路由发布给其它对等体之前,可以先改变此路由原有的团体属性。

公认团体属性

  • Internet:缺省情况下,所有的路由都属于Internet团体。具有此属性的路由可以被通告给所有的BGP对等体。
  • No_Advertise:具有此属性的路由在收到后,不能被通告给任何其他的BGP对等体。
  • No_Export:具有此属性的路由在收到后,不能被发布到本地AS之外。如果使用了联盟,则不能被发布到联盟之外,但可以发布给联盟中的其他子AS。
  • No_Export_Subconfed:具有此属性的路由在收到后,不能被发布到本地AS之外,也不能发布到联盟中的其他子AS。

BGP选路规则:

当到达同一目的地存在多条路由时,BGP依照如下策略顺序进行路由选择:

  1. 如果此路由的下一跳不可达,忽略此路由。
  2. 优选协议首选值(PrefVal)最高的路由。
  3. 优选本地优先级(Local_Pref)最高的路由。
  4. 优选本地生成的路由。
  5. 优选AS路径最短的路由。
  6. 比较Origin属性,依稀选Origin类型为IGP、EGP、Incomplete的路由。
  7. 优选MED值最小的路由。
  8. 优选从EBGP邻居学来的路由(EBGP路由优先级高于IBGP路由)
  9. 优选到下一跳IGP Metric较小的路由。
  10. 优选Cluster_List最短的路由。
  11. 优选Router ID最小的路由器发布的路由。
  12. 比较对等体的IP address,优选从具有较小IP地址的对等体学来的路由。

BGP路由汇总:

自动汇总:

开启BGP自动汇总后,只能针对重分发的进BGP的外部路由做自动汇总,并且只汇总成主类路由。

手动汇总:

手动汇总优先于自动汇总。

  • detail-suppressed //抑制明细路由。

  • suppress-policy //指定抑制哪些明细路由。

  • origin-policy //配置起源策略,针对哪些类型的路由做汇总,可以匹配属性。

  • as-set //用于汇总路由基础明细路由的AS-Path属性,防止环路问题。

    注:如果汇总的明细路由来自不同AS,则汇总路由继承的明细路由AS—path属性标识为无序。

    如果明细路由来自同一个as,则汇总继承的明细路由AS-Path为有序。

  • attribute-poliy //为汇总路由配置属性。

BGP路由表中的”s”标记表示该路由条目被抑制,并且此路由不能通告给邻居。

汇总路由的属性继承:

在华为中如果手工汇总并且不携带“detail-suppressed”参数,汇总路由会继承明细路由的community和origin属性。

  • community属性:将明细路由中所有community属性汇总,作为汇总路由的community属性。
  • origin属性:继承明细路由中起源最低的属性。

在华为中如果手工汇总并且携带“detail-suppressed”参数,抑制明细路由的同时会追加Atomic-aggregate属性,该属性标识汇总路由属性丢失。如果Atomic-aggregate属性被设置,则不会继承明细路由的community 属性。

BGP路由过滤:

  1. 理由前缀列表实现路由过滤。

    peer 13.1.1.1 ip-prefix bgp import

  2. 利用filter-policy实现路由过滤

    peer 13.1.1.1 filter-policy 2000 import

  3. as-path-filter过滤路由

    ip as-path-filter as deny 1000

    ip as-path-filter as permit .*

    peer 13.1.1.1 as-path-filter import

正则表达式:

  • 正则表达式知识BGP过滤的一种方法。
  • 正则表达式是按照一定的规则来匹配字符串的公式。基于这些字符串对BGP的as-path属性做出判断(接收或拒绝)。实际上可以认为他是一个as-path的acl。
  • 正则表达式可以定义为多个permit或deny语句。语句与语句之间的关系是或 的关系。

正则表达式字符:

符号 说明
^ 匹配一个字符串的开始。如^200表是只匹配as-path的第一个值为200.
| 200 表示只匹配as-path的最后一个值为200.
. 匹配任何单个字符,包括空格。
匹配前面的一个字符或者一个序列,可以一次或者多次出现。
_ 匹配一个符号。如逗号,括号,空格符号等。
* 匹配前面的一个字符或者一个序列,可以零次或多次出现。
匹配变化的AS或者一个独立的匹配,通常和“ | ”一起使用
| 逻辑或
[ ] 匹配一个范围内得as,通常和“ - ” 一起使用。
- 连接符。

BGP反射器:

路由反射器的反射原则(非非不传):

  1. 从EBGP邻居收到的EBGP路由可以反射给客户端、非客户端和其他的EBGP邻居。
  2. 从IBGP非客户端邻居收到的IBGP路由可以反射给客户端和其他的EBGP邻居,不能反射给非客户端。
  3. 从IBGP客户端邻居收到的IBGP路由可以反射给客户单、非客户端和其他EBGP邻居。

对等体之间的关系:

  1. Client只需维护与RR之间的IBGP会话。
  2. RR与RR之间需建立IBGP的全互联。
  3. Non-Client和Non-Client之间需建立IBGP全互联。
  4. RR与Non-Client之间需建立IBGP全互联。

Cluster List:

只有经过RR反射的路由才会携带Cluster_list和起源ID属性。

cluster-list属性的目的是为了防止在RR之间反射的路由环路,如果RR收到的路由条目中携带cluster-list属性,并且在列表中包含自己的cluster-id,则丢弃路由。如果不包含则接收并继续反射路由,同时追加自己的cluster-id。

Originator ID:

  • Originator id属性用于防止在反射器和客户端/非客户端之间产生环路。
  • Originator-id属性长4字节,可选非过渡属性,属性类型为9,是又路由反射器RR产生的,携带了本地AS内部路由发起者的Router ID。
  • 当一条路由第一次被RR反射的时候,RR讲Originator-ID属性加入到这条路由,标识这条路由的始发路由器。如果一条路由中已经存在了Originator-id属性,则RR将不会创建新的Originator-id。
  • 当其他BGP speaker接收到这条路由时,将比较收到的Originator-id和本地的router-id,如果两个id相同,bgp speaker会忽略掉这条路由,不做处理。

BGP联盟:

  1. 在联盟AS间传递联盟EBGP路由时不改变下一跳。
  2. 如果在联盟AS之间通过loopback口建立联盟EBGP邻居,同样需要指定EBGP多跳,默认TTL为1.

():表示联盟内有序的AS。

[]:表示联盟内无序的AS。 //华为才会有,思科是大括号

{}:表示联盟外无序的AS。

正则表达式中下划线可以配置小括号,大括号,不能匹配中括号。

BGP中如何下发默认路由:

  1. 针对peer通告默认。

  2. 本地创建默认路由后network进BGP。

  3. 本地创建默认路由后import进BGP。

    default-route imported //配置引入默认路由

BGP命令行:

配置BGP只通告活动路由:active-route-advertise

配置IP RIB中过滤BGP路由:bgp-rib-only

这两条命令互斥。

as-path limit 1 //配置允许as-path的数量。默认255. 可配置1-2000.

4字节的AS号:

  • 定义了一种新的Open能力码用于进行BGP连接的能力协商。
  • 2中新的可选过渡属性,AS4-path和AS4-aggregator属性。
  • 定义了AS-Trans(保留值为23456)用于衔接2字节的AS和4字节的AS。