草庐IT

BGP路由技术

微笑的段嘉许 2023-03-28 原文

BGP路由技术

?博客主页: ​​微笑的段嘉许博客主页​

?欢迎关注?点赞?收藏⭐留言?

?本文由微笑的段嘉许原创!

?51CTO首发时间:?2022年9月29日?

✉️坚持和努力一定能换来诗与远方!

?作者水平很有限,如果发现错误,一定要及时告知作者哦!感谢感谢!

⭐本文介绍⭐

BGP(Border Gateway Protocol,边界网关协议)是一个路径矢量路由协议,和传统的基于下一跳的IGP协议不同,它是基于AS(自治系统)的协议。BGP属于外部网关路由协议,它解决的是AS之间的选路问题,也正因为这样,它更适合与互联网。学习BGP的关键在于理解BGP的报文,邻居建立,BGP路由属性,选路原则等。本文将对以上各项知识、工作原理及相关的配置做介绍。


?理论讲解:

BGP的工作原理

BGP是跨公网,跨自治系统的路由协议,可以在自治系统之间学习路由。BGP的动态学习路由也是基于邻居,只有邻居关系正常,BGP才可以正常工作。下面首先介绍BGP中的邻居关系及路由通告。

BGP邻居关系

运行BGP的路由器通常被称为BGPSpeaker(发言者),相互之间传递报文的Speaker之间互称为对等体(Peer)。BGP邻居关系的建立,更新和删除是通过对等体之间交互 5 种报文、6 种状态机和 5 个表等信息来完成的,最终形成BGP邻居,一下分别进行介绍。

BGP报文

BGP报文头中的Type定义了BGP的报文类型。BGP对等体之间通过5 种报文进行路由信息的交互。这5 种报文类型分别是Open、Update、Notification、KeepAlive和Route-Refresh。

1)Open报文

Open报文是TCP连接建立后发送的第一个报文,用于建立BGP对等体之间的连接关系,主要包括BGP版本,本地AS编号,Hold time等信息。对等体在接收到对端发过来的Open报文并协商成功后,将发送Keep Alive报文确定并保持连接的有效性。BGP对等体关系确定后,对等体间可以进行Update、Notification、Keep Alive和Route-Refresh报文的交换,以更新路由信息。

2)UPdate报文

Update报文用来在BGP对等体之间更新路由信息。Update报文可以通告多条属性相同的可达路由信息,也可以撤销多条不可达路由信息。

3)Notification报文

Notification报文的作用是当BGP检测到错误状态时,立刻向对等体发出Notification报文,之后BGP连接会立即中断。要注意的是,不管当前BGP状态当时处于何种状态,只要收到Notification报文就会放回idle状态。换而言之,BGP是不允许错误出现的一种路由协议,在选路原则中,更优的路由往往是邻居关系最久的对等体,以此反映对等体两端经历很长的时间都没有出现过错误。

4)Route-Refresh

用来告知对等体本地所支持路由的刷新能力,在所有BGP路由器拥有Route-Refresh能力的情况下,如果BGP的入口路由策略发生了变化,本地BGP路由器会向对等体发送Route-Refresh报文,收到此消息的对等体会将其路由信息重新发给本地BGP路由器。这样,可以在不中断BGP连接的情况下,对BGP路由表进行动态刷新,并应用新的路由策略。该报文中的AFI字段,用于标识所采用的地址族的类型,如IPv4单薄或者组播。

5)KeepAlive

该报文在对等体之间周期性的发送,用以保持连接的有效性并维护其连接,Keep Alive报文只有一个BGP报文头。默认Keep Alive报文发送周期为60s,Hold time为180s。Keep Alive报文类似于OSPF协议中的Hello报文,当收到对等体发过来的KeepAlive报文后会刷新Hold time计时器,如果Hold time计时器超时仍未收到Keep Alive报文,则认为对等体失效。

BGP状态机

1、ldle状态

2、Connect状态

3、Active状态

4、Open Sen状态

5、Open Confirm状态

6、Established状态

BGP数据库

BGP数据库是BGP正常工作需要的存储空间,基于保存的内容不同,可分为如下几种:

  1. IP路由表(IP-RIB)
    全局路由信息库,包括所有最优的IP路由信息
  2. BGP路由表(Loc-RIB)
    BGP路由信息库,包括本地BGP Speaker通告的路由信息,将其中最优路由添加到IP路由表中。
    注意:先要关注BGP路由表,若BGP路由表中不是最优路由,则无法在IP路由中可见。
  3. 邻居表
    对等体邻居清单列表,包括对等体两端的邻居信息及邻居列表。
  4. Adi-RIB-In
    对等体宣告给本地Speaker的未处理的路由信息库
  5. Adj-RIB-Out
    本地Speaker宣告给指定对等体的路由信息库。

BGP邻居关系类型

