1 基于TCP连接的邻居关系

  • BGP邻居关系建立在TCP连接的基础之上

  • 可以通过IGP或静态路由来提供TCP连接的IP可达性  


同OSPF、ISIS一样,在BGP中,路由学习的依然要首先建立邻居关系

所不同的是:

  • OSPF、ISIS的邻居关系是自动建立的,而BGP邻居的建立必须手动完成,从邻居的建立开始就体现出了BGP是基于策略进行路由的(物理上直接相连未必是邻居,反过来物理上没有直接相连可以建立邻居关系)。

  • BGP邻居关系是建立在TCP会话的基础之上的,而两个运行BGP的路由器要建立TCP的会话就必须要具备IP连通性。

  • IP连通性必须通过BGP之外的协议实现,具体来讲就是IP连通性通过内部网关协议(IGP)或者静态路由来实现,为方便起见,我们把通过内部网关协议或者静态路由实现的IP连通性统称为IGP 连通性或者IGP可达性(IGP Reachability)


2 两种邻居

HCNP学习笔记之BGP协议原理及配置2-BGP工作原理_第1张图片

虽然BGP是运行于自治系统之间的路由协议,但是一个AS的不同边界路由器之间也要建立BGP连接,只有这样才能实现路由信息在全网的传递,如RTB和RTD,为了建立AS100和AS300之间的通信,我们要在它们之间建立IBGP连接。

BGP的基本配置如下:

  1. 启动BGP(指定本地AS编号),进入BGP视图

  [Router A] bgp as-number bgp

启动BGP,进入BGP视图,undo bgp命令用来关闭BGP。台路由器只能运行于一个AS内,即只能指定一个本地AS号。

2.指定对等体的IP地址及其所属的AS编号

 [Router A-bgp] peer { group-name | ipv4-address | ipv6-address}  as-number as-number

  peer as-number命令用来配置指定对等体(组)的对端AS号,undo peer as-number命令用来删除对等体组的AS号。



3 EBGP多跳和指定更新源

HCNP学习笔记之BGP协议原理及配置2-BGP工作原理_第2张图片

BGP对等体之间不一定是物理上直连的,只要TCP连接能够建立即可。

为了IBGP对等体路由通告的可靠性,我们一般采用loopback接口建立IBGP邻居关系,在这种情况下,必须指定用于建立TCP连接的接口(也是路由更新报文的源接口):  

peer { group-name | peer-address } connect-interface interface-name

直连相连网络上的邻居建立EBGP连接,这时需要修改EBGP报文的最大跳数: 

peer { group-name | peer-address } ebgp-max-hop [ ttl ]  


4 BGP通告原则(重要)分为IBGP间,IBGP与EBGP间通告

原则1:BGP Speaker只把自己的最优路由通告给对等体

HCNP学习笔记之BGP协议原理及配置2-BGP工作原理_第3张图片

VRP5.7之前的版本,BGP优选同时也在IP路由表中优选的路由才能发布给邻居;

VRP5.7和之后的版本的缺省行为是BGP优选的路由即可发布给邻居,同时提供一条命令active-route-advertise用于和之前的版本兼容。


原则2:BGP在向IBGP对等体通告路由时,不改变下一跳属性。

HCNP学习笔记之BGP协议原理及配置2-BGP工作原理_第4张图片


缺省情况下,BGP在向EBGP对等体通告路由时,将下一跳属性设为自身的IP地址。

BGP在向IBGP对等体通告路由时,不改变下一跳属性。

这会遭成IBGP下一跳路由不可达

需要使用命令 peer 1.1.1.1 next-hop-local,让BGP在向IBGP对等体通告路由时,将下一跳属性也设为自身的IP地址。

HCNP学习笔记之BGP协议原理及配置2-BGP工作原理_第5张图片

原则3:IBGP内避免环路(IBGP水平分割原则)

EGP防环通过路由属性as-path

ospf所有的非骨干区域必须和骨干区域相连,相当于各区域以area0为中心交互信息,不可能产生环

