BGP路由器协议排错教程:BGP 对等体翻动问题

完整版下载 2022年最新BGP路由协议排错教程指南-网络安全文档类资源-CSDN下载

BGP 对等体失效问题讨论的是当 BGP 邻居关系总是在 Idle(空闲)状态和 Active(活跃)
状态之间切换,并且无法进入 Established(已建立)状态。但当我们说 BGP 对等体翻动时,意
味着会话建立后 BGP 的邻居状态又发生了改变。在这种情况下,BGP 状态持续在 Idle 状态和
Established 状态之间翻动。BGP 翻动有以下两种状态。
? Idle/Active:在前一节中进行了讨论。
? Idle/Established:错误的更新消息、TCP 问题(多跳部署环境中的 MSS 大小)。
导致 BGP 对等体翻动的原因有以下这些:
? 错误的 BGP 更新消息;? 保持计时器超时;
? MTU 不匹配;
? 高 CPU 利用率;
? 接口和平台丢包;
? 不适当的控制平面限速。
3.2.1 错误的 BGP 更新消息
错误的 BGP 更新消息指的是从对等体那里接收到了已损坏的更新包。这种情况并不常见,
产生这种问题的原因有如下这些:
? 承载更新包的链路有问题,硬件有问题;
? BGP 更新包封装问题;
? 攻击者(黑客)发出的恶意更新包。
当 BGP 更新包已损坏时,路由器都会生成一个错误代码为 3 的 BGP 通知,错误代码详见
表 3-1。
例 3-24 所示为异常更新的案例,这个异常更新导致了 BGP 会话的翻动。相关信息中展示
出一个属性字段的长度要比更新包本身的长度还长,因此这是一个损坏的更新。解码后的 BGP
消息显示出 BGP 更新包的长度是 93 字节(0x005D),而属性类型 17(0x11)的属性长度等于
53572 字节(0xD144),这种情况是不可能会发生的,因为单个属性的长度不会超出总长度 93
字节。因此设备生成了通知代码 3/1,指明异常属性列表。

例 3-24 异常 BGP 更新

Nov 17 09:36:06.990 CET: %BGP-3-NOTIFICATION: sent to neighbor 10.1.13.2 3/1
(update malformed) 47 bytes D011D144 02030000 32E60000 12830000 B0
Nov 17 09:36:06.990 CET: BGP: 10.1.13.2 Bad attributes FFFF FFFF FFFF FFFF FFFF FFFF
FFFF FFFF 005D 0200 0000 4240 0101 0240 020C 0203 32E6 1283 B066 0101 5BA0 D011
D144 0203 0000 32E6 0000 1283 0000 B066 0101 0001 0049 4003 04D5 9080 C580 0404
0000 0001 C007 06FF 77AC 11F1 0815 781D F0
Nov 17 09:36:21.518 CET: %BGP-5-ADJCHANGE: neighbor 10.1.13.2 Up

 3.2.2 保持计时器超时
保持计时器超时是一个导致 BGP 对等体翻动的常见原因。它表示路由器在保持计时器超
时之前,没有接收到或处理过生存消息或任何更新消息。这样的话,设备会发出一个通知消
息(代码 4/0)并关闭会话。在 IOS 设备上,生存消息是由 BGP I/O 进程发出的,BGP 路由
器进程负责对入站的存活消息进行解释。由保持计时器超时导致的 BGP 翻动问题可以归结为
以下原因之一。
? 接口问题。
? 物理联通性。
? 物理接口。
? 输入保持队列。
? TCP 接收队列和 BGP InQ。
? BGP InQ。
? 不匹配的 MTU。

1.接口问题
各种接口问题都可能会导致保持计时器超时,而使 BGP 会话翻动,比如物理层问题或接口
上的丢包问题。
2.物理联通性
如果问题与物理联通性有关,数据包无法通过线路正确地传输,或者有时候只会影响一个
特定模式的数据包。在这种情况下,工程师可以尝试在对等体 IP 地址之间发起 ping 测试,并
设置不同的数据包大小和模式。工程师可以把 TOS(服务类别)的值设置为 0 以外的其他值,
或者改变数据模式本身,比如设置值 0xaabb 而不是使用默认的值 0xabcd。如果问题与物理媒介
有关,那么工程师需要使用 show interface 命令来查看 CRC(循环冗余校验)错误和可靠性。
通常来说,根据问题发生的位置,这类错误都可以通过更换线缆、SFP(小型可插拔)模块、
线卡或机框来解决。
3.物理接口
有时接口在接收到一个数据包后,会在驱动器级别把数据包丢弃。最常见的原因是接口无
法处理数据包,因为接收流量的速率过高。工程师可以查看 show interface 命令输出内容中的
overrun 或 ignore 计数器数值。如果遇到了速率过高的情况,工程师需要对速率进行控制。
4.输入保持队列
这是指数据包到达了路由器,但却被接口的输入保持队列丢弃。这些数据包本应该由路由
器的 CPU 进行处理,或由被进程交换(由软件)进行处理。保持队列的大小是有上限的。在大
多数 Cisco 平台上,默认的输入保持队列大小为 75 个数据包,工程师最大可以将其配置为 4096。
推荐工程师把接口的输入队列大小设置为 1500~2000 之间的数值。工程师可以在 show interface
命令的输出内容中查看输入队列的丢包数量。工程师可以使用命令 hold-queue size in 来修改输
入队列的大小。
通常来说,任何运行 BGP 的路由器都有能力处理它接收到的所有 BGP 消息,而不必在输
入保持队列中丢弃 BGP 包。如果发生了丢包,问题通常不在于 BGP 包,而是路由器在接口上
接收到的其他进程交换流量或去往路由器的流量。SPD(Selective Packet Discard,选择性数据
包丢弃)会为高优先级流量提供拥塞优先级,比如 BGP。由于 BGP 包的 IP 优先级值为 6,位
于 SPD 的净空(headroom),就像在输入保持队列之外且优先级更高的额外队列。要想配置 SPD,
工程师可以使用命令 spd enable,然后使用全局配置命令 spd headroom headroom-size 设置 SPD
净空大小。SPD 配置是隐藏配置,但工程师可以从命令 show ip spd 的输出内容中查看这个值。

