HCIP-ICT实战进阶07-BGP路由选路

1 BGP路径属性

  • 任何一条BGP路由拥有多个路径属性;
  • 当路由器将BGP路由拥有通告他的对等体时, 在Update报文中一并被通告的还有路由所携带的各个路径属性;
  • BGP的路径属性将影响路由优选.

1.1 路径属性分类

  • 公认必遵: 所有BGP设备都可以识别该类型的路径属性, 而且属于该类别的路径属性一定需要在报文中携带, 如果不携带会导致路由信息不可用(信息缺失);
  • 公认任意: 所有的BGP设备都可以识别该类型的路径属性, 但是不要求一定在报文中携带, 如果不携带, 路由依旧可用;
  • 可选过渡: BGP设备可以不识别该类型的路径属性, 如果不识别BGP设备正常设备该路由并正常通告;
  • 可选非过渡: BGP设备可以不识别该类型的路径属性, 如果不识别BGP设备可以接收该路由, 但是该路径属性会被删除.

分析:

  • 公认: 这是国际标准, 所有BGP设备都知道该路径属性, 而且一定可以识别;
  • 可选: 不是国际标准, 可能是厂商定制的私有属性, 不是所有BGP都能识别;
  • 必遵: 一定需要携带;
  • 任意: 可以携带, 也可以不携带;
  • 过渡: 不识别的时候, 路径属性保留, 不影响路由使用;
  • 非过渡: 不识别的时候, 路径属性删除, 不影响路由使用.

OSPF和ISIS如果出现了同一个目的开销值一致, 会形成负载分担, 两条路径都能同时使用.

BGP默认情况下没有负载分担概念, 对于相同路由不同的下一跳, 一定会选出一条最优路径, 不会形成负载分担.

1.2 BGP的选路规则顺序

  1. 丢弃下一跳不可达的路由;

  2. 优选Pref-Val(Preferred-Value, 协议首选值)属性值最大的路由;

  3. 优选Local_Pref(Local_Preference, 本地优先级/本地首选值)属性值最大的路由;

  4. 本地始发的BGP路由优于其他对等体学习到的路由, 本地始发的路由优先级:

    优选手动聚合>自动聚合>network>import>从对等体学到的

  5. 优选AS-Path长度最短的路由;

    AS-Path会放在下面细说.

  6. 优选Origin属性最优的路由, Origin属性值优先级:

    IGP>EGP>Incomplete(import)

  7. 优选MED属性值最小的路由;

  8. 优选从EBGP学来的路由(EBGP > IBGP > LocalCross > RemoteCross);

  9. 优选到Next_Hop的IGP度量值(出接口开销值)最小的路由;

  10. 优选Cluster_List最短的路由(在BGP的RR反射器会讲到);

  11. 优选Router ID(Originator ID)最小的设备通告的路由;

  12. 优选具有最小IP地址的对等体通告的路由.

注意:

  1. 思科体系(思科、锐捷)中Preferred-Value中称为权重(weight), 默认为32768.

  2. 无论路由是因为哪条信息被优选了, 都可以通过以下命令查看

    dis ip routing-table ip-address
  3. BGP在默认情况下, 没有负载分担概念, 但是为了满足现实网络中的需求, BGP可以手动开启负载分担:

    bgp 100
    maximum load-balancing 2
    maximum load-balancing ebgp 2
    maximum load-balancing ibgp 2

    如果选择开启负载分担, 则上述所有路由优选规则2~9都必须不满足(属性都相同), 配置负载分担后无需继续匹配下面的路由优选规则.

    虽然形成了负载分担的BGP路由在路由表中都会出现,但在BGP路由表中只会优选一条.

1.3 Preferred-Value

Pref-Val: 该路径属性时华为设备特有属性, 只在当前BGP设备有意义, 本地始发和邻居传递过来的路由默认都是0, 通常为人为配置.

配置preferred-value:

peer ip-address preferred-value number

设置从对等体收到的路由的路由首选值为number(0-65535).

1.4 Local_Prefenence

Local-Pref: 公认任意属性, 表示路由器的BGP优先级, 用于判断流量离开AS的最佳路由, 只能传递给IBGP.

始发路由器本地优先级设置为空(0), 然后传递给AS内部的IBGP, IBGP接收时将0->100.

default local-preference 200

本地向所有邻居发送的路由中, 本地优先级设置为200, 也可以通过route-policy来apply, 可以具体控制在发出时修改和接收到时修改, route-policy优先级高于default.