HCNP学习笔记之BGP协议原理及配置2-BGP工作原理_第6张图片

所以,此原则是在AS内避免路由环路的重要手段。

但是,这条原则的引入,带来了新的问题:RTD无法收到来自AS 12的BGP路由。

一般我们采用IBGP的逻辑全连接来解决这个问题,即在RTA-RTD、RTB-RTC之间再建立两条IBGP连接。

HCNP学习笔记之BGP协议原理及配置2-BGP工作原理_第7张图片

BGP全互连(FULL-MESH)关系。这是解决由于IBGP水平分割带来的路由传递的问题的方法之一。

这种方法的缺陷是路由器要付出更多的开销去维护网络里的IBGP会话。

所以,BGP还提供了如下两种解决IBGP水平分割的方案:

  •  路由反射器(Route-Reflector)-- RFC 2796

  •  联盟(Confederation)-- RFC 3065


原则4:BGP与IGP同步,解决路由黑洞问题

HCNP学习笔记之BGP协议原理及配置2-BGP工作原理_第8张图片

BGP与IGP同步的概念:BGP Speaker不将从IBGP对等体获得的路由信息通告给它的EBGP对等体,除非该路由信息也能通过IGP获得。即 RTE将RTB通告的路由信息给 RTP前,该路由信息通过IGP(ospf)也可以取得,可以解决路由黑洞。

AS中所有的BGP路由器能组成IBGP全闭合网时,才可以取消同步,

RTB和RTE将BGP路由引入OSPF,但是一般不建议这样做,因为BGP路由表很大,引入到IGP中来会给系统带来很大负担,甚至导致中低端路由设备的瘫痪。

其它的解决办法如:可以在RTB上配置一条去往10.1.1.0/24的静态路由,再把该静态路由引入到IGP中,这样也可以达到同步。但不论何种方法,都不适用于大规模网络,现网中使用全连接等方法解决此类问题。VRP平台缺省情况下BGP与IGP是非同步的,


5 BGP路由添加(network 和import 命令)

BGP的主要工作是在自治系统之间,而不是去发现和计算路由信息

所以,路由信息需要通过配置命令的方式注入到传递路由信息BGP中。 

成为BGP路由有两种配置方法:通过Network命令以及通过Import命令。  

(aggregate注入的条件为:BGP路由表里已经明确存在明细路由的情况下,才能通过aggregate命令注入聚合路由)


说明:路由器将通过Network将IP路由表里的路由信息注入到BGP的路由表中,并通过BGP传递给其它对等体。

   通过Network命令注入到BGP路由表里的路由信息必须存在于IP路由表中。 缺省情况下,BGP不发布任何本地的网络路由。  

 相关命令: network ipv4-address [ mask | mask-length ] [ route-policy route-policy-name ] 

HCNP学习笔记之BGP协议原理及配置2-BGP工作原理_第9张图片


通过Import注入的路由信息可以结合策略共同使用。

import-route protocol [ process-id ] [ med med | route-policy route-policy-name ]

  • protocol:指定可引入的外部路由协议,目前包括isis、ospf、static 、direct和rip。 

  • process-id:当引入路由协议为isis、ospf或rip时,必须指定进程号。

  •  med:指定引入路由的MED度量值,取值范围0~65535。

  •  route-policy-name:从其他路由协议引入路由时,可以使用该参数指定的路由策略过滤路由。 



三 路径选择


BGP作为一个策略工具,主要作用是实现AS间的路由信息传递。

BGP就是结合丰富的路径属性,很好的控制路由信息的传递,从而实现路径的选择。


1 公认属性

公认属性是所有BGP路由器都必须识别的属性

  • 公认必遵 (Well-known mandatory) 所有BGP路由器都可以识别,且必须存在于Update消息中。如果缺少这种属性,路由信息就会出错 

  • 公认任意 (Well-known discretionary) 所有BGP路由器都可以识别,但不要求必须存在于Update消息中,可以根据具体情况来决定是否添加到Update消息中 

