热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

BGP选路13条原则全实战,一条条帮你梳理支撑整个互联网的选路原则

BGP选路原则实验11.7.1BGP选路原则理论BGP不是简单的通过metric来选路最优的路由所有的路径属性归为一下四类:?周知强制属性?周知自选属性?可选传递性属性?可选非传递
BGP选路原则实验

11.7.1 BGP选路原则理论

BGP不是简单的通过metric来选路最优的路由
所有的路径属性归为一下四类:
? 周知强制属性
? 周知自选属性
? 可选传递性属性
? 可选非传递属性
以上属性分为两类,首先,周知属性,即所有BGP实现都必须能识别这些属性;其次是可选属性,即并不要求bgp实现支持这些属性
如果可选属性是传递的,那么bgp进程应该接收该属性中包含的路径(即使不支持),并将路径传递给邻居
如果可选属性是非传递的,那么无法识别该属性的bgp进程忽略update消息中包含的属性,并不传递给邻居
从记忆和应用角度来讲通常我们不会把过多的精力放到以上四类属性的分类。恰恰我们将采用一种“邪恶”的角度去记忆BGP的13条选路原则:
世界恋爱组织亚洲办公室;纪念碑;半兽人
分别对应的英文单词为:
1、W(world) Weight
2、L(love)local preference,本地优先级
3、O(organization)Sourced,本地起源
4、A(asia)AS-PATH
5、O(Office)Origin,起源代码

6、M,MED,多出口分离器
7、E,EBGP优于IBGP
8、M,到达更新源的metric小的下一跳
9、L,负载均衡

10、O,建立时间更久的EBGP邻居
11、R,更小的RID
12、C,更短的Cluster-list
13、优选来自用最低地址建立BGP 连接的邻居的路由条目
最重要的,下一跳可达是选路的前提条件

11.7.2 BGP选路实验拓扑描述

IP地址说明,比如R2上连接R3的地址为23.1.1.2/24,以此类推。用到的环回口如下:11.1.1.1/32
技术图片
图11-11 BGP选路原则拓扑
11.7.3 BGP选路原则实验步骤

1、基本配置

在AS100内已经完成igp,本例采用eigrp(请勿采用OSPF,否则会影响后边的配置)。基本配置省略,完成eigrp邻居即可(请勿通告R1和R3的直连以及R2和R3的直连)。给出R1和R2的基本配置
R1:
router eigrp 90
network 11.1.1.1 0.0.0.0
network 12.1.1.1 0.0.0.0
no auto-summary
R2:
router eigrp 90
network 12.1.1.2 0.0.0.0
network 22.1.1.1 0.0.0.0
no auto-summary
验证:
R1#show ip eigrp neighbors
IP-EIGRP neighbors for process 90
H Address Interface Hold Uptime SRTT RTO Q Seq
(sec) (ms) Cnt Num
1 12.1.1.2 Fa0/0 11 00:12:19 104 624 0 7
基本的BGP配置已经完成
R1:
router bgp 100
no synchronization
bgp log-neighbor-changes
neighbor 13.1.1.3 remote-as 200
neighbor 22.1.1.1 remote-as 100
neighbor 22.1.1.1 update-source Loopback0
neighbor 22.1.1.1 next-hop-self
no auto-summary
R2:
router bgp 100
no synchronization
bgp log-neighbor-changes
neighbor 11.1.1.1 remote-as 100
neighbor 11.1.1.1 update-source Loopback0
neighbor 11.1.1.1 next-hop-self
neighbor 23.1.1.3 remote-as 200
no auto-summary
R3:
router bgp 200
no synchronization
bgp log-neighbor-changes
network 3.3.3.3 mask 255.255.255.255---需要说明的是,R3通告了环回口0和环回口1(3.3.3.3)
network 33.1.1.1 mask 255.255.255.255
neighbor 13.1.1.1 remote-as 100
neighbor 23.1.1.2 remote-as 100
no auto-summary
验证:
R1#show ip bgp summary ---验证邻居状态
BGP router identifier 11.1.1.1, local AS number 100
BGP table version is 3, main routing table version 3
2 network entries using 264 bytes of memory
4 path entries using 208 bytes of memory
3/1 BGP path/bestpath attribute entries using 444 bytes of memory
1 BGP AS-PATH entries using 24 bytes of memory
0 BGP route-map cache entries using 0 bytes of memory
0 BGP filter-list cache entries using 0 bytes of memory
Bitfield cache entries: current 1 (at peak 1) using 32 bytes of memory
BGP using 972 total bytes of memory
BGP activity 2/0 prefixes, 4/0 paths, scan interval 60 secs

Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd
13.1.1.3 4 200 6 5 3 0 0 00:02:18 2
22.1.1.1 4 100 6 6 3 0 0 00:02:26 2
R1#show ip bgp ---验证收到的路由
BGP table version is 3, local router ID is 11.1.1.1
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete

