当前位置:网站首页>为什么要使用BGP?
为什么要使用BGP?
2022-08-02 10:01:00 【健忘的老菜鸟】
BGP是怎么来的?为什么要使用BGP?
路由协议的分类
分类 | 包含协议 | 说明 |
---|---|---|
IGP:用于域(AS)内路由选择。 | RIP | 距离矢量协议,多用于小型网络。 |
ISIS | 链路状态协议,多用于运营商网络。 | |
OSPF | 链路状态协议,多用于企业中大型网络。 | |
EIGRP | CISCO私有路由协议,增强型距离矢量协议。 | |
EGP:用于域(AS)间路由选择。 | EGP | BGP的前身,目前已经不再使用。 |
BGP | 事实上目前唯一的域间路由选择协议。 |
ISPA和ISPB通过一条高速链路连接在一起,两个ISP想把各自的路由通告给对方。
区域间为什么不使用RIP协议?
ISPA和ISPB的边界路由设备必须有一个同步的过程,也就是说当R1和R2在建立邻居的时候,需要把自己的整个路由表传输给对方。而传统的RIP协议是使用UDP作为自己的传输协议的,这个协议的最大缺点就是不可靠,不适合传输大量的数据。
缺省情况下,RIP协议的路由更新报文的发送间隔为30秒,这样如果ISPA和ISPB的路由表非常大(达到100000条),30秒得时间间隔尚且不够完成路由的通告,这样整个高速链路就完全为RIP通告服务,而不能转发其他数据了。
解决区域间的问题思路
路由传递,一些路由数据的丢失,造成这个问题的主要原因是RIP使用的基础是UDP,UDP的特点不可靠。那如果采用TCP,TCP的特点就在于可靠。这样就解决了路由数据丢失的问题。
其次,由于RIP每隔30秒就会同步一次路由表,在之前路由条数相对比较少的情况下,尚可应付。现在面对规模如此巨大的路由表,难免不可支撑。这个问题也好解决,那就取消每隔30秒全量同步路由的机制,改为增量通告规则:如果路由没有变化,则不发任何通告;如果是路由增加,则通告给对方增加的路由;如果是路由删除,则通告给对方删除的路由;如果是路由修改,则首先通告一个路由删除,再通告一个路由增加。
这就是BGP协议的由来。在RIP协议上加以优化和改进。
那么采用TCP是怎么设计的?
TCP面向连接,基于TCP的协议必然有一个先建立连接的过程。要先建立连接,两端的设备就必须先互相知道对方的IP地址,并且路由可达。那么是采用静态配置的方式,还是动态建立连接的方式呢?BGP采用的是静态配置的方式,只要双方指定的地址路由可达,就可以建立连接。这样做有以下好处:可以与对端设备用任何IP地址建立邻居,而不限于某个固定接口的IP。这样,我们就可以采用环回地址而非直连接口地址建立BGP邻居,两台设备之间如果主链路中断了,只要有备份链路存在,就可以把流量切换到备份链路上,保持邻居不断,增加了BGP连接的稳定性。可以跨越多台设备建立邻居。由于是静态配置的方式,不一定只有直连设备才能建立BGP邻居,只要双方指定的地址路由可达(通过IGP或者静态路由),就可以建立邻居,这在AS内部建立IBGP连接时,就不用所有设备之间都建立IBGP连接。IBGP会在本期后面内容中提及。
知道对方IP地址后,BGP会通过发送open报文来进行邻居的建立。如果连接不能建立,说明对端设备状态不正常,于是会等待一段时间再进行连接的建立,这个过程一直重复,直到建立连接。
连接建立后,就可以进行路由表的同步了,BGP通过发送update报文进行路由表的同步。
路由表同步完成后,并不是马上拆除这个连接,因为随时有可能会有路由的更新或者删除,建立TCP连接是一个非常耗费资源的过程,所以BGP通过定期发送keepalive报文进行TCP连接的维持,这样就可以不用重新建立连接,立刻就可以进行路由更新。
如果经过一段时间(一般是3个keepalive报文发送周期)还没有收到对方的keepalive报文时,我们就认为对方出现了问题,于是可以拆除该TCP连接,并且把从对方收到的路由全部删除。
举例说明
这是一个典型的BGP应用组网。图中,有3个AS,AS之间运行BGP协议。 AS65008域内运行OSPF协议。R1和R5上只运行BGP协议,R2和R4上运行OSPF和BGP协议,R3上只运行OSPF协议。这里先解释下EBGP和IBGP。
EBGP:运行于AS之间两台设备的BGP关系。如图中R1和R2、R4和R5
IBGP:运行于AS内部两台设备的BGP关系。如图中R2和R4
AS内部不是有IGP么,为什么还要建立IBGP关系?
这是因为如果R2和R4之间不建立BGP关系,那么如果R1要把路由传递给R5,经过AS65008时,就只能把BGP路由引入到IGP中,通过IGP进行传递。而把数以10万计的BGP路由引入到IGP中的后果是灾难性的。所以上图中,R2和R4之间建立了IBGP的关系。值得一提的是,如上文所提及,由于BGP是通过静态配置的方式建立TCP连接,所以并非只能在两台直连的设备上建立BGP关系,如上图,R2和R4间通过OSPF路由可达,可以建立IBGP关系。
如果R2和R4之间不建立IBGP会怎么样?答案是:数据包却无法传递给R4、R5。
这里,我们对路由的传递过程和数据包的传递过程分别进行分析。
路由的传递过程
R1―R2:由于两台设备直连,并且建立EBGP关系,R1可以直接发送update报文至R2。
R2―R4:两台路由非直连,但是两台路由建立了IBGP关系,R2将update报文发送给R4。即该update报文的目的IP是R4,于是R2查询自己的路由表,由于域内运行了OSPF协议,通过OSPF,R2查询到去R4的下一跳是R3,于是将该update报文发给R3,R3收到该报文后,虽然没有运行BGP协议,但是根据报文的目的IP,将该update报文发送给R4。
R4―R5:同样,两台设备直连,并且建立EBGP关系,R4可以直接发送update报文至R5。
这样,路由的传递就完成了。
数据包的传递过程
R5―R4:R5发送的数据包,源IP是R5,目的IP是R1,于是R5查询路由表,因为从R4收到一条R1的路由,该路由的下一跳标识为R4。于是将数据包发送给R4。
R4―R2:当R4收到从R5发过来的数据包时,该数据包的源IP是R5,目的IP是R1。于是,R4查询路由表,发现去往R1的路由下一跳是R2(我们假定R2上配置了peer next-hop-local命令),由于下一跳非直连,于是R4查询去R2的下一跳。由于域内运行了OSPF,R4发现,去R2的下一跳是R3,于是将数据包发给了R3。当R3收到该数据包时,由于数据包的目的IP是R1的IP,但是R3并没有运行BGP,所以R3上没有R1的路由。于是R3将该数据包丢弃。
这就是经常说到的数据层面的“路由黑洞”。
peer next-hop-local命令一般在ASBR(Autonomous System Boundary Router)上配置。 当设备通过EBGP邻居学到路由再转发给其他IBGP邻居时,默认不修改下一跳,但其EBGP邻居发来的路由的下一跳都是其EBGP邻居的Peer地址,本端对等体所属AS域内的IBGP邻居收到这样的路由后,由于下一跳不可达导致路由无法活跃。 因此,需要在ASBR上对IBGP邻居配置peer next-hop-local命令,使得发给IBGP邻居的路由的下一跳是其自身的地址,IBGP邻居收到这样的路由后(由于域内都配置了IGP)发现下一跳可达,路由即为活跃路由。
解决路由黑洞的几个方法
1:根据BGP同步机制将BGP路由引入到IGP中。(S系列交换机缺省不启用BGP同步机制,但可以通过命令synchronization命令启用),这个方案的弊端上文已经说明。
2:物理全连接:以上图为例,如果AS65008内三台设备均通过物理线路连接起来,则R4可以直接将数据包发送给R2,而不需要通过R3转发。这个方案的弊端在于物理线路的铺设非常麻烦。
3:逻辑全连接:以上图为例,如果AS65008内三台设备均启用BGP进程,并且两两建立IBGP连接,则R3上也有R1的路由。可以成功转发数据。这个方案的弊端在于如果设备数量非常多,大量IBGP的连接难于管理。
边栏推荐
- 云原生应用平台的核心模块有哪些
- DirectX修复工具增强版「建议收藏」
- 日元疲软令游戏机在日本变身“理财产品”:黄牛大赚
- 日元疲软令游戏机在日本变身“理财产品”:黄牛大赚
- 全新荣威RX5,27寸大屏吸引人,安全、舒适一个不落
- The k-nearest neighbor method in the notes of Li Hang's "Statistical Learning Methods"
- C语言volatile关键字、内嵌汇编volatile与编译器的爱恨情仇
- 【新版干货书】深度伪造 (DeepFakes):创造,检测和影响
- QT专题:事件机制event基础篇
- 阿里巴巴 CTO 程立:开源是基础软件的源头!
猜你喜欢
DVWA Clearance Log 2 - Command Injection
日元疲软令游戏机在日本变身“理财产品”:黄牛大赚
李航《统计学习方法》笔记之朴素贝叶斯法
Do you agree with this view?Most businesses are digitizing just to ease anxiety
李航《统计学习方法》笔记之感知机perceptron
matlab-day02
Rear tube implements breadcrumb function
向量点积(Dot Product),向量叉积(Cross Product)
yolov7创新点
阿里巴巴 CTO 程立:开源是基础软件的源头!
随机推荐
行为型模式-策略模式
Use compilation to realize special effects of love
C语言volatile关键字、内嵌汇编volatile与编译器的爱恨情仇
刷题错题录1-隐式转换与精度丢失
npm ERR! 400 Bad Request - PUT xxx - Cannot publish over previously published version “1.0.0“.
armv7与armv8的区别(v8和w12的区别)
周杰伦新歌发布,爬取《Mojito》MV弹幕,看看粉丝们都说的些啥!
21年毕业转行软件测试,从0收入到月薪过万,我真的很幸运...
HikariCP database connection pool, too fast!
行为型模式-模板方法模式
R语言使用ggpubr包的ggtexttable函数可视化表格数据(直接绘制表格图或者在图像中添加表格数据)、设置theme主题参数自定义表格中表头内容的填充色(使用colnames.style参数)
R language ggplot2 visualization: use the ggtexttable function of the ggpubr package to visualize tabular data (directly draw tabular graphs or add tabular data to images), use tbody_add_border to add
【术语科普】关于集成工作台那些难懂的词儿,看这篇秒懂!
一款优秀的中文识别库——ocr
QT专题:自定义部件
练习-17
适配器模式适配出栈和队列及优先级队列
Naive Bayesian Method of Li Hang's "Statistical Learning Methods" Notes
8月份的.NET Conf 活动 专注于 .NET MAUI
第十七章 Excel操作