1.5 AS_Path

  • 该属性为公认必遵属性, 是前往目标网络的路由经过的AS号列表;
  • 作用: 确保路由在EBGP对等体之间传递无环, 也是路由优选的标准之一;
  • 路由在被通告给EBGP对等体时, 在出AS时路由器会在该路由的AS_Path中追加上本地的AS号; 路由被通告给IBGP对等体时, AS_Path不发生改变.

防止环路

在Update回到AS100时, R1发现AS-Path中有自己的AS号, 就会拒绝接收该报文.

  • IBGP防环: 从IBGP收到的路由不会再发送给自己的IBGP邻居;
  • EBGP防环: 通过AS_Path查看是否存在当前设备所在的AS号码.

只有在EBGP之间传递的路由信息才会新增AS_Path信息.

AS_Path影响路由优选

长度越短越优先.

AS_Path的属性是可以修改的:

  1. 使用route-policy的apply语句:

    route-policy test permit node 10
    apply as-path 10 20 30 {additive|overwrite}
    qu bgp 100
    peer 10.0.45.4 route-policy test export
    qu
    • additive: 在AS_Path的最前面加入该段路径信息;

      export方向需要注意的点:

      1. EBGP关系之间传递BGP路由会增加一个AS号码.

      2. route-policy的AS_Path增加会比EBGP传递时增加的要更早, 举个例子:

        原本的AS_Path为200 300, 现在将这条路由信息传递给AS=100的区域, 同时在出接口方向上配置route-policy, 10 20 30 additive, 最终我们在AS=100的设备上看到的AS_Path为:

        Path/Ogn
        100 10 20 30 200 300
    • overwrite: 直接重写AS_Path.

      export方向需要注意的点同additive.

    注: 在BGP出方向调用route-policy时需要等待bgp自动更新.

AS_Path类型

  1. AS-Squence: 表示正常的AS_Path属性;

  2. AS-Set: 当路由被聚合之后, 导致AS_Path属性丢失, 可能会导致环路出现, 可以通过配置保留:

    aggregate ip-address mask as-set

    表示聚合的路由需要保留原本的AS_Path路径, 但是保留下来的长度都会被置为1.

  3. AS-Confed-Sequence: BGP联盟中使用的AS_Path属性.

  4. AS-Confed-Set: BGP联盟中, 如果出现了路由聚合, 并且有AS-Set, 则使用该属性.

在一个AS_Path里面如果出现了上述四种内容:

AS_Path: (800 700) [600 500] 400 {300 200 100}

  • 没有标识的是AS-Seq, 是正常的AS_Path;
  • []: 表示AS-Confed-set, 是联盟聚合路由保留下来的AS_Path, 长度为1;
  • (): 表示AS-Confed-seq, 是联盟聚合路由保留下来的AS_Path, 长度正常计算;
  • {}: 表示AS-Set: 正常BGP路由被聚合之后, 保留AS_Path属性长度为1.

所以上述AS_Path的长度应该为: 2+1+1+1=5

AS_Path补充命令

  1. 允许AS_Path中存在和当前AS一致的号码:

    peer ip-address allow-as-loop
  2. 采用虚拟AS_Path建立对等体关系:

    peer ip-address fake-as as-number
  3. 利用BGP专用工具, 进行AS_Path匹配, 然后过滤路由:

    peer ip-address as-path-filter test export

    在出方向上采用as-path-filter test对路由信息进行过滤.

    as-path-filter中采用正则表达式进行匹配.

1.6 Origin属性(Ogn)

Origin为公认必遵属性.

表示该条BGP路由的方式和来源, 一般有三种:

  • ?: 表示该路由是import-route引入进来的, 有时候写成incomplete;
  • i: 该路由是network引入进来的, 有时候写成IGP.
  • e: 该路由是通过egp传递过来的, 有时候写成EGP.

1.7 MED

可选非过渡属性, 类似开销值.

MED的产生规则

  • 如果network或者import-route命令注入的直连路由, 则MED值为0;

  • 如果network或者import-route命令注入的非直连路由, 则MED值就等于IGP协议的cost;

  • 传递给IBGP和EBGP邻居的时候, 也是携带了对应的MED.

  • 如果路由是由IBGP学习到的, 现在需要通过EBGP方式传递给其他设备, 则MED值在传递时会被删除. 自己产生的路由传递给EBGP则会保留MED.

  • 通过Aggregate聚合过的路由MED为空.

注: 为空=为0.