Network Next Hop Metric LocPrf Weight Path
*> 3.3.3.3/32 13.1.1.3 0 0 200 i

  • i 22.1.1.1 0 100 0 200 i
    *> 33.1.1.1/32 13.1.1.3 0 0 200 i
  • i 22.1.1.1 0 100 0 200 i
    R1#show ip route bgp
    33.0.0.0/32 is subnetted, 1 subnets
    B 33.1.1.1 [20/0] via 13.1.1.3, 00:07:00
    3.0.0.0/32 is subnetted, 1 subnets
    B 3.3.3.3 [20/0] via 13.1.1.3, 00:07:00

    2、使用weight值来干预bgp选路

    BGP优选有最大Weight的BGP条目,weight是Cisco私有的参数,路由器配置了weight后只在本地生效。 缺省情况下,通过本路由器宣告、重分布或者汇总的路由的weight为32768,从BGP邻居学习到的路由的weight为0
    首先我们针对邻居,修改来自邻居的所有路由的权重值,增大来自R2的所有路由,使得R1优选R2作为下一跳
    R1(config-router)#neighbor 22.1.1.1 weight 1
    验证:
    R1#show ip bgp
    BGP table version is 5, local router ID is 11.1.1.1
    Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
    r RIB-failure, S Stale
    Origin codes: i - IGP, e - EGP, ? - incomplete

    Network Next Hop Metric LocPrf Weight Path

  • 3.3.3.3/32 13.1.1.3 0 0 200 i
    *>i 22.1.1.1 0 100 1 200 i
  • 33.1.1.1/32 13.1.1.3 0 0 200 i
    >i 22.1.1.1 0 100 1 200 i
    R1#show ip route bgp
    33.0.0.0/32 is subnetted, 1 subnets
    B 33.1.1.1 [200/0] via 22.1.1.1, 00:01:01
    3.0.0.0/32 is subnetted, 1 subnets
    B 3.3.3.3 [200/0] via 22.1.1.1, 00:01:01
    所有路由都选择了R2作为下一跳
    但这种效果是针对所有路由的,如果想明细的来干预选路,我们需要用到route-map这个工具。如下例
    R1:
    ip prefix-list 1 seq 5 permit 3.3.3.3/32---匹配3.3.3.3的路由
    route-map Weight permit 10
    match ip address prefix-list 1
    set weight 2---针对该路由配置权重值为2,即优于来自R2的路由。请注意该route-map是存在问题的,我们后边观察
    router bgp 100
    neighbor 13.1.1.3 route-map Weight in---在入方向调用route-map.需要说明的是如果在out方向调用,无效,而且会报错
    验证:
    R1#clear ip bgp
    so---一定记得重新刷新BGP的属性,尤其是ebgp由于更新时间更长,越需要如此
    R1#show ip bgp
    BGP table version is 6, local router ID is 11.1.1.1
    Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
    r RIB-failure, S Stale
    Origin codes: i - IGP, e - EGP, ? - incomplete

    Network Next Hop Metric LocPrf Weight Path
    *> 3.3.3.3/32 13.1.1.3 0 2 200 i

  • i 22.1.1.1 0 100 1 200 i
    >i33.1.1.1/32 22.1.1.1 0 100 1 200 i
    3.3.3.3的路由由于权重值为2已经优选R3
    但是,我们发现33.1.1.1的路由只有一个下一跳
    这是我们前边提到的问题。Route-map不仅仅可以设置bgp的属性,当匹配了前缀列表或者ACL的时候一定要考虑其他的路由是否还需要收取。比如我们的配置,R1还需要收取来自R3的其他路由条目(3.3.3.3)
    我们来做修改:
    R1(config)#route-map Weight permit 20---只需要增加一个序列号,行为是permit,那么匹配条件为任意
    验证:
    R1#show ip bgp
    BGP table version is 6, local router ID is 11.1.1.1
    Status codes: s suppressed, d damped, h history,
    valid, > best, i - internal,
    r RIB-failure, S Stale
    Origin codes: i - IGP, e - EGP, ? - incomplete

    Network Next Hop Metric LocPrf Weight Path
    *> 3.3.3.3/32 13.1.1.3 0 2 200 i

  • i 22.1.1.1 0 100 1 200 i
  • 33.1.1.1/32 13.1.1.3 0 0 200 i
    *>i 22.1.1.1 0 100 1 200 i
    该路由也可以从R3得到,这样会具备一定的冗余性,当R2失效,还可以选择R3作为下一跳。同时该路由33.1.1.1依旧优选R2
    R1#show ip route bgp
    33.0.0.0/32 is subnetted, 1 subnets
    B 33.1.1.1 [200/0] via 22.1.1.1, 00:14:39
    3.0.0.0/32 is subnetted, 1 subnets
    B 3.3.3.3 [20/0] via 13.1.1.3, 00:10:23
    查看路由可知,两条路由具备一定的冗余

    3、修改本地优先级干预路由选择

    BGP条目的缺省local preference值为100. local preference值在IBGP邻居之间传递,在EBGP邻居之间不能传递,对于从EBGP邻居学习到的BGP条目,local preference值为100,这个值可以通过命令bgp default local-preference修改
    可以修改从IBGP邻居和EBGP邻居学习来的BGP条目的local preference值.可以修改发给IBGP 邻居的 BGP 条目的local preference 值
    请自行去掉之前的权重值的配置
    本部分针对R1的小需求:33.1.1.1选择R2作为下一跳;3.3.3.3选择R3作为下一跳
    第一步,我们可以在R2配置默认的权重值大于100,该权重值会更新给ibgp邻居,那么此时R1将把所有路由的下一跳指向R2
    R2(config-router)#bgp default local-preference 101
    验证:
    R1#show ip bgp
    BGP table version is 10, local router ID is 11.1.1.1
    Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
    r RIB-failure, S Stale
    Origin codes: i - IGP, e - EGP, ? - incomplete

    Network Next Hop Metric LocPrf Weight Path

  • 3.3.3.3/32 13.1.1.3 0 0 200 i
    *>i 22.1.1.1 0 101 0 200 i
  • 33.1.1.1/32 13.1.1.3 0 0 200 i
    *>i 22.1.1.1 0 101 0 200 i
    如上验证,来自22.1.1.1的本地优先级都改为了101,并且优选R2.需要说明的是来自13.1.1.3的路由因为是ebgp所以并不显示为100,但是存在该值的,如下验证:
    R1#show ip bgp 33.1.1.1
    BGP routing table entry for 33.1.1.1/32, version 10
    Paths: (2 available, best #2, table Default-IP-Routing-Table)
    Flag: 0x940
    Advertised to update-groups:
    2
    200
    13.1.1.3 from 13.1.1.3 (33.1.1.1)
    Origin IGP, metric 0, localpref 100, valid, external
    200
    22.1.1.1 (metric 156160) from 22.1.1.1 (22.1.1.1)
    Origin IGP, metric 0, localpref 101, valid, internal, best
    第二步,针对3.3.3.3的路由通过route-map配置本地优先级大于101,则优选R3
    ip prefix-list 1 seq 5 permit 3.3.3.3/32
    !
    route-map Localpre permit 10
    match ip address prefix-list 1
    set local-preference 102---设置本地优先级,同时不要忘记其他路由的处理
    route-map Localpre permit 20
    !
    router bgp 100
    neighbor 13.1.1.3 route-map Localpre in---在bgp中调用route-map

验证:
R1#show ip bgp
BGP table version is 11, local router ID is 11.1.1.1
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete

Network Next Hop Metric LocPrf Weight Path
*> 3.3.3.3/32 13.1.1.3 0 102 0 200 i

  • 33.1.1.1/32 13.1.1.3 0 0 200 i
    *>i 22.1.1.1 0 101 0 200 i
    3.3.3.3的路由本地优先级已经改为102.
    需要说明的是该路由属性会更新给R2,那么R2会选择R1作为下一跳,将导致R2不在把该路由更新回给r1,所以R1只看到一个下一跳
    R1#show ip route bgp
    33.0.0.0/32 is subnetted, 1 subnets
    B 33.1.1.1 [200/0] via 22.1.1.1, 00:06:35
    3.0.0.0/32 is subnetted, 1 subnets
    B 3.3.3.3 [20/0] via 13.1.1.3, 00:02:17

    4、在前两条原则不能优选时,优选本地产生的路由

    本地起源路由的方式有很多中,比如通告、汇聚以及重分布等等。但是为了排除本地生成的路由默认权重为32768这个前提,我们需要在产生路由时把weight设置为0
    在R1和R2演示该情况。请自行去掉之前本地优先级的配置
    R2的环回口22.1.1.1在本地通告是weight设置为0
    route-map Conn permit 10
    set weight 0---在route-map中设置权重值为0
    !
    router bgp 100
    network 22.1.1.1 mask 255.255.255.255 route-map Conn---通告路由时调用
    该路由通告到了igp中,那么R1会通过eigrp得到,此时只要得到路由就可以在bgp中通告
    router bgp 100
    network 22.1.1.1 m 255.255.255.255
    验证R2的情况:
    R2#show ip bgp
    BGP table version is 11, local router ID is 22.1.1.1
    Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
    r RIB-failure, S Stale
    Origin codes: i - IGP, e - EGP, ? - incomplete

    Network Next Hop Metric LocPrf Weight Path
    *>i3.3.3.3/32 11.1.1.1 0 102 0 200 i

  • 23.1.1.3 0 0 200 i
  • I 22.1.1.1/32 11.1.1.1 156160 100 0 i
    *> 0.0.0.0 0 0 i
  • i33.1.1.1/32 11.1.1.1 0 100 0 200 i
    *> 23.1.1.3 0 0 200 i
    R2#show ip bgp 22.1.1.1
    BGP routing table entry for 22.1.1.1/32, version 13
    Paths: (2 available, best #2, table Default-IP-Routing-Table)
    Flag: 0x800
    Advertised to update-groups:
    1 2
    Local
    11.1.1.1 (metric 156160) from 11.1.1.1 (11.1.1.1)
    Origin IGP, metric 156160, localpref 100, valid, internal
    Local
    0.0.0.0 from 0.0.0.0 (22.1.1.1)
    Origin IGP, metric 0, localpref 100, valid, sourced, local, best
    22.1.1.1这条路由R2既从R1得到,也在本地产生。前两条原则权重值都为0,本地优先级都为100,那么R2优选了本地产生的路由

    5、在前三条原则不能优选时,通过AS-PATH干预选路

    在配置此步骤之前,请去掉之前的配置
    此部分小需求:R1,去往33.1.1.1选择R2作为下一跳;3.3.3.3选择R3作为下一跳
    对于AS-path这个属性,通常不能减少AS的长度(除非移除私有的AS号码),因为这样会干扰到选路以及不能得到路由经过的路径,但是可以在本地增加AS-path的长度
    access-list 33 permit 33.1.1.1---用ACL匹配路由
    !
    route-map ASPATH permit 10
    match ip address 33
    set as-path prepend 200 200---增加AS的长度,而且是增加到原本的AS之前
    route-map ASPATH permit 20---因为匹配了ACL,而且其他路由还要从R3收取,所以要做此操作

    router bgp 100
    neighbor 13.1.1.3 route-map ASPATH in---在bgp中针对邻居调用在in方向
    验证:
    R1#show ip bgp
    BGP table version is 5, local router ID is 11.1.1.1
    Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
    r RIB-failure, S Stale
    Origin codes: i - IGP, e - EGP, ? - incomplete

    Network Next Hop Metric LocPrf Weight Path

  • i3.3.3.3/32 22.1.1.1 0 100 0 200 i
    > 13.1.1.3 0 0 200 i
    > 22.1.1.1/32 12.1.1.2 156160 32768 i
    *>i33.1.1.1/32 22.1.1.1 0 100 0 200 i
  • 13.1.1.3 0 0 200 200 200
    来自R3的AS-path变长了,所以不再优选该设备
    R1#show ip route bgp
    33.0.0.0/32 is subnetted, 1 subnets
    B 33.1.1.1 [200/0] via 22.1.1.1, 00:03:39
    3.0.0.0/32 is subnetted, 1 subnets
    B 3.3.3.3 [20/0] via 13.1.1.3, 00:50:10
    实验效果已经完成
    在此处我们还有一条隐含命令可以用于忽略掉BGP的AS-PATH的选路原则
    router bgp 100
    no synchronization
    bgp log-neighbor-changes
    bgp bestpath as-path ignore
    此时不会通过第四条原则来选路
    验证:
    R1#show ip bgp
    BGP table version is 4, local router ID is 11.1.1.1
    Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
    r RIB-failure, S Stale
    Origin codes: i - IGP, e - EGP, ? - incomplete

    Network Next Hop Metric LocPrf Weight Path
    *> 3.3.3.3/32 13.1.1.3 0 0 200 i

  • i 22.1.1.1 0 100 0 200 i
    > 22.1.1.1/32 12.1.1.2 156160 32768 i
    > 33.1.1.1/32 13.1.1.3 0 0 200 200 200 i
  • i 22.1.1.1 0 100 0 200 i
    即使来自13.1.1.3的路由AS-PATH更长也不会选择它

    6、前四条原则无法优选路由时,通过起源代码干预选路

    当一条路由生成时会携带一个起源的code,i---igp(通告、aggregate),e---egp(已经不存在),?---incomplete(重分布产生的路由)。优选顺序是i优于e由于?.需要说明的是e已经不在使用,但是ios保留了该code
    小需求:33.1.1.1选择R2作为下一跳
    access-list 33 permit 33.1.1.1---用ACL匹配路由
    !
    route-map ORIGIN permit 10
    match ip address 33
    set origin incomplete---在route-map中设置起源代码为?
    route-map ORIGIN permit 20
    !
    router bgp 100
    neighbor 13.1.1.3 route-map ORIGIN in---bgp中针对邻居调用
    验证:
    R1#show ip bgp
    BGP table version is 5, local router ID is 11.1.1.1
    Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
    r RIB-failure, S Stale
    Origin codes: i - IGP, e - EGP, ? - incomplete

    Network Next Hop Metric LocPrf Weight Path
    *> 3.3.3.3/32 13.1.1.3 0 0 200 i

  • i 22.1.1.1 0 100 0 200 i
    *> 22.1.1.1/32 12.1.1.2 156160 32768 i
  • 33.1.1.1/32 13.1.1.3 0 0 200 ?
    *>i 22.1.1.1 0 100 0 200 i
    来自R3的路由起源代码变为?,前边的选路选择此时无效,而来自R2的起源代码为I,所以优选了R2作为下一跳
    R1#show ip route bgp
    33.0.0.0/32 is subnetted, 1 subnets
    B 33.1.1.1 [200/0] via 22.1.1.1, 00:01:24
    3.0.0.0/32 is subnetted, 1 subnets
    B 3.3.3.3 [20/0] via 13.1.1.3, 00:12:36

    7、前五条原则无法优选路由时,通过MED进行干预

    在两个AS 之间有多个EBGP 连接的情况下,MED 值用于影响从相邻AS 到本AS 的路由选择,即用于影响邻居AS 到本AS 的流量从哪个接口进来,这是通过向相邻AS的EBGP 邻居发送具有不同MED 值的路由条目来实现的
    请去掉之前干预选路的配置
    R3上针对33.1.1.1的路由通告给R1 MED为31,通告给R2 MED为32.那么此时R1把metric通告给R2.R2会优选来自R1的路由(因为metric小于来自R3的mtric32)
    access-list 33 permit 33.1.1.1

    route-map 32 permit 10
    match ip address 33
    set metric 32
    route-map 32 permit 20---不要忘记还要通告其他路由给R1,否则不会通告
    !
    route-map 31 permit 10
    match ip address 33
    set metric 31
    route-map 31 permit 20
    !
    router bgp 200
    no synchronization
    bgp log-neighbor-changes
    network 3.3.3.3 mask 255.255.255.255
    network 33.1.1.1 mask 255.255.255.255
    neighbor 13.1.1.1 remote-as 100
    neighbor 13.1.1.1 route-map 31 out
    neighbor 23.1.1.2 remote-as 100
    neighbor 23.1.1.2 route-map 32 out---针对邻居调用
    no auto-summary
    验证:
    R1#show ip bgp
    BGP table version is 7, local router ID is 11.1.1.1
    Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
    r RIB-failure, S Stale
    Origin codes: i - IGP, e - EGP, ? - incomplete

    Network Next Hop Metric LocPrf Weight Path
    *> 3.3.3.3/32 13.1.1.3 0 0 200 i

  • i 22.1.1.1 0 100 0 200 i
    > 22.1.1.1/32 12.1.1.2 156160 32768 i
    > 33.1.1.1/32 13.1.1.3 31 0 200 i
    R2#show ip bgp
    BGP table version is 10, local router ID is 22.1.1.1
    Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
    r RIB-failure, S Stale
    Origin codes: i - IGP, e - EGP, ? - incomplete

    Network Next Hop Metric LocPrf Weight Path

  • i3.3.3.3/32 11.1.1.1 0 100 0 200 i
    > 23.1.1.3 0 0 200 i
    r>i22.1.1.1/32 11.1.1.1 156160 100 0 i
    >i33.1.1.1/32 11.1.1.1 31 100 0 200 i
  • 23.1.1.3 32 0 200 i
    R2#show ip route bgp
    33.0.0.0/32 is subnetted, 1 subnets
    B 33.1.1.1 [200/31] via 11.1.1.1, 00:03:59
    3.0.0.0/32 is subnetted, 1 subnets
    B 3.3.3.3 [20/0] via 23.1.1.3, 01:22:30
    R2上针对不同路由具有不同的下一跳

    8、前六条原则无法优选路由时,来自EBGP的路由优选来自IBGP的路由

    请去掉之前的MED配置
    默认情况下R1和R2就是根据此条原则优选了来自R3的ebgp路由
    R1#show ip bgp
    BGP table version is 8, local router ID is 11.1.1.1
    Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
    r RIB-failure, S Stale
    Origin codes: i - IGP, e - EGP, ? - incomplete

    Network Next Hop Metric LocPrf Weight Path
    *> 3.3.3.3/32 13.1.1.3 0 0 200 i

  • i 22.1.1.1 0 100 0 200 i
    *> 22.1.1.1/32 12.1.1.2 156160 32768 i
  • i33.1.1.1/32 22.1.1.1 0 100 0 200 i
    > 13.1.1.3 0 0 200 i
    R2#show ip bgp
    BGP table version is 12, local router ID is 22.1.1.1
    Status codes: s suppressed, d damped, h history,
    valid, > best, i - internal,
    r RIB-failure, S Stale
    Origin codes: i - IGP, e - EGP, ? - incomplete

    Network Next Hop Metric LocPrf Weight Path

  • i3.3.3.3/32 11.1.1.1 0 100 0 200 i
    *> 23.1.1.3 0 0 200 i
    r>i22.1.1.1/32 11.1.1.1 156160 100 0 i
  • i33.1.1.1/32 11.1.1.1 0 100 0 200 i
    > 23.1.1.3 0 0 200 i
    比如:
    R1#show ip bgp 33.1.1.1
    BGP routing table entry for 33.1.1.1/32, version 8
    Paths: (2 available, best #2, table Default-IP-Routing-Table)
    Flag: 0x10960
    Advertised to update-groups:
    1
    200
    22.1.1.1 (metric 156160) from 22.1.1.1 (22.1.1.1)
    Origin IGP, metric 0, localpref 100, valid, internal
    200
    13.1.1.3 from 13.1.1.3 (33.1.1.1)
    Origin IGP, metric 0, localpref 100, valid, external, best
    默认情况下权重值为0,本地优先级都为100,都不是本地起源的路由,AS-PATH都是200,没有配置MED,那么此时ebgp优于iBGP
    但是不得不说的是,并不是因为AD的原因(ebgp的AD为20,ibgp为200)
    比如我们在R1做如下操作,以修改AD
    R1(config-router)#distance bgp 200 20 20
    第一个200为ebgp的AD,第一个20为来自ebgp的路由,第二个20为本地产生的路由的AD,默认等于ibgp的路由
    为了加速收敛,可以
    R1#clear ip bgp

    验证:
    R1#show ip route bgp
    33.0.0.0/32 is subnetted, 1 subnets
    B 33.1.1.1 [200/0] via 13.1.1.3, 00:00:11
    3.0.0.0/32 is subnetted, 1 subnets
    B 3.3.3.3 [200/0] via 13.1.1.3, 00:00:11
    ebgp管理变为200,但请再查看下面命令,依旧优选ebgp路由
    R1#show ip bgp
    BGP table version is 4, local router ID is 11.1.1.1
    Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
    r RIB-failure, S Stale
    Origin codes: i - IGP, e - EGP, ? - incomplete

    Network Next Hop Metric LocPrf Weight Path
    *> 3.3.3.3/32 13.1.1.3 0 0 200 i

  • i 22.1.1.1 0 100 0 200 i
    > 22.1.1.1/32 12.1.1.2 156160 32768 i
    > 33.1.1.1/32 13.1.1.3 0 0 200 i
  • i 22.1.1.1 0 100 0 200 i
    请注意,我们几乎没有理由修改BGP的管理距离。请自行去掉distance命令

    9、前七条原则无法优选路由时,优选到达bgp下一跳(更新源)的metric较小的设备

    技术图片

图11-12 BGP选录原则续
从本步骤开始我们将使用图11-12的逻辑拓扑
通过eigrp在AS 100完成底层,然后建立R4和R1以及R4和R1的邻居关系。R4的f0/0地址为12.1.1.4,其他地址依旧采用老规矩
给出R1的基本配置:
Router bgp 100
neighbor 44.1.1.1 remote-as 100
neighbor 44.1.1.1 update-source Loopback0
neighbor 44.1.1.1 next-hop-self]
验证邻居关系:
R1#show ip bgp summary
BGP router identifier 11.1.1.1, local AS number 100
BGP table version is 6, main routing table version 6
4 network entries using 528 bytes of memory
6 path entries using 312 bytes of memory
5/3 BGP path/bestpath attribute entries using 740 bytes of memory
1 BGP AS-PATH entries using 24 bytes of memory
0 BGP route-map cache entries using 0 bytes of memory
0 BGP filter-list cache entries using 0 bytes of memory
Bitfield cache entries: current 3 (at peak 3) using 96 bytes of memory
BGP using 1700 total bytes of memory
BGP activity 10/6 prefixes, 17/11 paths, scan interval 60 secs

Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd
13.1.1.3 4 200 169 175 6 0 0 00:43:23 2
22.1.1.1 4 100 150 222 6 0 0 00:43:24 2
44.1.1.1 4 100 4 5 6 0 0 00:00:38 1
查看R4的bgp路由
R4#show ip bgp
BGP table version is 6, local router ID is 44.1.1.1
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete

Network Next Hop Metric LocPrf Weight Path

  • i3.3.3.3/32 22.1.1.1 0 100 0 200 i
    *>i 11.1.1.1 0 100 0 200 i
    r>i22.1.1.1/32 11.1.1.1 156160 100 0 i
  • i33.1.1.1/32 22.1.1.1 0 100 0 200 i
    >i 11.1.1.1 0 100 0 200 i
    在BGP表中都选择了R1作为下一跳
    此时在igp路由表中,去往更新源11.1.1.1和22.1.1.1的metric相同。而根据前边的选路原则是无法优选的。我们可以更改metric来达到干预路由的目的
    R4:
    access-list 1 permit 11.1.1.1
    !
    router eigrp 90
    offset-list 1 in 1 FastEthernet0/0---在入方向针对11.1.1.1的路由增加metric 1
    验证:
    R4#show ip route eigrp
    55.0.0.0/32 is subnetted, 1 subnets
    D 55.1.1.1 [90/156160] via 45.1.1.5, 00:07:32, FastEthernet1/0
    66.0.0.0/32 is subnetted, 1 subnets
    D 66.1.1.1 [90/156160] via 46.1.1.6, 00:07:32, FastEthernet0/1
    22.0.0.0/32 is subnetted, 1 subnets
    D 22.1.1.1 [90/156160] via 12.1.1.2, 00:07:34, FastEthernet0/0
    56.0.0.0/24 is subnetted, 1 subnets
    D 56.1.1.0 [90/30720] via 46.1.1.6, 00:07:32, FastEthernet0/1
    [90/30720] via 45.1.1.5, 00:07:32, FastEthernet1/0
    11.0.0.0/32 is subnetted, 1 subnets
    D 11.1.1.1 [90/156161] via 12.1.1.1, 00:01:08, FastEthernet0/0
    R4到达下一跳11.1.1.1的metric大于去往22.1.1.1的metric
    R4#show ip bgp
    BGP table version is 8, local router ID is 44.1.1.1
    Status codes: s suppressed, d damped, h history,
    valid, > best, i - internal,
    r RIB-failure, S Stale
    Origin codes: i - IGP, e - EGP, ? - incomplete

    Network Next Hop Metric LocPrf Weight Path
    *>i3.3.3.3/32 22.1.1.1 0 100 0 200 i

  • i 11.1.1.1 0 100 0 200 i
    r>i22.1.1.1/32 11.1.1.1 156160 100 0 i
    *>i33.1.1.1/32 22.1.1.1 0 100 0 200 i
  • i 11.1.1.1 0 100 0 200 i
    R4#show ip route bgp
    33.0.0.0/32 is subnetted, 1 subnets
    B 33.1.1.1 [200/0] via 22.1.1.1, 00:01:42
    3.0.0.0/32 is subnetted, 1 subnets
    B 3.3.3.3 [200/0] via 22.1.1.1, 00:01:42
    此时bgp已经优选了去往下一跳较小的设备
    实验完成,请去掉对eigrp的修改

    10、前八条原则无法优选路由时,可以使能bgp的负载均衡

    Bgp的负载均衡分为ibgp的负载和ebgp的负载
    比如33.1.1.1这条路由,我们分析:在R4上,默认情况下权重值为0,本地优先级都为100,都不是本地起源的路由,AS-PATH都是200,没有配置MED,都是来自R1和R2的ibgp路由,此时metric也相同。就可以使能负载
    R4(config-router)#maximum-paths ibgp 2
    R4#show ip route bgp
    33.0.0.0/32 is subnetted, 1 subnets
    B 33.1.1.1 [200/0] via 22.1.1.1, 00:00:12
    [200/0] via 11.1.1.1, 00:02:23
    3.0.0.0/32 is subnetted, 1 subnets
    B 3.3.3.3 [200/0] via 22.1.1.1, 00:00:12
    [200/0] via 11.1.1.1, 00:02:23
    路由表负载,但是bgp表永远只有一个最优:
    R4#show ip bgp
    BGP table version is 12, local router ID is 44.1.1.1
    Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
    r RIB-failure, S Stale
    Origin codes: i - IGP, e - EGP, ? - incomplete

    Network Next Hop Metric LocPrf Weight Path

  • i3.3.3.3/32 22.1.1.1 0 100 0 200 i
    *>i 11.1.1.1 0 100 0 200 i
    r>i22.1.1.1/32 11.1.1.1 156160 100 0 i
  • i33.1.1.1/32 22.1.1.1 0 100 0 200 i
    *>i 11.1.1.1 0 100 0 200 i
    接下来在R4通告其环回口44.1.1.1
    那么在R3也可以实现针对ebgp的负载(请自行分析前边的选路原则)
    R3(config-router)#maximum-paths 2

R3#show ip route bgp
22.0.0.0/32 is subnetted, 1 subnets
B 22.1.1.1 [20/0] via 23.1.1.2, 01:12:56
44.0.0.0/32 is subnetted, 1 subnets
B 44.1.1.1 [20/0] via 23.1.1.2, 00:00:14
[20/0] via 13.1.1.1, 00:30:39
请自行去掉负载的配置

11、前九条原则无法优选路由时,优选建立时间更久的ebgp邻居的路由

Bgp认为建立时间越久越可靠。当从多个邻居学到路由时,优选的路由会放到较下的一行,同时会优选
验证:
R3#show ip bgp
BGP table version is 4, local router ID is 33.1.1.1
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete

Network Next Hop Metric LocPrf Weight Path

  • 22.1.1.1/32 13.1.1.1 156160 0 100 i
    *> 23.1.1.2 0 100 i
  • 44.1.1.1/32 13.1.1.1 0 100 i
    *> 23.1.1.2 0 100 i
    该路由优选了R2,那么R2放到较下一行
    R3#show ip bgp summary
    BGP router identifier 33.1.1.1, local AS number 200
    BGP table version is 6, main routing table version 6
    4 network entries using 528 bytes of memory
    6 path entries using 312 bytes of memory
    4/2 BGP path/bestpath attribute entries using 592 bytes of memory
    1 BGP AS-PATH entries using 24 bytes of memory
    0 BGP route-map cache entries using 0 bytes of memory
    0 BGP filter-list cache entries using 0 bytes of memory
    Bitfield cache entries: current 1 (at peak 1) using 32 bytes of memory
    BGP using 1488 total bytes of memory
    BGP activity 8/4 prefixes, 18/12 paths, scan interval 60 secs

Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd
13.1.1.1 4 100 237 239 6 0 0 00:03:24 2
23.1.1.2 4 100 200 217 6 0 0 00:03:51 2
验证时间,同R2建立的时间更久一些
R3#clear ip bgp 23.1.1.2---清掉和R2的邻居关系
R3#show ip bgp
BGP table version is 9, local router ID is 33.1.1.1
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete

Network Next Hop Metric LocPrf Weight Path
> 3.3.3.3/32 0.0.0.0 0 32768 i
> 22.1.1.1/32 23.1.1.2 0 100 i

  • 13.1.1.1 156160 0 100 i
    *> 33.1.1.1/32 0.0.0.0 0 32768 i
  • 44.1.1.1/32 23.1.1.2 0 100 i
    *> 13.1.1.1 0 100 i
    此时优选了R1,而且放到较下一行

    12、前十条选录原则无法优选路由时,优选router-id较小的设备

    请去掉之前的选路的配置
    查看R4
    R4#show ip bgp
    BGP table version is 20, local router ID is 44.1.1.1
    Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
    r RIB-failure, S Stale
    Origin codes: i - IGP, e - EGP, ? - incomplete

    Network Next Hop Metric LocPrf Weight Path

  • i3.3.3.3/32 22.1.1.1 0 100 0 200 i
    *>i 11.1.1.1 0 100 0 200 i
    r>i22.1.1.1/32 11.1.1.1 156160 100 0 i
  • i33.1.1.1/32 22.1.1.1 0 100 0 200 i
    >i 11.1.1.1 0 100 0 200 i
    > 44.1.1.1/32 0.0.0.0 0 32768 i
    3.3.3.3和33.1.1.1的路由都优选R1作为下一跳就是依据了RID,因为此时R1的RID较小。
    R4#show ip bgp neighbors
    BGP neighbor is 11.1.1.1, remote AS 100, internal link
    BGP version 4, remote router ID 11.1.1.1
    R4# show ip bgp neighbors 22.1.1.1
    BGP neighbor is 22.1.1.1, remote AS 100, internal link
    BGP version 4, remote router ID 22.1.1.1
    我们该让路由优选R2作为出口
    R1(config)#router bgp 100
    R1(config-router)#bgp router-id 22.1.1.2---RID大于R2的RID
    验证:
    R4#show ip bgp
    BGP table version is 23, local router ID is 44.1.1.1
    Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
    r RIB-failure, S Stale
    Origin codes: i - IGP, e - EGP, ? - incomplete

    Network Next Hop Metric LocPrf Weight Path

  • i3.3.3.3/32 11.1.1.1 0 100 0 200 i
    *>i 22.1.1.1 0 100 0 200 i
  • i33.1.1.1/32 11.1.1.1 0 100 0 200 i
    >i 22.1.1.1 0 100 0 200 i
    > 44.1.1.1/32 0.0.0.0 0 32768 i
    现在优选R2作为下一跳

    13、优选拥有最短的cluster-list长度的路由

    当一个路由器从多个RR收到相同BGP路由进行最优路径选择时,优选拥有最短的cluster-list长度的
    RR关系: R4 为RR,client 分别为R1、R2、R5、R6;配置R6 为RR,client 为R5
    R4:
    router bgp 100
    no synchronization
    bgp log-neighbor-changes
    network 44.1.1.1 mask 255.255.255.255
    neighbor 11.1.1.1 remote-as 100
    neighbor 11.1.1.1 update-source Loopback0
    neighbor 22.1.1.1 remote-as 100
    neighbor 22.1.1.1 update-source Loopback0
    neighbor 55.1.1.1 remote-as 100
    neighbor 55.1.1.1 update-source Loopback0
    neighbor 55.1.1.1 route-reflector-client
    neighbor 66.1.1.1 remote-as 100
    neighbor 66.1.1.1 update-source Loopback0
    neighbor 66.1.1.1 route-reflector-client
    R5:
    router bgp 100
    no synchronization
    bgp log-neighbor-changes
    neighbor 44.1.1.1 remote-as 100
    neighbor 44.1.1.1 update-source Loopback0
    neighbor 66.1.1.1 remote-as 100
    neighbor 66.1.1.1 update-source Loopback0
    no auto-summary
    R6:
    router bgp 100
    no synchronization
    bgp log-neighbor-changes
    neighbor 44.1.1.1 remote-as 100
    neighbor 44.1.1.1 update-source Loopback0
    neighbor 55.1.1.1 remote-as 100
    neighbor 55.1.1.1 update-source Loopback0
    neighbor 55.1.1.1 route-reflector-client
    no auto-summary
    验证:
    R5#show ip bgp
    BGP table version is 27, local router ID is 55.1.1.1
    Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
    r RIB-failure, S Stale
    Origin codes: i - IGP, e - EGP, ? - incomplete

    Network Next Hop Metric LocPrf Weight Path

  • i3.3.3.3/32 22.1.1.1 0 100 0 200 i
    *>i 22.1.1.1 0 100 0 200 i
    r i22.1.1.1/32 11.1.1.1 156160 100 0 i
    r>i 11.1.1.1 156160 100 0 i
  • i33.1.1.1/32 22.1.1.1 0 100 0 200 i
    *>i 22.1.1.1 0 100 0 200 i
    r i44.1.1.1/32 44.1.1.1 0 100 0 i
    r>i 44.1.1.1 0 100 0 i
    R5#show ip bgp 3.3.3.3
    BGP routing table entry for 3.3.3.3/32, version 23
    Paths: (2 available, best #2, table Default-IP-Routing-Table)
    Not advertised to any peer
    200
    22.1.1.1 (metric 158720) from 66.1.1.1 (66.1.1.1)
    Origin IGP, metric 0, localpref 100, valid, internal
    Originator: 22.1.1.1, Cluster list: 66.1.1.1, 44.1.1.1
    200
    22.1.1.1 (metric 158720) from 44.1.1.1 (44.1.1.1)
    Origin IGP, metric 0, localpref 100, valid, internal, best
    Originator: 22.1.1.1, Cluster list: 44.1.1.1
    查看明细路由可以看到R5选择了R4作为下一跳,而没有选择簇ID较长的R6。
    R5#show ip cef 3.3.3.3 detail
    3.3.3.3/32, epoch 0
    recursive via 22.1.1.1
    nexthop 45.1.1.4 FastEthernet0/0
    最后一条选路原则:
    优选来自用最低地址建立BGP 连接的邻居的路由条目。注意这个地址是建立邻居用的IP 地址, 不是接口IP 地址。
    实验完成

BGP选路13条原则全实战,一条条帮你梳理支撑整个互联网的选路原则


推荐阅读
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了如何找到并终止在8080端口上运行的进程的方法,通过使用终端命令lsof -i :8080可以获取在该端口上运行的所有进程的输出,并使用kill命令终止指定进程的运行。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 本文介绍了为什么要使用多进程处理TCP服务端,多进程的好处包括可靠性高和处理大量数据时速度快。然而,多进程不能共享进程空间,因此有一些变量不能共享。文章还提供了使用多进程实现TCP服务端的代码,并对代码进行了详细注释。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • Redis底层数据结构之压缩列表的介绍及实现原理
    本文介绍了Redis底层数据结构之压缩列表的概念、实现原理以及使用场景。压缩列表是Redis为了节约内存而开发的一种顺序数据结构,由特殊编码的连续内存块组成。文章详细解释了压缩列表的构成和各个属性的含义,以及如何通过指针来计算表尾节点的地址。压缩列表适用于列表键和哈希键中只包含少量小整数值和短字符串的情况。通过使用压缩列表,可以有效减少内存占用,提升Redis的性能。 ... [详细]
author-avatar
总是生活在记忆中_873
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有