一、BGP简介

1、自治系统(Atuonomous System):由同一个技术管理机构管理、使用同一选路策略的一些路由器的集合。自治系统内部的路由协议--IGP。自治系统之间的路由协议--EGP。AS号是2字节(4字节)。两字节范围取值1-65535,其中1-64511为公有,64512-65535为私有。

2、IGP主要有RIP、OSPF、ISIS,着重于发现和计算路由,EGP主要有BGP,着重于控制路由的传播和选择最优的路由。

3、BGP属于边界网关路由协议,是一种增强的距离矢量路由协议

AS内部使用IGP来计算和发现路由,如OSPF,ISIS,RIP等。

AS之间使用BGP来传递和控制路由。

(1)可靠的路由更新机制;

丰富的Metric度量方法;

从设计上避免了环路的发生;

BGP为路由附带属性信息,支持 CIDR,支持丰富的路由过滤和路由策略。

(2)BGP可靠的路由更新:

传输协议:TCP,端口号179(目的端口号 ),无需周期性更新

路由更新:只发送增量路由

周期性发送keepalive报文检测 TCP的连通性

4、BGP报文种类

     BGP通过报文的交互完成邻居建立、路由更新等操作,共有Open、Update、Notification、Keepalive和Route-refresh等5种报文类型。

 

(1)Open:负责和对等体建立邻居关系

(2)KeepAlive:该消息在对等体之间周期性地发送,用以维护连接

(3)update:该消息被用来在BGP对等体之间传递路由信息

(4)Notification:当BGP Speaker检测到错误的时候,就发送该消息给对等体

(5)Route-refresh:用来通知对等体自己支持路由刷新能力

Open报文:是TCP连接建立后发送的第一个报文,用于建立BGP邻居之间的连接关系。BGP邻居在接收到Open报文并协商成功后,将发送Keepalive报文确认并保持连接的有效性。确认后,BGP邻居间可以进行Update、Notification、Keepalive和Route-refresh报文的交换。

Update报文:用于在BGP邻居之间交换路由信息。Update报文可以发布多条属性相同的可达路由信息,也可以撤销多条不可达路由信息。

一条Update报文可以发布多条具有相同路由属性的可达路由,这些路由可共享一组路由属性。所有包含在一个给定的Update报文里的路由属性适用于该Update报文中的NLRI(Network Layer Reachability Information)字段里的所有目的地(用IP前缀表示)。

一条Update报文可以撤销多条不可达路由。每一个路由通过目的地(用IP前缀表示),清楚地定义了BGP路由器之间先前通告过的路由。

一条Update报文可以只用于撤销路由,这样就不需要包括路径属性或者NLRI。相反,也可以只用于通告可达路由,就不需要携带撤销路由信息了。

Notification报文:当BGP路由器检测到错误状态时,就向邻居发出Notification报文,之后BGP连接会立即中断。

Keepalive报文:BGP路由器会周期性的向邻居发出Keepalive报文,用来保持连接的有效性。

Route-refresh报文:Route-refresh用于在改变路由策略后请求对等体重新发送路由信息。

 

 

BGP对等体交互过程

bgp与ospf互导防环 bgp ospf_IP

BGP路由器报文交互过程:Idle状态是BGP初始状态。在Idle状态下,BGP路由器拒绝邻居发送的连接请求。只有在收到本设备的Start事件后,BGP路由器才开始尝试与其邻居进行TCP连接,并转至Connect状态。

在Connect状态下,BGP路由器启动连接重传定时器(Connect Retry),等待TCP完成连接。

如果TCP连接成功,那么BGP路由器向邻居发送Open报文,并转至OpenSent状态。

如果TCP连接失败,那么BGP路由器转至Active状态。

如果连接重传定时器超时,BGP路由器仍没有收到邻居的响应,那么BGP路由器继续尝试与其邻居进行TCP连接,停留在Connect状态。

在Active状态下,BGP路由器总是在试图建立TCP连接。

如果TCP连接成功,那么BGP路由器向邻居发送Open报文,关闭连接重传定时器,并转至OpenSent状态。

如果TCP连接失败,那么BGP路由器停留在Active状态。