注释 净空大小的设置能够为每个邻居放置至少 2 个数据包就足够了。

例 3-25 中展示了工程师应该在 show interface 命令的输出内容中查看的信息,以及如何配
置接口保持队列和 SPD。


例 3-25 show interface 命令和配置 hold-queue 与 spd 命令 

R2# show interface gigabitEthernet 0/1
GigabitEthernet0/1 is up, line protocol is up
Hardware is iGbE, address is fa16.3e86.6c2b (bia fa16.3e86.6c2b)
Internet address is 10.1.12.2/30
MTU 1500 bytes, BW 1000000 Kbit/sec, DLY 10 usec,
reliability 255/255, txload 1/255, rxload 1/255
Encapsulation ARPA, loopback not set
Keepalive set (10 sec)
Auto Duplex, Auto Speed, link type is auto, media type is RJ45
output flow-control is unsupported, input flow-control is unsupported
ARP type: ARPA, ARP Timeout 04:00:00
Last input 00:00:00, output 00:00:04, output hang never
Last clearing of "show interface" counters never
Input queue: 0/75/0/0 (size/max/drops/flushes); Total output drops: 0
Queueing strategy: fifo
Output queue: 0/40 (size/max)
5 minute input rate 0 bits/sec, 0 packets/sec
5 minute output rate 0 bits/sec, 0 packets/sec
355 packets input, 32292 bytes, 0 no buffer
Received 0 broadcasts (0 IP multicasts)
0 runts, 0 giants, 0 throttles
0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored
0 watchdog, 0 multicast, 0 pause input
876 packets output, 151705 bytes, 0 underruns
0 output errors, 0 collisions, 2 interface resets
0 unknown protocol drops
0 babbles, 0 late collision, 0 deferred
1 lost carrier, 0 no carrier, 0 pause output
0 output buffer failures, 0 output buffers swapped out
! Configuring Input Hold Queue
R2(config)# interface GigabitEthernet 0/1
R2(config-if)# hold-queue 1500 in
R2# show ip spd
Current mode: disabled.
Queue min/max thresholds: 73/74, Headroom: 100, Extended Headroom: 75
IP normal queue: 0, priority queue: 0.
SPD special drop mode: none
! Configuring and verifying SPD
R2# configure terminal
R2(config)# spd enable
R2(config)# spd headroom 1000
R2(config)# end
R2# show ip spd
Current mode: init.
Queue min/max thresholds: 73/74, Headroom: 1000, Extended Headroom: 75
IP normal queue: 0, priority queue: 0.
SPD special drop mode: none

 注释 只有 Cisco IOS/IOS XE 平台支持 SPD 特性,IOS XR 或 NX-OS 平台不支持该特性。

5.TCP 接收队列
有时 BGP 存活消息到达了 TCP 接收队列,但没有被进一步处理,而是转移到了 BGP InQ
队列中。当工程师在命令 show bgp afi safi summary 的输出内容中看到某个 BGP 邻居的值为非
零值,说明有 TCP 消息正在队列中等待处理。当 BGP 邻居超时后,BGP InQ 队列是空的。BGP
I/O 进程有可能来不及运行。BGP I/O 进程负责把 TCP 接收队列中的消息放入到 BGP InQ 队列
中。当 BGP 保持计时器的值设置得非常低的时候、BGP 邻居过多的时候,以及 CPU 利用率很
高的时候,都有可能发生这种情况。
造成这种问题另一个可能的原因是在短暂的故障过程中,只丢失了一个 TCP 包。尽管 TCP
接收队列中还有其他数据包但路由器仍然在等待第一个包(TCP 必须要按顺序向路由器提交数
据包,否则就完全不提交)。发送方 BGP 路由器等待传输超时后会再次发送第一个数据包。如
果 BGP 保持计时器的值设置得比较低,就可能无法及时收到重传的数据包。这时唯一的解决办
法就是增加 BGP 的保持计时器值。快速重传(Fast Retransmit)特性也对这种情况有所帮助。
BGP 快速重传特性会在收到三次重复的 ACK 后,重新发送第一个数据包。因此更好的解决方
案是增加 BGP 的保持计时器,同时启用 BGP 快速重传特性。
最后,TCP 包还有可能会因为 CoPP 策略而被丢弃。如果 CoPP 策略中没有足够的带宽被分
配给 TCP 包,尤其是 BGP 包,数据包就会被丢弃。CoPP 策略的问题会在本章后文中进行讨论。
3.2.3 MTU 不匹配的问题
通常在建立 BGP 邻居关系的过程中,MTU(最大传输单元)并不是很大的问题,但 MTU
不匹配会导致 BGP 会话的翻动。由于以下因素,网络中设备上的 MTU 设置会有所不同:
? 不适当的规划或网络设计&

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值