IP : 边界网关协议(BGP)

BGP 邻居为什么在空闲、连接及活动状态之间切换?

2016 年 10 月 24 日 - 机器翻译
其他版本: PDFpdf | 英语 (2015 年 8 月 22 日) | 反馈


目录


简介

BGP 路由器只有在互相之间建立对等连接时,才能交换路由信息。BGP 对等体的建立开始于设备之间 TCP 连接的创建。TCP 连接建立后,BGP 设备会尝试通过 BGP Open 消息交换创建 BGP 会话,其中这些设备交换 BGP 版本、AS 编号、保持时间和 BGP 标识符。

在 BGP 对等体建立的过程中,有几件事可能会阻止 BGP 邻居关系的正常建立。本文档将讨论导致该问题的一些可能的原因:

  • 邻居声明错误。

  • 到邻居地址的路由不存在或默认路由被用于到达对等体。

  • BGP 下 update-source 命令丢失。

  • 输入错误导致了邻居声明中的 IP 地址错误或自治系统编号错误。您需要检查您的配置。

  • 单播由于下列原因而中断:

    • 异步传输模式 (ATM) 中错误的虚拟电路 (VC) 映射或者高度冗余网络中的帧中继环境。

    • 访问列表阻塞单播或 TCP 数据包。

    • 网络地址转换 (NAT) 正在路由器上运行,并且正在转换单播数据包。

    • 第二层关闭。

  • 缺少 ebgp-multihop 命令是阻止对等体出现的一个常见错误。这个问题将在第二个示例中进行讨论。

先决条件

要求

本文档没有任何特定的要求。

使用的组件

本文档不限于特定的软件和硬件版本。

本文档中的信息都是基于特定实验室环境中的设备创建的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您是在真实网络上操作,请确保您在使用任何命令前已经了解其潜在影响。

网络图

该网络图用作前三个原因的示例:

/image/gif/paws/13752/24a.gif

规则

有关文档规则的详细信息,请参阅 Cisco 技术提示规则

邻居声明错误

路由器 R1-AGS 上的 show ip bgp summary 命令显示会话处于活动状态。

R1-AGS(9)# 
show ip bgp summary

BGP table version is 1, main routing table version 1

Neighbor        V    AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
10.10.10.2      4   400       0       0        0    0    0 never    Active

配置如下:

R1-AGS R6-2500
interface Loopback0
 ip address 2.2.2.2 255.255.255.255
!
interface Serial1
 ip address 10.10.10.1 255.255.255.0
!
router bgp 400
 neighbor 10.10.10.2 remote-as 400
 neighbor 10.10.10.2 update-source Loopback0
 !
ip route 1.1.1.1 255.255.255.255 10.10.10.2
interface Loopback0
 ip address 1.1.1.1 255.255.255.255
!
interface Serial0
 ip address 10.10.10.2 255.255.255.0
!
router bgp 400
 neighbor 10.10.10.1 remote-as 400
 neighbor 10.10.10.1 update-source Loopback0
 !
ip route 2.2.2.2 255.255.255.255 10.10.10.1

debug ip bgpdebug ip tcp transactions 命令显示 TCP 连接失败。

路由器 R1-AGS 上的 debug:

BGP: 10.10.10.2 open active, local address 2.2.2.2
TCB00135978 created
TCB00135978 setting property 0 16ABEA
TCB00135978 bound to 2.2.2.2.11039
TCP: sending SYN, seq 3797113156, ack 0
TCP0: Connection to 10.10.10.2:179, advertising MSS 1460
TCP0: state was CLOSED -> SYNSENT [11039 -> 10.10.10.2(179)]
TCP0: state was SYNSENT -> CLOSED [11039 -> 10.10.10.2(179)]
TCP0: bad seg from 10.10.10.2 -- closing connection: seq 0 ack 3797113157 rcvnxt 0 rcvwnd 0
TCP0: connection closed - remote sent RST
TCB00135978 destroyed
BGP: 10.10.10.2 open failed: Connection refused by remote host
TCP: sending RST, seq 0, ack 1965664223
TCP: sent RST to 1.1.1.1:11016 from 10.10.10.1:179

路由器 R6-2500 上的 debug:

TCP: sending RST, seq 0, ack 3797113157
TCP: sent RST to 2.2.2.2:11039 from 10.10.10.2:179
BGP: 10.10.10.1 open active, local address 1.1.1.1
TCB001E030C created
TCB001E030C setting property TCP_WINDOW_SIZE (0) 194F7A
TCB001E030C setting property TCP_TOS (11) 194F79
TCB001E030C bound to 1.1.1.1.11016
TCP: sending SYN, seq 1965664222, ack 0
TCP0: Connection to 10.10.10.1:179, advertising MSS 1460
TCP0: state was CLOSED -> SYNSENT [11016 -> 10.10.10.1(179)]
TCP0: state was SYNSENT -> CLOSED [11016 -> 10.10.10.1(179)]
TCP0: bad seg from 10.10.10.1 -- closing connection: seq 0 ack 1965664223 rcvnxt 0 rcvwnd 0
TCP0: connection closed - remote sent RST
TCB 0x1E030C destroyed
BGP: 10.10.10.1 open failed: Connection refused by remote host