如果连接重传定时器超时,BGP路由器仍没有收到邻居的响应,那么BGP路由器转至Connect状态。

在OpenSent状态下,BGP路由器等待邻居的Open报文,并对收到的Open报文中的AS号、版本号、认证码等进行检查。

如果收到的Open报文正确,那么BGP路由器发送Keepalive报文,并转至OpenConfirm状态。

如果发现收到的Open报文有错误,那么BGP路由器发送Notification报文给邻居,并转至Idle状态。

在OpenConfirm状态下,BGP路由器等待Keepalive或Notification报文。如果收到Keepalive报文,则转至Established状态,如果收到Notification报文,则转至Idle状态。

在Established状态下,BGP路由器可以和邻居交换Update、Keepalive、Route-refresh报文和Notification报文。

 

 

 

idle状态下每32秒进行TCP连接,进入connect状态,没有TCP连接进入Active状态,连接建立成功进入OpenSent状态,互相收发open报文,进入OpenConfirm状态,互相收发Keepalive报文,进入最后的Established状态。

 

5、BGP数据库

(1)IP路由表(IP-RIB):全局路由信息库,包括所有IP路由信息(dis ip routing-table)

(2)BGP路由表(Loc-RIB):BGP路由信息库,包括本地BGP Speaker选择的路由信息(dis bgp routing-table)

(3)邻居表:对等体邻居清单列表

(4)Adj-RIB-In:对等体宣告给本地Speaker的未处理的路由信息库

(5)Adj-RIB-Out:本地Speaker宣告给指定对等体的路由信息库

6、基于TCP连接的BGP邻居关系

(1)BGP邻居分为IBGP(自治系统内邻居)和EBGP(自治系统外邻居)。

(2)在建立邻居过程中,使用回环地址需要配置更新源为回环口,否则会导致邻居建立失败。命令如下:
bgp 100

  peer 2.2.2.2 as-number 100

  peer 2.2.2.2 connect-interface loopback 0

对于EBGP,一般使用环回口来建立邻居,环回口使用静态路由来打通。除了需要配置更新源外,还需要配置跳数,因为对于EBGP来说,TTL数值默认为1,当经过一跳后,TTL减为0,所以需要手动配置跳数来避免TTL减到0。(IBGP的TTL数值为255)

bgp 100

  peer 3.3.3.3 as-number 200

  peer 3.3.3.3 connect-interface loopback 0

  peer 3.3.3.3 ebgp-max-hop              //配置EBGP多跳,默认为255,后面可以跟数字指定跳数

基本配置:

 

bgp与ospf互导防环 bgp ospf_自治系统_02

首先配置AR1-AR5的端口地址和AS 200内的OSPF:

AR1:

int lo0

  ip address 1.1.1.1 32

int lo1

  ip address 11.1.1.1 24

int g0/0/0

  ip address 10.1.12.1 24



AR2:

int lo0

  ip address 2.2.2.2 32

int g0/0/0

  ip address 10.1.12.2 24

int g0/0/1

  ip address 10.1.23.2 24

ospf 100 router-id 2.2.2.2

  area 0

   network 2.2.2.2 0.0.0.0

   network 10.1.23.2 0.0.0.0





AR3:

int lo0

  ip address 3.3.3.3 32

int g0/0/0

  ip address 10.1.34.3 24

int g0/0/1

  ip address 10.1.23.3 24

ospf 100 router-id 3.3.3.3

  area 0

   network 3.3.3.3 0.0.0.0

   network 10.1.23.3 0.0.0.0

   network 10.1.34.3 0.0.0.0



AR4:

int lo0

  ip address 4.4.4.4 32

int g0/0/0

  ip address 10.1.34.4 24

int g0/0/1

  ip address 10.1.45.4 24

ospf 100 router-id 4.4.4.4

  area 0

   network 4.4.4.4 0.0.0.0

   network 10.1.34.4 0.0.0.0



AR5:

int lo0

  ip address 5.5.5.5 32

int g0/0/1

  ip address 10.1.45.5 24

 

然后,配置AR1、AR2、AR4、AR5的BGP

AR1:

bgp 100                            //AS号

  router-id 1.1.1.1                   //router-id

  peer 10.1.12.2 as-number 200        //使用端口地址建立邻居关系

  network 1.1.1.1 32                 //宣告网络

  network 10.1.12.0 255.255.255.0

  network 11.1.1.0 24



AR2:

bgp 200

  router-id 2.2.2.2

  peer 10.1.12.1 as-number 100 

dis bgp peer                             //查看bgp邻居情况

  peer 4.4.4.4 as-number 200                 //使用AR4的lo0地址建立邻居关系

  peer 4.4.4.4 connect-interface lo 0            //手动设置更新源为回环口

  network 2.2.2.2 32

  network 10.1.12.0 24

  network 10.1.23.0 24 





AR4:

bgp 200

  router-id 4.4.4.4

  peer 2.2.2.2 as-number 200

  peer 2.2.2.2 connect-interface lo 0

  peer 5.5.5.5 as-number 300

  peer 5.5.5.5 connect-interface lo 0

  peer 5.5.5.5 ebgp-max-hop 2                   //手动配置EBGP最大跳数

  network 4.4.4.4 32

  network 10.1.34.0 24

  network 10.1.45.0 24 

  quit

ip route-static 5.5.5.5 32 10.1.45.5







AR5:

bgp 300

  router-id 5.5.5.5

peer 4.4.4.4 as-number 200          

  peer 4.4.4.4 connect-interface lo 0

  peer 4.4.4.4 ebgp-max-hop 2

  network 5.5.5.5 32

  network 10.1.45.0 24

  quit

ip route-static 4.4.4.4 32 10.1.45.4

dis bgp routing-table                          //查看BGP路由

此时各个邻居正常建立,但路由是不通的,AR5无法PING通AR1:

bgp与ospf互导防环 bgp ospf_BGP_03

bgp与ospf互导防环 bgp ospf_IP_04

 

7、BGP路由通告原则

(1)连接一建立,BGP Speaker将把自己所有BGP路由通告给新对等体;多条路径时,BGP Speaker只选最优的给自己使用;BGP Speaker只把自己使用的最优路由通告给对等体。

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

 

从EBGP获得的路由,下一跳地址是AS外的地址,其他路由器是没有该条路由的,这样当BGP Speaker将EBGP发给IBGP时,收到的路由会因为下一跳将不可达;为保证IBGP下一跳可达,手动设置改下一跳为本地,也就是传递路由时,将NextHop地址变更为自己建立邻居使用的地址,从而保证其他路由器收到后,该路由NextHop地址一定可达。

  保证nexthop一定可达,这条路由就被标记为最优路由,就可以继续通告给其他对等体,非最优路由是不会被通告给其他对等体的。

 

bgp 100

  peer 1.1.1.1 as-number 100

  peer 1.1.1.1 next-hop-local

以第6条案例为例,更改前的bgp routint-table

bgp与ospf互导防环 bgp ospf_bgp与ospf互导防环_05

进行如下配置后,NextHop地址变更为2.2.2.2(也就是AR2和AR4建立邻居关系使用的回环口地址)

AR2:

bgp 200

   peer 4.4.4.4 next-hop-local

 

bgp与ospf互导防环 bgp ospf_IP_06

 

 

(3)BGP Speaker从IBGP获得的路由不会通告给它的IBGP邻居,从而防止环路,这也叫IBGP的水平分割。

还是以第6条为例,AR5去往AR1的数据包,到达AR3时,因为AR3没有去AR1的路由,就会把数据包丢掉,因此AR5、AR1无法互通。

解决方案:IBGP全互联

IBGP逻辑全互联,会导致AS内部的路由器需要维护更多的IBGP会话,可以使用路由反射器和联盟这两个工具来简化

(4)BGP Speaker从IBGP获得的路由是否通告给 它的EBGP对等体要依靠IGP和BGP同步的情况来决定。华为设备里,默认关闭这个功能,且无法打开。

 

8、BGP路由的宣告途径

(1)network 命令,使用的正掩码。BGP中network的是路由信息,而不是OSPF中的接口信息。路由表中的路由都可以在BGP中精确的宣告,网络位和掩码要严格匹配,不要求接口下必须有这个地址。

(2)import-route命令,类似于OSPF

bgp 200

  import-route ospf

  import-route direct