08-BGP FAQ汇总

简介:
Technorati 标签:  , , , ,

下面是BGP一些常见的问题和解决手段进行了一个整理.

1, BGP路由的基本使用原则有哪些?

■多条路径的时候,bgp之选最优的给自己使用(通过bgp的选路原则进行比较),当然也可以使用负载均衡.

■BGP只会把自己使用的路由通告给邻居,也就是说本地bgp路由表里面不是最优的路由是不会进行转发操作的.

■BGP从EBGP获得的路由会向它所有bgp相邻体通告(包括EBGP和IBGP),但是因为有水平分割,该路由不会再从原路发送回去。

■BGP从IBGP获得的路由不向它的IBGP邻居通告。

2, BGP路由协议是如何避免环路的?

BGP不同于其他IGP协议,其路由都包含了丰富的路由属性,并通过路由属性来对路由进行过滤,其中一个属性为AS_PATH,该属性为该路由经过的所有AS的序列,这样对于收到的路由,通过对AS_PATH进行检查,如果发现自身的AS号已经出现在AS_PATH属性中,那么就表示自身发布的路由又重新回到自己所处的AS中,(比如说自己的AS为100,当路由传递过来的时候,AS-PATH属性已经为:200,300,100,400,这个时候如果自己收到的时候再进行比较,最后发现100已经在原来的AS-PATH中了那么就表示路由出现了环路)已经出现了路由环路,这时就会丢弃接收到的路由,从而避免继续对外发布路由,导致环路产生。

当然还可以参考上面的BGP使用原则,比如BGP从IBGP收到的路由不继续往IBGP邻居发送(水平分割),这也是协议上避免环路的一种方法(反射路由的处理类似,请参看后续章节)。正常情况下BGP会丢弃AS_PATH中包含自身AS号的路由。对于特定情况下导致的AS号重复的合理环境,可以通过如下命令来进行控制“peer { group-name | peer-ipv4-address } allow-as-loop[ number ]”,其中number取值范围为<1-10>,默认值为1,即允许接收路由的AS_PATH中包含一个自身AS号。当然,在向EBGP邻居发布时,也还要在AS_PATH最后再加上自身的AS号。

3, BGP邻居建立不起来的原因有哪些?

■两边BGP的peer地址不可达(TCP不可达),这个问题一般是因为没有路由所导致的。可以用扩展ping,把源地址和目的地址都带进去然后ping一下进行测试,因为一个路由器的出口可能有多个,所以建议用扩展ping来进行测试。

■邻居的IP地址和AS号配置错误,或者两边配置不匹配导致的,最常见的就是一边是用loopback作为update-source,一边是用物理接口作为update-source,很容易就配置错误.

■OPEN报文协商失败.

clip_image002

OPEN报文主要包括了BGP的版本号,holdtime,router-ID以及可选参数等.

如果对端携带了本端不支持的能力,就会因为报错产生Notification然后导致邻居建立不起来,这类的问题一般都出现在不同厂商之间的兼容性问题。

■BGP的MD5验证配置错误。

■BGP的router-ID有冲突.

当然建立不起来邻居的原因这里只是列出一些典型的情况,具体可以用debug ip bgp events等工具进行具体排查.

4,有什么样的故障排查手段是针对BGP连接建立不起来的情况?

常见的办法有:

■debug ip bgp

clip_image004

打开debug开关是最直接的,但是也是最危险的。因为除非在实验环境,如果真的在公网上面的bgp出口网关.轻易打开debug的话,很有可能造成设备性能到极限最后cpu到100%停止转发或者缓存溢出等问题。

■show ip bgp neighbor,如果bgp邻居始终徘徊在active状态,表示TCP的三次握手都不成功,这个时候最需要排查的就是底层的点到点是否通,有没有路由,建议用扩展ping来尝试一下。或者是看看是否是因为认证密码配置不匹配。

■telnet 到设备上面,一般各类厂商对于重大debugging类的问题要通过console口打印出来.所以可以通过telnet在设备上面将terminal monitor打开,如果是因为OPEN报文中携带了对端不支持的能力而导致状态机初始化,这个时候一般都会打印到屏幕上面。遇到这类的问题就只有通过抓包进行比较到底问题出在了哪里,然后通知研发....:)

5, 使用loopback环回口为什么无法建立邻居?

如果TCP可达的情况下,需要检查配置中是否有:

neighbor x.x.x.x update-source loopback0

neighbor x.x.x.x ebgp-multihop x

第一条命令是IBGP和EBGP邻居都需要的命令,而第二条命令只用于EBGP。默认跳数是1,如果用loopback作为更新源,至少都需要把EBGP-multihop修改为2,否则的话ttl超时数据包就没有用了。