解决方案

要解决此问题,需更正 neighbor 语句中的环回地址,或者从配置中移除 update-source 命令。

在此示例中,对地址进行了更正。

R1-AGS R6-2500
router bgp 400
 neighbor 1.1.1.1 remote-as 400
 neighbor 1.1.1.1 update-source Loopback0
 !
ip route 1.1.1.1 255.255.255.255 10.10.10.2
router bgp 400
 neighbor 2.2.2.2 remote-as 400
 neighbor 2.2.2.2 update-source Loopback0
 !
ip route 2.2.2.2 255.255.255.255 10.10.10.1

看看 show ip bgp summary 命令就知道路由器 R1-AGS 处于已建立状态。

R1-AGS(9)#
show ip bgp summary

BGP table version is 1, main routing table version 1

Neighbor        V    AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
1.1.1.1         4   400       3       3        1    0    0 00:00:26        0

注意: 如果在路由器重新加载后,未建立 BGP 会话,则需在 BGP 下配置 neighbor soft-reconfiguration 语句以进行软重置。

到邻居地址的路由不存在或默认路由被用于到达对端

路由器 R1-AGS 上的 show ip bgp summary 命令显示会话当前处于活动状态。

R1-AGS(9)#
show ip bgp summary

BGP table version is 1, main routing table version 1

Neighbor        V    AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
1.1.1.1         4   400       0       0        0    0    0 never    Active

配置如下:

R1-AGS R6-2500
interface Loopback0
 ip address 2.2.2.2 255.255.255.255
!
interface Serial1
 ip address 10.10.10.1 255.255.255.0
!
router bgp 300
 neighbor 1.1.1.1 remote-as 400
 neighbor 1.1.1.1 ebgp-multihop 2
 neighbor 1.1.1.1 update-source Loopback0
interface Loopback0
 ip address 1.1.1.1 255.255.255.255
!
interface Serial0
 ip address 10.10.10.2 255.255.255.0
!
router bgp 400
 neighbor 2.2.2.2 remote-as 300
 neighbor 2.2.2.2 ebgp-multihop 2
 neighbor 2.2.2.2 update-source Loopback0

如果您运行 debug 命令,则它会显示没有到邻居的路由。

路由器 R1-AGS 上的 debug:

BGP: 1.1.1.1 open active, delay 9568ms
BGP: 1.1.1.1 multihop open delayed 19872ms (no route)
BGP: 1.1.1.1 multihop open delayed 12784ms (no route)

路由器 R6-2500 上的 debug:

BGP: 2.2.2.2 open active, delay 6531ms
BGP: 2.2.2.2 multihop open delayed 14112ms (no route)
BGP: 2.2.2.2 multihop open delayed 15408ms (no route)

解决方案

解决办法是在 BGP neighbor 语句中加入到下一跳的路由。根据具体情况,您可以使用静态路由或动态路由。在您拥有更多控制权的内部 BGP (iBGP) 环境中,您可以使用路由协议动态地传播该路由。在外部 BGP (eBGP) 情况下,建议配置静态路由以到达下一跳。

只有当您在 eBGP 对等体上对等的 IP 地址不是直接连接的情况下,才应使用 neighbor ebgp-multihop 命令。

在本例中,使用了静态路由。

R1-AGS R6-2500
router bgp 300
 neighbor 1.1.1.1 remote-as 400
 neighbor 1.1.1.1 ebgp-multihop 2
 neighbor 1.1.1.1 update-source Loopback0
 !
ip route 1.1.1.1 255.255.255.255 10.10.10.2
router bgp 400
 neighbor 2.2.2.2 remote-as 300
 neighbor 2.2.2.2 ebgp-multihop 2
 neighbor 2.2.2.2 update-source Loopback0
 !
ip route 2.2.2.2 255.255.255.255 10.10.10.1

show ip bgp summary 命令显示路由器 R1-AGS 处于已建立状态。

R1-AGS(9)# 
show ip bgp summary


BGP table version is 1, main routing table version 1

Neighbor        V    AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
1.1.1.1         4   400       3       3        1    0    0 00:00:26        0

注意: 默认路由绝不会用于建立 BGP 会话 (iBGP/eBGP),尽管您可以对 BGP 邻居执行 ping 操作,但是您会在 debug 中看到相同的 (no route) 输出。解决办法仍然是添加到 BGP 邻居的路由。

BGP 下 update-source 命令丢失

路由器 R1-AGS 上的 show ip bgp summary 命令显示会话处于活动状态。

R1-AGS(9)# 
show ip bgp summary

BGP table version is 1, main routing table version 1

Neighbor        V    AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
1.1.1.1         4   400       0       0        0    0    0 never    Active

配置如下:

R1-AGS R6-2500
interface Loopback0
 ip address 2.2.2.2 255.255.255.255
