jjzjj

BGP路由协议

九郎、 2024-04-09 原文

特点

BGP是一种外部网关协议(EGP),不擅长路由计算,擅长路由控制

OSPF、ISIS等内部网关协议(IGP),擅长路由计算,不擅长路由控制

BGP属于距离矢量路由协议:邻居间交互路由信息

OSPF/ISIS属于链路状态路由协议:邻居间交互链路状态信息

BGP使用TCP传输层179端口,提高协议可靠性

BGP支持无类别域间CIDR

报文

open                 创建邻居关系    TCP建立BGP连接时,发送OPEN消息

keeplive          维护邻居关系  邻居关系稳定后定时发送keeplive消息保持BGP连接有效性

notifcation 邻居关系报错 运行中发现错误通过NOTIFACTION消息通告BGP对等体,刷新路由表

update          邻居间交互路由 路由变化发送UPDATE通知对方路由信息,也可以撤销不可达路由

邻居关系建立状态机

Idle:

        在空闲状态,拒绝邻居连接请求,只有在收到本设备的 Start (由操作者配置BGP过程)事件后,BGP初始化资源,复位连接重试计时器,BGP 才开始尝试和其它 BGP 对等体进行 TCP 连接,并转至 Connect 状态。

connect:

        BGP启动连接重传定时器,等待 TCP 完成连接。如果TCP连接成功,则BGP发送open报文,专至open sent状态。如果TCP建立失败,则BGP转至active状态。如果定时器超时,BGP继续尝试和其他对等体TCP连接,停留在connect状态。    

open-sent:

        在 OpenSent 状态下,BGP 等待对等体的 Open 报文,并对收到的 Open 报文中的
AS 号、版本号、认证码等进行检查。如果收到错误的报文,系统会发送一条notification通知消息并退会到idle状态。如果没有错误,BGP开始发送keeplive报文,并复位keeplive计时器,开始计时。同时转入openconfirm状态。

open-confirm:

        在OpenConfirm状态,BGP等待一个Keepalive报文,同时复位保持计时器,如果收到keeplive报文,就转入established状态

established:

        在 Established 状态下,说明BGP邻居关系已经建立,这时,BGP和邻居交互update报文,同时复位保持计时器。

在除Idle状态以外的其它五个状态出现任何Error的时候,BGP状态机就会退回到Idle状态

工作原理

1 创建邻居关系,区分邻居类型

        EBGP外部邻居,创建连接用物理接口

        IBGP内部邻居,创建连接用Loopback接口

        可以远程建立邻居关系,但是必须手动创建

2 手动注入BGP路由信息

        network注入,一条一条注入更精准,现网多使用。

        import-route注入,把外部路由引入BGP,批量注入,可能会引起环路

3 邻居间交互路由信息,形成路由表

        自己注入产生BGP路由,发送EBGP和IBGP,没有任何限制

        从EBGP获得BGP路由,发送EBGP和IBGP,没有任何限制(外部发送路由需要修改下一跳,内部发送默认不修改下一跳,强制netx-hop-local修改下一跳)

        从IBGP获得BGP路由,发送EBGP不发送IBGP,防止路由环路

OSPF和ISIS可以根据COST控制路由

BGP没有COST

属性

公认必遵属性:所有BGP路由器都可以识别,且必须存在于Update消息中。如果缺少这种属性,路由器信息就会报错。包含origin 、AS-path、next hop

公认任意:所有BGP路由器都可以识别,但不要求必须存在于Update消息中,可以根据具体情况选择。包含local-pref

可选过度:在AS间具有可传递的属性。BGP路由器可以不支持此属性,但仍然接受带有此属性的路由,并通告给其他对等体。

可选非过度:如果BGP路由器不支持此属性,则相应的属性会被忽略,且不会通告给其他对等体。包含 med

1 origin:记录路由起源,描述这条BGP路由信息的起源由network还是import-router注入

        network   i(IGP)优先选择

        import-router  ?(incpmplete) 可以强制修改优先级

        起点属性三个值的优先顺序为IGP>EGP>incomplete

2 AS-pateh:路径 记录BGP路由信息沿途所经过的编号,越短越优先,同时可以防止AS间的环路

3 next Hop :下一跳 (任何一条路由都必须具备下一跳和目的网络)EBGP传递路由下一跳变,         IBGP传递路由下一跳不变

4 local-pref:越大越优 用于判断流量离开AS时的最佳路由,用于一个AS内部,默认是100

5 Med:越小越优 等同于COST,用于判断流量进入AS时的最佳路由,用于相邻两个AS间

6 conmmunity :团体属性 为路由分类打标记,简化路由策略的应用和降低维护管理的难度。例如可以分为视频类、语音类等等。

公认团体属性:

        internet:缺省情况下,所有路由都属于internet团体,可通告所有BGP对等体

        no_export :不能发布到本地AS外部。

        no_advertise:不被通告给任何其他BGP对等体

        no_export_subconfed:不被发布到本地AS之外,也不能发布到其他AS间。

BGP最优路径选择过程

多重属性有限制LAO-MAN顺序:

local-pref > AS-path > origin > med > EBGP

1 首先丢弃下一条next-hop不可达的路由

2优选协议首选值(prefval)最大路由

        prefval:是华为特有的属性,指定对等体的首选值,数值越高越好。当BGP路由器从不同的邻居接收到到达同一目的的路由时,将比较本路由器设置的对这些邻居的preferred-value,数值越高,表明越优。(参考命令 peer 1.1.1.1 preferred-value 300)

3 优先选择本地优先级(local-pref)最高的路由

4 优选聚合路由(聚合路由优先级高于非聚合路由)

5 优选AS-PATH路径最短的路由

6 比较origin属性类型为IGP>EGP>incomplete

7 优选MED值最低的路由

8优选从EBGP学到的路由(外部邻居发送优于内部邻居)

有关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. CAN协议的学习与理解 - 2

    最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总

  5. 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

  6. 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个字符串为所有资源设置默认格式,每行不带“默认值”散列?谢谢。

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

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

  8. 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

  9. ruby-on-rails - 将 Rails 路由助手作为类方法添加到类中 - 2

    我如何将像“root_path”这样的Rails路由助手作为类方法添加到像my_model.rb这样的类中?所以我的课是这样的:ClassMyModeldefself.fooreturnself.root_pathendendMyModel.foo以上不起作用,因为ClassMyModel不响应root_path这是我所知道的:我可以使用includeRails.application.routes.url_helpers,但这只会将模块的方法添加为实例方法我试过扩展Rails.application.routes.url_helpers但它没用请随时给我上课:)

  10. ruby-on-rails - 获取 ActionController::RoutingError(当尝试使用 AngularJS 将数据发布到 Rails 服务器时,没有路由匹配 [OPTIONS] "/users" - 2

    尝试从我的AngularJS端将数据发布到Rails服务器时出现问题。服务器错误:ActionController::RoutingError(Noroutematches[OPTIONS]"/users"):actionpack(4.1.9)lib/action_dispatch/middleware/debug_exceptions.rb:21:in`call'actionpack(4.1.9)lib/action_dispatch/middleware/show_exceptions.rb:30:in`call'railties(4.1.9)lib/rails/rack/logg

随机推荐