6, BGPnetwork命令用的时候有什么需要注意的?为什么我的IGP路由表中有一个路由是10.0.0.1/24,当在bgp进程下面用命令:network 10.0.0.0以后,连本地的bgp路由表都没有这条路由?

在使用bgp的network命令的时候,必须要当前缀和掩码完全匹配的时候才能实现正常的发布。

10.0.0.0是一个A类的网段,如果没有mask参数,缺省的掩码是8位的,而在本地IGP路由表中是24位的,所以应该把mask参数加上:

network 10.0.0.0 mask 255.255.255.0

最后才能正常的发布.

BGP配置模式下network命令可以带mask参数,也可以不带,不是强制性的,但是当不带mask参数的时候,缺省使用的是路由的自然掩码.在全局路由表中必须具有相同的前缀和掩码的路由才能被network命令正常发布.

7, 为什么从直连的EBGP邻居向IBGP邻居发布路由时,路由会失效?

在BGP中,向IBGP邻居和EBGP邻居发送路由的时候,下一跳的处理是不同的。向EBGP邻居发送路由的时候,next-hop都会改为本地路由器的出接口IP地址作为下一跳,而向IBGP邻居发送路由的时候next-hop是不变的。

不变的意思是. [AS100 router-1]-----------[AS200 Router-2 -----------router-3]

如果有一个路由是AS100 router-1通告给AS200的router-2的时候,router-2的下一跳是router-1.但是当R2将该路由通告给R3的时候,这个时候R3学到的这个路由的下一跳仍然是R1.

如果R3没有IGP路由到R1的,这个时候就会失效。因为TCP不可达。

解决方案就是在R2上面:

neighbor R3 next-hop-self.

将这个命令配置在BGP进程中。

然后再重新刷新bgp,那个时候R3学到的路由的下一跳才会改成R2.



本文转自 hny2000 51CTO博客,原文链接:http://blog.51cto.com/361531/707003

相关文章
用word快速将数字字体换成新罗马详细简单方法
用word快速将数字字体换成新罗马详细简单方法
5158 0
用word快速将数字字体换成新罗马详细简单方法
|
NoSQL Redis 索引
Filebeat收集日志数据传输到Redis,通过Logstash来根据日志字段创建不同的ES索引
Filebeat收集日志数据传输到Redis,通过Logstash来根据日志字段创建不同的ES索引
299 0
|
5月前
|
数据采集 存储 人工智能
智创 AI 新视界 -- 优化 AI 模型训练效率的策略与技巧(16 - 1)
本文深度聚焦 AI 模型训练效率优化,全面涵盖数据预处理(清洗、归一化、增强)、模型架构(轻量级应用、剪枝与量化)、训练算法与超参数调优(自适应学习率、优化算法)等核心维度。结合自动驾驶、动物图像识别、语音识别等多领域实际案例,佐以丰富且详细的代码示例,深度剖析技术原理与应用技巧,为 AI 从业者呈上极具专业性、可操作性与参考价值的技术宝典,助力高效优化模型训练效率与性能提升。
智创 AI 新视界 -- 优化 AI 模型训练效率的策略与技巧(16 - 1)
|
8月前
|
存储 算法 测试技术
【狂热算法篇】探秘图论之 Floyd 算法:解锁最短路径的神秘密码(通俗易懂版)
【狂热算法篇】探秘图论之 Floyd 算法:解锁最短路径的神秘密码(通俗易懂版)
|
监控 JavaScript Java
部署应用程序到服务器
部署应用程序到服务器
465 3
|
JavaScript
vue中如何优雅的实现数字递增效果
【8月更文挑战第22天】vue中如何优雅的实现数字递增效果
276 0
vue中如何优雅的实现数字递增效果
在Linux中,如何挂载一个ISO文件?
在Linux中,如何挂载一个ISO文件?
|
算法 C++
平面中判断线段与矩形是否相交
平面中判断线段与矩形是否相交
233 0
|
缓存 运维 监控
Flink 1.11 Unaligned Checkpoint 解析
由于 Checkpoint 与反压的耦合,反压反过来也会作用于 Checkpoint,导致 Checkpoint 的种种问题。针对于此,Flink 在 1.11 引入 Unaligned Checkpint 来解耦 Checkpoint 机制与反压机制,优化高反压情况下的 Checkpoint 表现。
Flink 1.11 Unaligned Checkpoint 解析
|
内存技术 芯片
MDK st-link下载STM32程序出现Internal command error和Error:Flash download failed. Target DLL
MDK st-link下载STM32程序出现Internal command error和Error:Flash download failed. Target DLL   是因为目标板的芯片处于休眠的状态,在尝试连接目标板时候也会出现报错Internal command ...
3968 0