BGP邻居

  • 原理概述
  • BGP的6个邻居状态(网上找的)
  • 实验目的
  • 实验注意事项:
  • 实验内容
  • 实验拓扑
  • 实验步骤
  • 1,基本配置
  • 2,配置IBGP邻居
  • 3,配置EBGP邻居


原理概述

1,路由协议分为IGP(内部网关协议)和EGP(外部网关协议)两大类。
一般来说,IGP用于AS(自治系统)内部,EGP用于AS之间。
2,目前常见的IGP包括RIP,OSPF,IS-IS等,常见的EGP只有BGP。
3,BGP-4作为事实上的互联网外部路由协议标准,已被广泛应用于ISP之间
4,BGP的功能是完成最佳路由的选择并在BGP邻居之间进行最佳路由的传递。BGP选择了TCP作为其传输协议,端口号为179.
5,BGP支持无类域间路由CIDR,并且采用了触发式增量更新,大大减少了BGP在传播路由信息时所占的宽带,特别适用于在互联网上传播大量的路由信息。
6,BGP提供了大量的路由属性(Attribute),通过对这些属性的操作和控制,BGP能够非常容易的实现丰富为灵活的路由策略。BGP还具有良好的扩展性,支持Multicast,VPN,IPv6等多种特性。
7,BGP的邻居关系分为IBGP和EBGP
IBGP:(internal BGP)当BGP运行于同一自治系统内部时
EBGP:(External BGP)当BGP运行于不同自治系统之间时
8,BGP没有自动建立邻居关系的能力,邻居关系必须通过手动配置来建立。

BGP的6个邻居状态(网上找的)

Idle—BGP进程被启动或被重置,这个状态是等待开始,比如等于指定一个BGP peer,当收到TCP连接请求后,便初始化另外一个事件,当路由器或peer重置,都会回到idle状态。

Connect—检测到有peer要尝试建立TCP连接。

Active—尝试和对方peer建立TCP连接,如有故障,则回到idle状态

OpenSent— TCP连接已经建立,BGP发送了一个OPEN消息给对方peer,然后切换到OpenSent状态,如果失败,则切换到Active状态。

OpenReceive— 收到对方peer的OPEN消息,并等待keepalive消息,如果收到keepalive,则转到Established状态,如果收到notification,则回到idle状态,比如错误或配置改变,都会发送notification而回到idle状态。

Established— 从对端peer收到了keepalive,并开始交换数据,收到keepalive后,hold timer都会被重置,如果收到notification,就回到idle状态。

实验目的

BGP的应用场景
IBGP与EBGP邻居的概念
IBGP与EBGP邻居关系

实验注意事项:

1.BGP邻居关系状态为Established表示已建立
2.实际应用中IBGP通常用loopback接口建立邻居关系,EBGP通常用物理接口建立邻居关系
3.2个BGP路由器建立邻居关系,必须有网络层可达信息(NLRI, Network Layer Reachability Information)
4.BGP报文封装默认釆用物理接口IP作为源地址
5.EBGP默认要求邻居之间物理直接,即TTL=1

实验内容

BGP 邻居接收med属性 bgp的邻居关系有几种_IP

实验拓扑

BGP 邻居接收med属性 bgp的邻居关系有几种_R3_02

实验步骤

1,基本配置

配置接口IP

2,配置IBGP邻居

在R1和R2使用直连物理接口来配置IBGP邻居关系。为了实现链路冗余,R1和R2之间部署两条链路,当其中一条物理链路出现故障时,另一条物理链路可以提供连通性。

[R1]bgp 100 
[R1-bgp]router-id 10.0.1.1
[R1-bgp]peer 10.0.12.2 as-number 100
[R1-bgp]peer 10.0.21.2 as-number 100
[R2]bgp 100
[R2-bgp]router-id 10.0.2.2
[R2-bgp]peer 10.0.12.1 as-number 100
[R2-bgp]peer 10.0.21.1 as-number 100

BGP 邻居接收med属性 bgp的邻居关系有几种_IP_03


可以看到,R2现在有两个BGP邻居,分别使用了R1的G0/0/0和G0/0/1接口来表示,AS编号为100,与R2的AS编号相同,因此R2与R1为IBGP邻居。当前邻居状态为Established,表示邻居关系已经完全建立。

在R1上将Loopback 0接口地址通过到BGP中

[R1]bgp 100
[R1-bgp]network 10.0.1.1 32

查看R2的BGP路由表

BGP 邻居接收med属性 bgp的邻居关系有几种_BGP 邻居接收med属性_04


可以看到,R2的BGP路由表中有两条去往10.0.1.1的路由,这是因为R1与R2之间建立了两个IBGP邻居关系,BGP路由实现了冗余。

BGP运行在TCP上,如果能让R1的loopback 0接口与R2的loopback 0接口建立起来TCP的话,并使用loopback 0 接口的IP地址来建立BGP邻居关系,则可以让R1和R2只维护一个BGP邻居关系即可。当R1与R2之间的一条链路故障时,TCP可以通过另外一条物理链路继续维持会话关系,这种方法在网络的稳定性方面和网络资源的节省上比直接使用物理接口来建立BGP邻居关系更具优势。

为了使R1的loopback0与R2的loopback0接口建立TCP会话,需要在R1和R2上配置到达对方loopback 0的静态路由