在BGP中大致可分为两种邻居关系,IBGP邻居关系和EBGP邻居。

  • IBGP:同一个AS内部的BGP关系,IBGP邻居通常是指运行BGP协议的对等体两端均在统一个AS域内,属于同一个BGP AS内部。
  • EBGP:AS之间的BGP关系,EBGP邻居通常是指运行在BGP协议的对等体两端分别在不同的AS内。
?友情提示:

IGP协议建立邻居一般要求三层直连,并且通过广播或组播建立邻居。而BGP的邻居关系是基于TCP的,也就是说只要TCP/IP 可达,无论是否直连,BGP对等体彼此之间就可以建立邻居关系。所以BGP建立邻居之前首先要考虑的就是对等体之间的路径是否可达。务必要通过IGP或者静态路由使对等体两端互通。

?实验配置与实现:

拓扑图:

推荐步骤

R1和R2、R3互联链路配置RIPv2

R2和R3互联R4链路配置OSPF

在R2和R3配置路由重分发OSPF和RIP相互重分发全网互通

在R1配置BGP和R2以及R3建立EBGP邻居关系宣告Lo0网络

在R2配置BGP和R1建立EBGP邻居宣告Lo0网络,R2和R4建立IBGP邻居和Lo0建立邻居关系更新源,在R2配置IBGP下一跳可达

在R3配置BGP和R1建立EBGP邻居宣告Lo0网络,R3和R4建立IBGP邻居和Lo0建立邻居关系更新源,在R3配置IBGP下一跳可达

在R2配置路由策略修改优先级为300经过R2转发数据

实验步骤

一、R1和R2、R3互联链路配置RIPv2

1、R1配置RIPv2,宣告直连路由

1)启动RIP进程

2)关闭路由汇总

3)宣告直连路由

2、R2配置RIPv2,宣告直连路由

1)启动RIP进程

2)关闭路由汇总

3)宣告直连路由

3、R3配置RIPv2,宣告直连路由

1)启动RIP进程

2)关闭路由汇总

3)宣告直连路由

二、R2和R3互联R4链路配置OSPF

1、在路由器R2上配置ospf,指定区域宣告直连网络

1)启动ospf进程为1指定route-id

2)指定ospf区域,宣告直连路由

2、在路由器R3上配置ospf,指定区域宣告直连网络

1)启动ospf进程为1指定route-id

2)指定ospf区域,宣告直连路由

3、在路由器R4上配置ospf,指定区域宣告直连网络

1)启动ospf进程为1指定route-id

2)指定ospf区域,宣告直连路由

三、在R2和R3配置路由重分发OSPF和RIP相互重分发全网互通

1、在路由器R2配置路由重分发ospf和rip

1)R2配置路由重分发

2、在路由器R3配置路由重分发ospf和rip

1)R3配置路由重分发

3、验证全网互通

1)在R1上验证全网互通

2)在R4验证全网互通

四、在R1配置BGP和R2以及R3建立EBGP邻居关系宣告Lo0网络

1、在路由器R1上建立EBGP,宣告Lo0网络

1)启动BGP进程

2)指定route-id

3)建立邻居关系表

4)宣告直连路由

五、在R2配置BGP和R1建立EBGP邻居宣告Lo0网络,R2和R4建立IBGP邻居和Lo0建立邻居关系更新源,在R2配置IBGP下一跳可达

1、在路由器R2配置上BGP和R1建立EBGP和R4建立IBGP邻居和Lo0建立邻居关系更新源、宣告Lo0网络,配置IBGP下一跳可达

1)启动BGP进程

2)指定route-id

3)建立邻居关系表

4)宣告直连路由

5)配置IBGP下一跳可达

六、在R3配置BGP和R1建立EBGP邻居宣告Lo0网络,R3和R4建立IBGP邻居和Lo0建立邻居关系更新源,在R3配置IBGP下一跳可达

1、在路由器R3上配置BGP和R1建立EBGP邻居,和R4建立IBGP邻居和Lo0建立邻居关系更新源,配置IBGP下一跳可达

1)启动BGP进程

2)指定route-id

3建立邻居关系表

4)宣告直连路由

5)配置IBGP下一跳可达

七、在路由器R4上配置IBGP邻居和R2、R3Lo0建立邻居关系更新源,配置IBGP下一跳可达

1、路由器R4和R2、R3Lo0建立邻居关系更新源

1)启动BGP进程

2)指定route-id

3)建立邻居关系表

4)宣告直连路由

八、在R2配置路由策略修改优先级为300经过R2转发数据

1、在路由器R2配置路由策略修改优先级300

1)创建了路由策略

2)应用路由器策略

3)重置BGP用户视图

4)验证


?作者水平很有限,如果发现错误,一定要及时告知作者哦!感谢感谢!