配置MED

  1. 配置默认MED:

    default med
  2. 通过route-policy:

    route-policy test2 permit node 10
    apply cost 10
    qu
    bgp 100
    peer 1.1.1.1 route-policy test2 import
    qu

    就是在route-policy修改开销值, 然后在BGP的peer中调用.

MED的传递会被限制在两个相邻AS之间, 在到达不相邻的AS的时候MED会被清除, 但是路由信息依然可用.

默认情况下BGP设备只会比较来自同一个AS的MED, 如果要比较不同AS的MED, 则需要进行配置:

bgp 200
compare-different-as-med
qu

不推荐配置, 配置后容易出现环路问题.

1.8 Next_Hop

该属性时一个公认必遵属性, 用于指定到达目标网络的下一跳地址.

当路由器学习到BGP路由后, 需要对BGP路由的Next_Hop属性值进行检查, 该属性值(IP地址)必须在本地路由可达.

设置规则

在不同场景中, 设备对BGP路由的缺省Next_Hop属性值的设置规则如下:

  • 路由器将BGP路由通告给字的EBGP对等体时, 将该路由的Next_Hop设置为自己的更新源IP地址;
  • 路由器在收到EBGP对等体所通告的BGP路由后, 在将路由传递给自己的IBGP对等体时, 会保持路由的Next_Hop属性值不变;
  • 如果路由器收到某条BGP路由, 该路由的Next_Hop属性值与EBGP对等体(更新对象)同属一个网段, 那么该条路由的Next_Hop地址将保持不变并传递给它的BGP对等体.

缺省操作

  1. 路由器将BGP路由通告给自己的EBGP对等体时, 将该路由的Next_Hop设置为自己的TCP连接源地址;
  2. 路由器在收到EBGP对等体所通告的BGP路由后, 在将路由传递给自己的IBGP对等体时, 会保持路由的Next_Hop属性值不变;
  3. 如果路由器收到某条BGP路由, 该路由的Next_Hop属性值与EBGP对等体(更新对象)同属一个网段, 那么该条路由的Next_Hop地址将保持不变并传递给他的BGP对等体.

修改Next_Hop

配置命令

peer ip-address next-hop-local

1.9 Community

技术介绍

有了Community属性, 我们可以为不同种类的路由打上不同的Community属性值,这些属性值会随着BGP路由更新给AS200,那么在AS200内的BGP路由器上,只需要根据Community属性值来执行差异化的策略即可,而不用去关心具体的路由前缀。

Community属性

Community(团体)属性为可选过渡属性, 是一种路由标记, 用于简化路由策略的执行.

可以将某些路由分配一个特定的Community属性值, 之后就可以基于Community值而不是网络前缀/掩码信息来匹配路由并执行相应的策略了.

属性格式

Community属性长度32bit(4Byte).

AA、NN: 其中AA表示AS号, NN是自定义编号.

公认Community属性

1.10 Atomic_Aggregate及Aggregator

Atomic_Aggregate属于公认任意属性, 而Aggregator属性属于可选过渡属性.

查看聚合后的路由:

display bgp routing-table ip-address mask

路由聚合会导致AS_Path丢失.

BGP补充命令

  1. 配置BGP仅发布IP路由表中被优选的路由

    active-route-advertise

    默认只发布BGP表中被优选的路由, 但配置这条命令后需要双重优选.

  2. 禁止BGP路由下发到IP路由表

    routing-table rib-only

    和命令4冲突.