[R1]ip route-static 10.0.2.2 32 10.0.12.2
[R1]ip route-static 10.0.2.2 32 10.0.21.2
[R2]ip route-static 10.0.1.1 32 10.0.12.1
[R2]ip route-static 10.0.1.1 32 10.0.21.1

删除之前配置的IBGP邻居的命令,并使用Loop back0接口重新建立IBGP 邻居关系。

[R1-bgp]undo peer 10.0.12.2
[R1-bgp]undo peer 10.0.21.2
[R1-bgp]peer 10.0.2.2 as-number 100
[R2-bgp]undo peer 10.0.12.1
[R2-bgp]undo peer 10.0.21.1
[R2-bgp]peer 10.0.1.1 as-number 100

配置后,在R1上查看BGP邻居关系

BGP 邻居接收med属性 bgp的邻居关系有几种_BGP 邻居接收med属性_05


可以看到,R1与R2的邻居关系停在了Active状态,不是Established,这说明R1与R2还没有建立起IBGP邻居关系。

原因是在默认情况下,BGP会使用去往邻居路由器的出接口的IP地址作为BGP报文的源地址。在配置上面的配置中,R2向R1发送的BGP报文源IP和R1的指定邻居地址10.0.2.2不一致,导致R1与R2无法建立正常邻居关系。解决方法是使用命令指定路由器发送BGP报文时所使用的源IP地址。

在R1上使用peer 10.0.2.2 connect-interface loopback 0,指定R1使用自己的loopback 0地址作为发送BGP报文时的IP地址;R2上也命令。

[R1-bgp]peer 10.0.2.2 connect-interface LoopBack 0
[R2-bgp]peer 10.0.1.1 connect-interface LoopBack 0

查看R2的BGP邻居

BGP 邻居接收med属性 bgp的邻居关系有几种_IP_06


查看R2的BGP路由表

BGP 邻居接收med属性 bgp的邻居关系有几种_R3_07


有去往10.0.1.1 32的下一跳为10.0.1.1的路由

查看R2的路由表

BGP 邻居接收med属性 bgp的邻居关系有几种_TCP_08


R2去往10.0.1.1有两条,一条坏了,不会影响,还有一条,相应的BGP路由也不会影响.

总之,使用loopback 接口建立的BGP邻居关系与使用物理接口来建立邻居关系相比较,前者具有更好的稳定性,且能够减少设备资源的开销.

3,配置EBGP邻居

从前面可以看到使用物理接口来建立BGP邻居时:
1)配置简单,并能够实现冗余
2)会产生两个TCP会话和两个BGP邻居关系,从而消耗资源
3)链路不稳定也会导致BGP邻居关系的不稳定
所以在R2 和R3上使用loopback接口建立EBGP邻居关系

[R2]bgp 100
[R2-bgp]peer 10.0.3.3 as-number 200
[R3]bgp 200
[R3-bgp]peer 10.0.2.2 as-number 100

配置后,在R3查看BGP邻居关系

BGP 邻居接收med属性 bgp的邻居关系有几种_BGP 邻居接收med属性_09


邻居状态为Idle,表示为正常建立邻居关系.

在BGP邻居关系建立前要建立TCP会话,目前R2和R3都不存在去往对方loopback 的路由,所以要在R2和R3上配置到达对方loopback 接口的静态路由

[R2]ip route-static 10.0.3.0 255.255.255.0 10.0.23.3
[R2]ip route-static 10.0.3.0 255.255.255.0 10.0.32.3
[R3]ip route-static 10.0.2.0 255.255.255.0 10.0.23.2
[R3]ip route-static 10.0.2.0 255.255.255.0 10.0.32.2

在R3上查看BGP邻居关系

BGP 邻居接收med属性 bgp的邻居关系有几种_IP_10


可以看到到了Active状态,还没有正常建立邻居关系.

原因是在默认情况下,BGP会使用去往邻居路由器的出接口的IP地址作为BGP报文的源地址。在配置上面的配置中,R2向R3发送的BGP报文源IP和R3的指定邻居地址10.0.2.2不一致,导致R1与R2无法建立正常邻居关系。解决方法是使用命令指定路由器发送BGP报文时所使用的源IP地址。

[R2-bgp]peer 10.0.3.3 connect-interface LoopBack 0
[R3-bgp]peer 10.0.2.2 connect-interface LoopBack 0

在R3上查看BGP邻居关系

BGP 邻居接收med属性 bgp的邻居关系有几种_TCP_11


状态为Idle,表示还没有在此建立,原来在默认情况下,EBGP邻居之间在发送BGP报文时,TTL为1,所以EBGP在默认情况下要求邻居物理直连.但R2和R3所以Loop back0接口建立邻居关系时,由于使用的不是物理直连接口,所以TTL会被多减一次,值为0,最终使得BGP报文被丢弃,导致无法建立.所以修改EBGP的TTL大于1就行.

在R2和R3上使用命令peer ebgp-max-hop 2,配置BGP报文为2

[R2-bgp]peer 10.0.3.3 ebgp-max-hop 2
[R3-bgp]peer 10.0.2.2 ebgp-max-hop 2

查看R3的BGP邻居关系

BGP 邻居接收med属性 bgp的邻居关系有几种_TCP_12


可以看到R2与R3的EBGP邻居关系建立了(若没好的话,等几秒)

说明:在实际场景中,通常使用loopback接口来建立IBGP邻居关系,使用物理接口建立EBGP邻居关系

(传输协议):

1)RIP协议采用UDP

2)OSPF基于IP协议,端口号为89

3)BGP基于TCP协议,端口号为179