《BGP设计与实现》一2.4 理解内部BGP

简介:

本节书摘来自异步社区《BGP设计与实现》一书中的第2章,第2.4节,作者【美】Randy Zhang , Micah Bartell,更多章节内容可以访问云栖社区“异步社区”公众号查看

2.4 理解内部BGP

BGP设计与实现
BGP被设计用来在Internet上的一系列自治系统之间提供无环路的路径。确保无环拓扑的机制就是AS_PATH属性。考虑图2-2,其中3个自治系统相互连接。如果AS 65000中的路由器R1通告一条前缀给AS 65001中的R3,那么在它发送前缀给R3时,它会把65000添加到这条前缀的AS_PATH列表前面。如果同样的前缀再次被AS 65000收到,那么边界BGP宣告者就会拒绝它,这是因为它在AS_PATH属性中检测到了环路。

继续考虑图2-2,假设R3需要向AS 65002中的R7传播前缀,那么这里有几种选择来完成这项任务。

image

一种方法是让R3把所有的BGP前缀重分布到IGP中,IGP把它们通告给R4、R5和R6。接着,让R5和R6把这些前缀重分布回BGP,并把它们分别通告给各自的eBGP邻居——R7和R8。但是,这种策略有一些问题。

IGP不是被设计用来处理这里可能包含的路由数量的。完全的Internet表已经超过了10万条前缀。很多IGP需要周期性地刷新前缀信息,这会进一步导致网络的不稳定和额外的系统资源消耗,并且给常规的路由选择更新带来显著的带宽需求。前缀数量的增长导致发生路由抖动(route flapping)的可能性更大,路由抖动会引起严重的稳定性和收敛性问题。

BGP信息被重分布进IGP后会丢失所有的BGP属性,包括AS_PATH属性。AS_PATH属性的丢失破坏了BGP环路防止机制。例如,当前缀在R4上被重分布回BGP时,同样的这条前缀也会被发送回R2,因为AS_PATH属性中只包含65001。重分布也会导致任何策略属性的丢失,这些策略属性是为BGP学到的前缀所设置的。

比较明智的选择是使用内部BGP(internal BGP,iBGP)。当R3通过iBGP把前缀通告给R5时,R3不会在AS_PATH中添加自己的AS号。事实上,如果更新来自于iBGP对等体,Cisco IOS甚至不检查AS_PATH环路。如果没有这个额外的AS_PATH信息,路由选择信息环路就会在iBGP域中形成。

如果允许R3把前缀通告给R5,但是不允许R5把它从iBGP学到的前缀通告给其他iBGP对等体,例如,R4和R6,那么就可以避免环路。但是,这样的解决办法需要所有的iBGP宣告者全连接(fully meshed)。例如,R3需要与R4、R5以及R6建立iBGP对等会话。在iBGP宣告者数目很大的自治系统中,全连接会带来扩展性的问题。这个问题的解决办法涉及第7章讲述的路由反射和联盟。

使用iBGP传送前缀信息会带来其他一些小问题。如果BGP能够传送所有的前缀,那么还需要IGP吗?

IGP肯定是需要的。图2-2中,R3并不与R6直连。如果没有某种形式的路由选择信息存在,那么R3如何与R6建立iBGP会话呢?答案就是让IGP为自治系统内部提供基础的路由可达性信息。内部BGP从未被设计成在没有IGP的情况下使用,而是与IGP配合使用。iBGP路由通常需要IGP来递归解析。表2-1说明了iBGP与IGP的一些不同之处。

image
在比较了iBGP和IGP之间的不同之处后,理解iBGP和eBGP之间的不同之处也是很重要的(见表2-2)。

image

相关文章
|
8月前
|
安全 网络协议 Linux
深入理解Linux内核模块:加载机制、参数传递与实战开发
本文深入解析了Linux内核模块的加载机制、参数传递方式及实战开发技巧。内容涵盖模块基础概念、加载与卸载流程、生命周期管理、参数配置方法,并通过“Hello World”模块和字符设备驱动实例,带领读者逐步掌握模块开发技能。同时,介绍了调试手段、常见问题排查、开发规范及高级特性,如内核线程、模块间通信与性能优化策略。适合希望深入理解Linux内核机制、提升系统编程能力的技术人员阅读与实践。
733 1
|
5月前
|
存储 安全 Ubuntu
搭建属于你的家庭/办公网络存储中心(手把手教你用Linux搭建Samba文件服务器)
利用旧电脑安装Linux,通过Samba搭建安全免费的文件服务器,实现多设备间高效共享照片、电影、文档。支持Windows、macOS等系统访问,内含详细配置步骤与安全建议,新手也能轻松上手。
|
安全 API 网络安全
OpenStack的 网络服务(Neutron)
【8月更文挑战第23天】
1125 10
|
存储 安全 芯片
封装之打线简介
介绍封装打线的原理,常用材料的优缺点,关键部件,wire bonding 过程,主要参数,线形,线长和主要测试方法。
14241 3
封装之打线简介
|
搜索推荐 Linux Shell
打造个性化的Linux命令提示符
【8月更文挑战第47天】在Linux的世界里,命令行是高效工作的利器。本文将引导你如何通过简单的配置,让你的命令提示符更加个性化和实用,从而提升你的工作效率和终端使用体验。我们将从基础的颜色设置开始,逐步深入到复杂的解析符号和脚本编写,最终实现一个既美观又功能丰富的命令提示符。无论你是初学者还是高级用户,都能在这里找到适合你的技巧。让我们一起探索,让命令行不再单调!
357 16
|
SQL 关系型数据库 MySQL
【MySQL】事务管理 -- 详解(上)
【MySQL】事务管理 -- 详解(上)
|
负载均衡 网络安全 API
OpenStack核心组件Neutron
【8月更文挑战第4天】
928 9
|
存储 负载均衡 API
OpenStack核心组件Keystone
【8月更文挑战第3天】
1110 8
|
Kubernetes 负载均衡 网络协议
在K8S中,svc底层是如何实现的?
在K8S中,svc底层是如何实现的?