• BGP选路原则笔记 Cyrus


    BGP的属性就是BGP路由所具有的一些特性
    公认必遵:只要是BGP路由就应该拥有特征,Update消息必须包含这些属性
    AS-Path、Next-Hop、Origin ID
    (1)前缀一开始注入BGP时,下一跳依赖注入的方式
    aggregate-address——0.0.0.0 (本地路由器)
    network / redistribute——原路由的下一跳地址,如果路由的下一跳地址存在(指向null)本路由器将成为该BGP路由的下一跳!即0.0.0.0
    (2)通过EBGP通告出去的前缀,下一跳在自动被重置为正在发送该前缀的EBGP Peer的更新源地址!这里“第三方下一跳”除外
    (3)IBGP下一跳不变,也可以使用next-hop-self修改
    公认可遵:所有BGP路由器都能识别,但不一定需要,Updata 消息中可以不包括该属性
    Local-prefence、Atomtic-aggre
    可选传递:不是所有的路由器都能识别,但所有路由器都能传递它,即使此路由器不接受也能传递
    Aggregator、Community
    可选非传递:不是所有的路由器都能识别,不能识别的路由器丢弃它!如果BGP路由器不接受则立即丢弃此特性,不再传递
    MED、Originator ID、Cluster Lister
    ============================================
    BGP每条更新消息都有一个长度可变的路径属性序列<属性类型,属性长度,属性值>,如果第1比特是0,则属于是公认属性,如果它是1,则该属性是任选属性,如果第2比特是0,则该属性是不可传递的,如果它是1,则属性是可传递的,公认属性总是可传递的,属性标志域中的第3个比特指示任选可传递属性中的信息是部分的(值为1)还是完整的(值为0),第4个比特确定该属性长度是1字还是2字节,标志域其他4个比特总为0.属性类型代码字节含有属性代码。如下图所示。


    BGP选路属性(位于BGP表中)
    (1)Weight——可选非传递属性(越高越优)
    本路由器有效(传播范围:思科IOS私有属性)
    本地发起的路由32768
    学习过来的路由是0(两种默认值)

    (2)Local-preference
    本AS内传递(传播范围)
    默认值为100
    可以进程下修改:bgp default local-preference XXX
    配置结果说明:本AS内做配置,影响本AS访问外部网络(建议用明细路由查看该属性)

    (3)Origination
    基于始发地(origination)评估路由
    路由器本地始发的路径优先,顺序从高到低为:
    default­-originate(针对每个邻居)
    default-information-originate(针对每个地址簇)
    network
    redistribute
    aggregate-address

    (4)AS-Path
    全网传播(传播范围)
    每经过一个AS号,就在起始AS后(左边)添加(默认值)
    默认情况下,AS-PATH列表最短的路径优先。但是,可以通过配置bgp bestpath as-path ignore(隐含命令)来忽略这一步
    配置说明:可以在进出方向做添加AS号来影响BGP传递
    在进来之前添加上所设置的AS号
    在发出之前添加上所设置的AS号
    注意事项:
    一个AS-PATH被计数为1,而不管“set”中包含多少个AS
    AS_CONFED_SQUENCE不包含在AS-Path长度中

    (5)Origin-ID(Origin code)
    全网传播(传播范围)
    默认值看通告路由的方式
    配置说明:IGP > EGP > incomplete
    EGP的路由在现网上已经不存在了!
    前缀被注入BGP时,它的Origin-ID属性是自动被定义的,但可以手工修改

    (6)MED(越小越优)[metric]
    本AS内传播(传播范围)
    默认值为0(默认值)
    配置说明:本AS做配置,影响外部访问本AS内的网络
    MED应该注意的地方:
    默认情况下只有当AS_SEQUENCE中和第一个AS相同的情况下,才会比较MED!如果要比较来自不同AS的MED,必须激活bgp always-compare-med,而且是整个AS中都激活
    如果收到的路由没有MED,默认情况下是重置0,除非bgp bestpath med missing-as-worst被激活(默认情况丢失MED的路由条目,将被设置为一个最差MED值)
    *任何子联盟自治系统都被忽略,可以使用bgp always-compare-med激活所有路径都比较MED
    边界路由器本地发起的条目通告给eBGP邻居的MED属性不会丢失
    bgp deterministic-med                                                      
        Pick the best-MED path among paths advertised from the neighboring AS 

    另外MED的通告规则:
    (1. ebgp在发布从ibgp学来的路由时,会清除MED的值。如果想强制通告,可以在宣告的路由上使用“set metric-type internal”
    (2. 如果使用network或redistribute命令将来自IGP的路由通告到BGP中,那么BGP的MED是从IGP的metric导出的。
    (3. 如果是aggregate-address命令注入路由,BGP的MED不被设置。

    (7)Prefer EBGP path over IBGP path (EBGP > IBGP)

    (8)Prefer the path through the closest IGP neighbor(更近的IGP邻居)
    这里是指peer的更新源在我的路由表里显示,哪个最近哪个最优。
    OSPF是否考虑O、OIA、OE1、OE2?只看cost不看O/OIA/OE。

    (9)Prefer the path with the lowest  IBGP neighbor router ID(最小的ibgp router-id)
    如果配置maximum-paths {IBGP} n<2 - 6>,并且存在多条等成本的路径(对于多条路径,以上1 - 6的比较结果相同,而且AS-Path也相同)
    那么BGP会在IGP路由表中插入n条路径,默认只对EBGP有效
    BGP默认maximum-path=1,只能有一条最优路径,但可以通过命令来改变,如果没有IBGP参数,默认只能做EBGP的负载均衡。做负载均衡还有一个条件,就是上面的8条都比不出哪条最优的情况下,才有可能出现负载均衡。

    (10)当两条路径都是外部路径时,BGP将优先选择最先收到的路径(最老的路径),但如果以下任一条件为真,这一步忽略
    启用bgp bestpath compare-routerid
    多条路径最优相同的RID(因为从同一外部路由器接收过来)
    当前没有最佳路径,缺乏当前最佳路径的例子就是正在通告最佳路径的邻居失效的时候

    比较Router-ID对于EBGP来说不生效

    (11)选择最小的RID BGP邻居发送的路径(如果路径包含RR属性,则用Originator-ID替代RID)
    BGP优选来自具有最低的路由器ID的BGP路由器的路由。Router-id是路由器上最高的IP地址,并且优选环回口。也可以通过bgp router-id命令静态的设定路由器ID。如果路径包含RR属性,那么在路径选择过程中,就用originator-id来替代路由器ID。

    (12)如果多条路径Originator-ID或RID都相同,那么选择Cluster-List长度最短的路径
    多跳路径的始发路由器ID相同,那么选择CLUSTER_LIST长度短的,因为每经过一个RR,cluster-list会加上这个RR的router-id
    如果多条路径的始发router-id相同,那么BGP将优选cluster-list长度最短的路径。这种情况仅仅出现在BGP RR的环境下。

    (13)BGP选择来自最低的邻居地址路径
    BGP优选来自于最低的邻居地址的路径。是BGP的neighbor配置中的那个地址,如果是环回口,则看环回口地址的高低。
    BGP优选来自于最低的邻居地址的路径。这是BGP的neighbor配置中所使用的IP地址,并且它对应于与本地路由器建立TCP连接的远端对等体。

    Lab

    step1:R2通告两个环回口,R3通过与R1/R4的BGP学到两条路由并且选择了R1作为最优(因为R1 的bgp router-id更小)——选路原则第9步

    step2:将R3的s1口的ospf的cost(ip ospf cost 100),这样R3关于R2的两条路由选择了R4作为最优路径(因为R3去往4.4.4.4的cost更小)——选路原则第8步

    step3:建立R1和R4的IBGP关系,R1通过与R2/R4的BGP学习到三条路由,并且选择R2作为最优路径(EBGP > IBGP)——选路原则第7步
        

    step4:在R2的BGP进程下针对邻居R1用出方向route-map将两条的MED(即metric)改为100此时R1关于这两条路由选择了R4作为最优路径(因为从R4的metric = 0)——选路原则第6步 
    ip prefix-list R2 seq 5 permit 100.2.2.0/24
    ip prefix-list R2 seq 10 permit 200.2.2.0/24

    route-map TR1 permit 10
     match ip address prefix-list R2
     set metric 100
    route-map TR1 permit 20

    router bgp 100
    neighbor 12.1.1.1 route-map TR1 out 

    step5:在R1的BGP进程下针对邻居R4进入方向route-map将两条路由的Origin code改为EBG,此时R1关于这两条路由选择了R2作为最优路径(igp > bgp > Incomplete)——选路原则第5步
    ip prefix-list R4 seq 5 permit 100.2.2.0/24
    ip prefix-list R4 seq 10 permit 200.2.2.0/24

    route-map FR4 permit 10
     match ip address prefix-list R4
     set origin incomplete
    route-map FR4 permit 20

    router bgp 100
    neighbor 3.3.3.3 route-map FR4 in
    neighbor 4.4.4.4 route-map FR4 in 
         

    step6:在R1的BGP进程下针对邻居R2用入方向route-map将两条路由的AS-path加长,此时R1关于这两条路由选择了R4为最优路径(因为as-path更短)——选路原则第4步
    route-map FR2 permit 10
     match ip address prefix-list R4
     set as-path prepend 2 2 2
    route-map FR2 permit 20

    router bgp 100
     neighbor 12.1.1.2 route-map FR2 in (在进去之前添加 2 2 2 ,即是2 2 2 100)
    要在R2进程下进行out方向的时候就是在出去之前添加2 2 2,即是100 2 2 2
       

    step7:在R4的BGP进程下针对邻居R1用出方向route-map将两条路由的local-preference设为10,此时R1关于这两条路由选择了R2为最短路径(local-Pre越高越优)——选路原则第2步
    route-map TR1 permit 10
     match ip address prefix-list R4
     set local-preference 10
    route-map TR1 permit 20

    router bgp 100
     neighbor 1.1.1.1 route-map TR1 out 

    step8:此时的R3因为学习到R4的cost值更下,所以两条BGP路由优选了R4,在R3上做邻居R1做入口的route-map改两条跌幅weight=100,这样R3关于R2的两条路由选择R1作为最优路径(Weight)
    route-map FR1 permit 10
     match ip address prefix-list R1
     set weight 100
    route-map FR1 permit 20

    router bgp 100
     neighbor 1.1.1.1 route-map FR1 in 
    权重不能使用out方向,否则提示:% "FF1" used as BGP outbound route-map, set weight not supported

    IBGP下一跳默认是不变的
    路由器一定是将本地最优条目发给邻居,其他的次优条目不会传递给邻居

  • 相关阅读:
    Python正则表达式re模块
    time,datetime,calendar模块
    Python的特殊属性和魔法函数
    Django环境搭建
    第十二篇 os模块
    第十一篇 logging模块
    Page Object设计模式
    实现自动发邮件功能
    cs61a Mutable Data 2 学习笔记和补充
    Lambda Expressions and Higher-Order Functions 学习笔记和习题解答
  • 原文地址:https://www.cnblogs.com/cyrusxx/p/12824230.html
Copyright © 2020-2023  润新知