2 可选属性

可选属性不需要都被BGP路由器所识别

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

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

3 常见的路由属性(重要

HCNP学习笔记之BGP协议原理及配置2-BGP工作原理_第10张图片

HCNP学习笔记之BGP协议原理及配置2-BGP工作原理_第11张图片


  • Origin:起点属性。定义路由信息的来源,标记一条路由是怎样成为BGP路由的。

    •  IGP:通过network命令注入BGP的路由

    • EGP:通过EGP(RFC904)学到的路由,

    • Incomplete:通过import命令注入BGP的路由

    • 优先级:IGP>EGP>Incomplete

  • As_PATH:AS路径属性。是路由经过的AS的序列(经过的所有AS的ID),即列出此路由在传递过程中经过了哪些AS。它可以防止路由循环,并用于路由的过滤和选择

    BGP不会接受AS_PATH属性中包含本AS Number的路由,如果在路由更新消息中发现自己所在的AS号已经被包含在AS_PATH属性中,则表明该路由之前曾经通过该AS或者是源自于该AS,为避免路由环路,应该将此路由信息丢弃。 从而避免了产生环路的可能。

    • 在大多数的实际网络中,多条路径的优劣往往是由AS_PATH来决定 。当路由器中存在两条或者两条以上的到同一目的地的路由时,这些路由可以通过此属性比较相互之间的优劣,AS_PATH越短的路径越优先

    • hub&Spoke组网方式下,我们需要接受AS号重复的BGP路由。此时,可以用下面的命令来强制接受此类路由:

    • peer { group-name | ipv4-address } allow-as-loop [ number ]  //参数:group-name:对等体组的名称。 ipv4-address:对等体的IPv4地址。 number:本地AS号的的重复次数,范围为1~10。缺省值为1。

    • 可以通过加长AS_PATH的列表长度,从而影响路径选择。

  • Next hop:下一跳属性。包含到达更新消息所列网络的下一跳边界路由器的IP地址。

    • 例:RTA与RTC通过直连以太网接口建立EBGP邻居关系,RTA与RTB通过直连接口建立IBGP邻居关系,而RTC与RTD通过直连以太网接口10.0.0.2和10.0.0.3建立IBGP邻居关系 

    • BGP在向EBGP邻居通告路由时,或者将本地发布的BGP路由通告给IBGP邻居时,下一跳属性是本地BGP与对端连接的端口地址。如胶片所示,RTC在向RTA通告路由18.0.0.0/8时,下一跳属性为10.0.0.2 ;RTB在向RTA通告路由19.0.0.0/8时,下一跳属性为21.0.0.1。

    • 对于多路访问的网络(广播网或NBMA网络),下一跳情况有所不同:如胶片所示,RTC在向RTA通告路由20.0.0.0/8时,发现本地端口10.0.0.2同此路由的下一跳10.0.0.3(指在RTC路由表中此路由的下一跳)为同一子网,将使用10.0.0.3作为向EBGP通告路由的下一跳,而不是10.0.0.2。(同一子网改)

    • BGP在向IBGP通告从其它EBGP得到的路由时,不改变路由的下一跳属性,而直接传递给IBGP邻居。如胶片所示,RTA通过IBGP向RTB通告路由18.0.0.0时,下一跳属性为10.0.0.2。这样做,有时会产生问题:如果RTB不知如何去往10.0.0.2,那么此BGP路由将失效。   

    • 解决方法:

      • 方法一:可以在RTA的BGP视图下引入直连路由

      • 方法二:在RTA上,使用命令peer { group-name | ipv4-address } next-hop-local此命令用来设置BGP向对等体组/对等体通告路由时,把下一跳属性设为自身的IP地址。 


  • MED(Multi-Exit-DISC)属性(只用于选路控制数据流怎样进入本AS(告诉别怎么进来),当某个AS有多个入口时,可以用MED属性来帮助其外部的AS选择一个较好的入口路径。一条路由的MED值越小,其优先级越高。

    • 达同一邻居AS的多条入口链路(MED值越小,链路越优先)

    • 通过EBGP发送MED值给对等体

    • 例:AS100通过两条上行链路连接AS200的两个不同的路由器,假设在AS200中有这样两个网络: 210.52.83.0/24(在后面的介绍中以83代表)和210.52.82.0/24(在后面的介绍中以82代表),这两个网络都通过BGP协议通告给了AS100的边界路由器RT3。这时候,AS200的管理者想达到这样一个目的:从AS100来的到82的数据流通过RT2路由器到达,而从AS100来的到83的数据流通过RT1到达。

    • 在AS200的边界路由器RT1上,当向RT3发布路由82和83时,给83打上标记50,而给82打上标记100;   在AS200的边界路由器RT2上,当向RT3发布路由82和83时,给82打上标记50,而给83打上标记100;   当AS100路由器RT3通过EBGP对等体分别从RT1和RT2获得去往相同网段的路由时,会选择RT1作为83的下一跳而选择RT2作为82的下一跳

  •  Local(内部->外部)-Preference只用于选路,只能在IBGP邻居间传递:本地优先级属性,用于控制数据流怎样出AS(告诉自己怎么出去,即怎么到达目地网络,用于多个出口的场合)用于在AS内优选到达某一目的地的路由。反映了BGP Speaker对每条BGP路由的偏好程度。属性值越大越优。

    • 路由器接收到去往同一目的地的多条路由,可以判断本地优先级属性值的高低进行路由选择(本地优先级的数值越高越好)。

    • 思路:一定要找参照AS,公认可选属性,只能在IBGP邻居间传递

    • 流量是出,路由是入 ,相反

    • 控制流量出,配置入路由  

    • 控制流量入,配置出路由 med

    • 例:一个ISP可能通过两条高速链路连接两个大的ISP作为自己到INTERNET的出口,目标是使到网络83的流量分布在到ISP1的链路上,而到网络82的流量分布在到ISP2的链路上。


  •  Community:团体属性,通过组的标识决定路由传递的策略,4个字节。(用于路由控制)团体属性标识了一组具有相同特征的路由信息,与它所在的IP子网或自治系统无关。 公认团体属性是公认的,具有全球意义。公认的团体有:

  • NO_EXPORT(0xFFFFFFF01):路由器收到带有这一团体值的路由后,不应把该路由通告给一个联盟之外的对等体,不会通告给联盟外的EBGP邻居

  • NO_ADVERTISE(0xFFFFFFF02):路由器收到带有这一团体值的路由后,不应把该路由通告给任何的BGP对等体不会通告给任何邻居

  • NO_EXPORT_SUBCONFED(0xFFFFFFF03):路由器收到带有这一团体值的路由后,可以把该路由通告给它的IBGP对等体,但不应通告给任何的EBGP对等体(包括联盟内的EBGP对等体)。不会通告给任何的EBGP邻居


4 BGP路径选择过程

1,Preferred-Value值数值高的优先首先值,华为私有特性,越大越优先

2,Local-Preference值最高的路由优先

3,聚合路由优先于非聚合路由

5,本地手动聚合路由的优先级高于本地自动聚合的路由

6,本地通过network命令引入的路由的优先级高于本地通过 import-route命令引入的路由

4,AS路径的长度最短的路径优先

5,比较Origin属性,IGP优于EGP,EGP优于Incomplete

6,选择MED较小的路由

7,EBGP路由优于IBGP路由

11,BGP优先选择到BGP下一跳的IGP度量最低的路径 当以上全部相同,则为等价路由,可以负载分担 注:AS_PATH必须一致 当负载分担时,以下3条原则无效

12,比较Cluster-List长度,短者优先,

13,比较Originator_ID(如果没有Originator_ID,则用Router ID比较),选择数值较小的路径

14,比较对等体的IP地址,选择IP地址数值最小的路径