HCIP-ICT实战进阶07-BGP路由选路的更多相关文章

  1. BGP路由属性详解

    Weight属性:cisco私有的BGP属性参数,它只适用于一台路由器中的路由,也就是不会传递给任何其他的路由器.他的取值范围为<0-65535>,这个数越大优先级越高,默认从邻居学到的路 ...

  2. HCNP Routing&Switching之BGP路由控制

    前文我们了解了BGP的路由属性和优选规则相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15489497.html:今天我们来聊一聊BGP路由控制相关话 ...

  3. RIP、OSPF、BGP、动态路由选路协议、自治域AS

    相关学习资料 tcp-ip详解卷1:协议.pdf http://www.rfc-editor.org/rfc/rfc1058.txt http://www.rfc-editor.org/rfc/rfc ...

  4. BGP路由控制属性

    控制BGP路由概述: BGP与IGP不同,其着跟点主要在于不同的AS之间控制路由的传播和选择最佳路由 通过修改BGP基本属性可以实现基本的BGP路由控制和最佳路由的选择 引入其他路由协议发现的路由时. ...

  5. BGP路由技术

    BGP路由技术 目录 一.BGP概述 1.1.自治系统 1.2.动态路由分类 1.3.BGP概念 1.4.BGP的特征 1.5.BGP工作原理 二.命令配置 2.1.BGP配置思路 2.2.命令 一. ...

  6. HCNP Routing&Switching之BGP路由属性和优选规则

    前文我们了解了BGP防环机制和路由聚合相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15458110.html:今天我们来聊一聊BGP路由属性和选路规 ...

  7. C#进阶系列——WebApi 路由机制剖析:你准备好了吗?

    前言:从MVC到WebApi,路由机制一直是伴随着这些技术的一个重要组成部分. 它可以很简单:如果你仅仅只需要会用一些简单的路由,如/Home/Index,那么你只需要配置一个默认路由就能简单搞定: ...

  8. 如何使用 Quagga BGP(边界网关协议)路由器来过滤 BGP 路由

    在之前的文章中,我们介绍了如何使用 Quagga 将 CentOS 服务器变成一个 BGP 路由器,也介绍了 BGP 对等体和前缀交换设置.在本教程中,我们将重点放在如何使用前缀列表prefix-li ...

  9. CCIE路由实验(4) -- BGP路由控制

    1.过滤BGP路由的方法2.用AS-path filter控制路由3.用Community Filter控制路由 enableconf tno ip do loenable pass ciscolin ...

  10. Asp.Net MVC 进阶篇:路由匹配 实现博客路径 和文章路径

    Asp.Net MVC 进阶篇:路由匹配 实现博客路径 和文章路径 我们要实现 通过路由 匹配出 博客地址 和博客文章地址 例如下面的这两个地址 //http://www.cnblogs.com/ma ...

随机推荐

  1. Java 进阶P-8.5+P-8.6

    抛出异常 异常的抛出与声明 如果你的函数可能抛出异常,就必须在函数头部加以声明 你可以声明并不会真的抛出得异常 什么能扔? 任何继承了Throw able类的对象 Exception类继承了Throw ...

  2. 行为型模式 - 解释器模式Interpreter

    学习而来,代码是自己敲的.也有些自己的理解在里边,有问题希望大家指出. 模式的定义与特点 解释器模式(Interperter Pattern),给定一个语言,定义它的文法表示,并定义一个解释器,这个解 ...

  3. python学习第八周总结

    多进程实现TCP服务端并发 之前我们学习了用socket模块进行文字以及文件的传输,但是之前的操作一个服务端只能与一个客户端进行交互,如果要想实现多个客户端与服务端交互的并发效果,我们需要进行如下操作 ...

  4. 学习Java Day6

    今天学习了Java的输出,与C/C++不同,Java的输出形式有很多,有许多printf标识符表示的含义各不相同,而且数量众多,其中Java还有表示日期的转换符.

  5. Golang HTTP编程及源码解析

    1.网络基础 基本TCP客户-服务器程序Socket编程流程如如下图所示. TCP服务器绑定到特定端口并阻塞监听客户端端连接, TCP客户端则通过IP+端口向服务器发起请求,客户-服务器建立连接之后就 ...

  6. 图说论文《An Empirical Evaluation of In-Memory Multi-Version Concurrency Control》

    本文从< An Empirical Evaluation of In-Memory Multi-Version Concurrency Control>摘取部分图片,来介绍 MVCC. 该 ...

  7. 乌卡时代的云成本管理:从0到1了解FinOps

    在上一篇文章中,我们介绍了企业云业务的成本构成以及目前面临的成本困境,以及当前企业逐步转向 FinOps 的行业趋势,这篇文章我们将详细聊聊 FinOps,包括概念.重要性以及成熟度评价指标. 随着对 ...

  8. Windows家庭版安装本地组策略编辑器【gpedit.msc】

    由于我们买的电脑一般默认安装的Windows家庭版本 家庭版本默认不带有本地组策略编辑器 当我们运行gpedit.msc的时候会提示 Winodws找不到文件'gpedit.msc'.请确定文件名是否 ...

  9. ubuntu lnmp环境搭建 LNMP(Ubuntu 20.04 + Nginx + PHP 7.1 + Mysql5.7)

    转载csdn: ubuntu lnmp环境搭建 LNMP(Ubuntu 20.04 + Nginx + PHP 7.1 + Mysql5.7)_ts3211的博客-CSDN博客_lnmp环境搭建

  10. PostgresSQL用returning实现mysql的last_insert_id

    今天开发问到,postgressql里面有没有像mysql那样插入一个值后返回插入的值,这个是有的,而且有更强的扩展性. 示例: [postgres@localhost ~]$ psql psql ( ...