!
interface Serial1
 ip address 10.10.10.1 255.255.255.0
!
router bgp 400
 neighbor 1.1.1.1 remote-as 400
!
ip route 1.1.1.1 255.255.255.255 10.10.10.2
interface Loopback0
 ip address 1.1.1.1 255.255.255.255
!
interface Serial0
 ip address 10.10.10.2 255.255.255.0
!
router bgp 400
 neighbor 2.2.2.2 remote-as 400
!
ip route 2.2.2.2 255.255.255.255 10.10.10.1

如果您运行 debug 命令,则它会显示 TCP 连接失败。

路由器 R1-AGS 上的 debug:

TCP: sending RST, seq 0, ack 2248020754
TCP: sent RST to 10.10.10.2:11018 from 2.2.2.2:179
BGP: 1.1.1.1 open active, local address 10.10.10.1
TCB0016B06C created
TCB0016B06C setting property 0 16ADEA
TCB0016B06C bound to 10.10.10.1.11042
TCP: sending SYN, seq 4099938541, ack 0
TCP0: Connection to 1.1.1.1:179, advertising MSS 536
TCP0: state was CLOSED -> SYNSENT [11042 -> 1.1.1.1(179)]
TCP0: state was SYNSENT -> CLOSED [11042 -> 1.1.1.1(179)]
TCP0: bad seg from 1.1.1.1 -- closing connection: seq 0 ack 4099938542 rcvnxt 0 rcvwnd 0
TCP0: connection closed - remote sent RST
TCB0016B06C destroyed
BGP: 1.1.1.1 open failed: Connection refused by remote host

路由器 R6-2500 上的 debug:

BGP: 2.2.2.2 open active, local address 10.10.10.2
TCB00194800 created
TCB00194800 setting property TCP_WINDOW_SIZE (0) E6572
TCB00194800 setting property TCP_TOS (11) E6571
TCB00194800 bound to 10.10.10.2.11018
TCP: sending SYN, seq 2248020753, ack 0
TCP0: Connection to 2.2.2.2:179, advertising MSS 556
TCP0: state was CLOSED -> SYNSENT [11018 -> 2.2.2.2(179)]
TCP0: state was SYNSENT -> CLOSED [11018 -> 2.2.2.2(179)]
TCP0: bad seg from 2.2.2.2 -- closing connection: seq 0 ack 2248020754 rcvnxt 0 rcvwnd 0
TCP0: connection closed - remote sent RST
TCB 0x194800 destroyed
BGP: 2.2.2.2 open failed: Connection refused by remote host
TCP: sending RST, seq 0, ack 4099938542
TCP: sent RST to 10.10.10.1:11042 from 1.1.1.1:179

解决方案

要解决这一问题,需在这两个路由器上同时配置 update-source 命令,或者删除 update-source 命令,并且更改这两个路由器上的 neighbor 语句。下面是这两种解决办法的示例。

在这些示例中,这两个路由器上同时配置了 update-source 命令。

R1-AGS R6-2500
interface Loopback0
 ip address 2.2.2.2 255.255.255.255
!
interface Serial1
 ip address 10.10.10.1 255.255.255.0
!
router bgp 400
 neighbor 1.1.1.1 remote-as 400
 neighbor 1.1.1.1 update-source Loopback0
 !
ip route 1.1.1.1 255.255.255.255 10.10.10.2
interface Loopback0
 ip address 1.1.1.1 255.255.255.255
!
interface Serial0
 ip address 10.10.10.2 255.255.255.0
!
router bgp 400
 neighbor 2.2.2.2 remote-as 400
 neighbor 2.2.2.2 update-source Loopback0
 !
ip route 2.2.2.2 255.255.255.255 10.10.10.1

show ip bgp summary 命令显示路由器 R1-AGS 处于已建立状态。

R1-AGS(9)# 
show ip bgp summary

BGP table version is 1, main routing table version 1

Neighbor        V    AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
2.2.2.2         4   400       3       3        1    0    0 00:00:26        0

当有人在对等您的环回地址时,您只需使用 update-source 命令。这适用于 iBGP 对等体和 eBGP 对等体。

在下面的示例中,删除了 update-source 命令并且同时更改了这两个路由器上的 neighbor 语句。

R1-AGS R6-2500
interface Loopback0
 ip address 2.2.2.2 255.255.255.255
!
interface Serial1
 ip address 10.10.10.1 255.255.255.0
!
router bgp 400
 neighbor 10.10.10.2 remote-as 400
interface Loopback0
 ip address 1.1.1.1 255.255.255.255
!
interface Serial0
 ip address 10.10.10.2 255.255.255.0
!
router bgp 400
 neighbor 10.10.10.1 remote-as 400

show ip bgp summary 命令显示路由器 R1-AGS 处于已建立状态。

R1-AGS(9)# 
show ip bgp summary

BGP table version is 1, main routing table version 1

Neighbor        V    AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
10.10.10.2      4   400       3       3        1    0    0 00:00:26        0

相关信息


Document ID: 13752