有关BGP路由技术的更多相关文章

  1. ruby-on-rails - Rails 3 中的多个路由文件 - 2

    Rails2.3可以选择随时使用RouteSet#add_configuration_file添加更多路由。是否可以在Rails3项目中做同样的事情? 最佳答案 在config/application.rb中:config.paths.config.routes在Rails3.2(也可能是Rails3.1)中,使用:config.paths["config/routes"] 关于ruby-on-rails-Rails3中的多个路由文件,我们在StackOverflow上找到一个类似的问题

  2. ruby - rails 3 redirect_to 将参数传递给命名路由 - 2

    我没有找到太多关于如何执行此操作的信息,尽管有很多关于如何使用像这样的redirect_to将参数传递给重定向的建议:action=>'something',:controller=>'something'在我的应用程序中,我在路由文件中有以下内容match'profile'=>'User#show'我的表演Action是这样的defshow@user=User.find(params[:user])@title=@user.first_nameend重定向发生在同一个用户Controller中,就像这样defregister@title="Registration"@user=Use

  3. ruby-on-rails - Rails 3,嵌套资源,没有路由匹配 [PUT] - 2

    我真的为这个而疯狂。我一直在搜索答案并尝试我找到的所有内容,包括相关问题和stackoverflow上的答案,但仍然无法正常工作。我正在使用嵌套资源,但无法使表单正常工作。我总是遇到错误,例如没有路线匹配[PUT]"/galleries/1/photos"表格在这里:/galleries/1/photos/1/edit路线.rbresources:galleriesdoresources:photosendresources:galleriesresources:photos照片Controller.rbdefnew@gallery=Gallery.find(params[:galle

  4. Unity 热更新技术 | (三) Lua语言基本介绍及下载安装 - 2

    ?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------

  5. MIMO-OFDM无线通信技术及MATLAB实现(1)无线信道:传播和衰落 - 2

     MIMO技术的优缺点优点通过下面三个增益来总体概括:阵列增益。阵列增益是指由于接收机通过对接收信号的相干合并而活得的平均SNR的提高。在发射机不知道信道信息的情况下,MIMO系统可以获得的阵列增益与接收天线数成正比复用增益。在采用空间复用方案的MIMO系统中,可以获得复用增益,即信道容量成倍增加。信道容量的增加与min(Nt,Nr)成正比分集增益。在采用空间分集方案的MIMO系统中,可以获得分集增益,即可靠性性能的改善。分集增益用独立衰落支路数来描述,即分集指数。在使用了空时编码的MIMO系统中,由于接收天线或发射天线之间的间距较远,可认为它们各自的大尺度衰落是相互独立的,因此分布式MIMO

  6. ruby-on-rails - Rails - 从命名路由中提取 HTTP 动词 - 2

    Rails中有没有一种方法可以提取与路由关联的HTTP动词?例如,给定这样的路线:将“users”匹配到:“users#show”,通过:[:get,:post]我能实现这样的目标吗?users_path.respond_to?(:get)(显然#respond_to不是正确的方法)我最接近的是通过执行以下操作,但它似乎并不令人满意。Rails.application.routes.routes.named_routes["users"].constraints[:request_method]#=>/^GET$/对于上下文,我有一个设置cookie然后执行redirect_to:ba

  7. ruby-on-rails - 如何在 Rails 中设置路由的默认格式? - 2

    路由有如下代码:resources:orders,only:[:create],defaults:{format:'json'}resources:users,only:[:create,:update],defaults:{format:'json'}resources:delivery_types,only:[:index],defaults:{format:'json'}resources:time_corrections,only:[:index],defaults:{format:'json'}是否可以使用1个字符串为所有资源设置默认格式,每行不带“默认值”散列?谢谢。

  8. ruby-on-rails - 用于门户的 Ruby 技术 - 2

    我刚刚看到whitehouse.gov正在使用drupal作为CMS和门户技术。drupal的优点之一似乎是很容易添加插件,而且编程最少,即重新发明轮子最少。这实际上正是Ruby-on-Rails的DRY理念。所以:drupal的缺点是什么?Rails或其他基于Ruby的技术有哪些不符合whitehouse.org(或其他CMS门户)门户技术的资格? 最佳答案 Whatarethedrawbacksofdrupal?对于Ruby和Rails,这确实是一个相当主观的问题。Drupal是一个可靠的内容管理选项,非常适合面向社区的站点。它

  9. ruby - cucumber 的路由问题 - 2

    我正在使用rails3和cucumber,除了这个小问题,一切都很顺利GivenIamonthe"editautomobile"pageNoroutematches{:controller=>"automobiles",:action=>"edit"}(ActionController::RoutingError)现在路径在paths.rb中设置为edit_automobile_path在routes.rb中我有汽车作为资源,我搭建了它所以请告诉我我遗漏了什么,清楚地定义了路线并且匹配,因为我运行了rake路线并看到了路线。请指出正确的方向 最佳答案

  10. ruby - Rails 路由 : Giving default values for path helpers - 2

    有什么方法可以为url/path助手提供默认值吗?我有一个可选范围环绕我的所有路线:#config/routes.rbFoo::Application.routes.drawdoscope"(:current_brand)",:constraints=>{:current_brand=>/(foo)|(bar)/}do#...allotherroutesgohereendend我希望用户能够使用这些URL访问网站:/foo/some-place/bar/some-place/some-place为了方便起见,我在我的ApplicationController中设置了一个@current

随机推荐