BGP进阶:BGP 综合实验一

news2025/8/17 4:32:56

BGP路由优选规则

BGP是一个应用非常广泛的边界网关路由协议,被部署于大型的网络环境中。它能够支持大规模的网络,能够运载IP骨干网络中大批量的路由前缀并且在AS之间灵活的传递。BGP拥有丰富的路径属性,以及路由策略部署工具,正是由于这些特点,使得BGP在路由操控和优选决策上变得非常机动。在BGP网络设计中,针对BGP路由各种路径属性的操作和BGP网络设计都将影响路由的优选,从而对网络的流量产生影响,因此掌握BGP路由的优选规则十分之重要。本文全面、深入地探讨BGP的选路规则,并且结合一个完整的实验针对每条选路规则加以验证,从而加深对BGP路由优选规则的理解。

预备知识:

  • BGP基础知识(BGP的概念、状态机、邻居关系、水平分割规则、同步规则等)
  • BGP路径属性
  • BGP路由策略部署工具(route-policy、手工汇总、Ip-prefix等)
  • BGP路由反射器及联邦的概念及部署

一台BGP路由器有可能学习到关于同一个目的路由前缀的多条BGP路径,当这些BGP路径都是valid有效时,路由器将如何优选呢?BGP的众多路径属性如何影响BGP的路径决策呢?如何根据业务需要操控BGP路由优选呢?BGP定义了一整套详细的选路规则,使得BGP路由器能够在任何复杂的、冗余的网络环境下,决策出一条最优(Best)的路径:

  1. 优选具有最大Preferred-value的路由
  2. 优选具有最大Local_Preference的路由
  3. 优选起源于本地的路由
  4. 优选AS-Path最短的路由
  5. 比较Origin:(IGP > EGP > Incomplete)
  6. 优选MED最小的路由
  7. 优选eBGP邻居发来的路由
  8. 优选到BGP下一跳的IGP Metric较小的路由
  9. BGP负载均衡
  10. 优选Cluster-List最短的路由
  11. 优选RouterID最小的BGP邻居发来的路由
  12. 优选peer ip地址最小的邻居发来的路由

实验环境介绍

  1. IP地址规划如图所示,设备互联IP采用10.1.xy.x/24的编址,x及y为设备编号。这种编址方式能够在实验过程中更好地观察现象。同时所有的设备配置Loopback0接口,IP为x.x.x.x/32,其中x为设备编号。这个接口只作为设备RouterID以及建立IBGP邻居关系时使用。

  2. AS345中,R3、R4、R5运行一个IGP:OSPF,在OSPF中,各设备宣告自己的直连接口以及Loopback0接口所在网段,但R3不在接口GE0/0/0口上激活OSPF,R5不在GE0/0/1上激活OSPF,这两个直连链路视为AS外的链路,不将其所在网段引入到OSPF中。

  3. 各设备的BGP连接情况如下:

其中,IBGP邻居关系的建立基于Loopback0口,EBGP邻居关系的建立基于直连物理接口。

初始化配置

注:以下罗列的设备配置中,省略设备接口IP地址的配置。

R1的配置如下:

[R1] bgp 100
[R1-bgp] router-id 1.1.1.1
[R1-bgp] peer 10.1.13.3 as-number 345

R2的配置如下:

[R1] bgp 200
[R1-bgp] router-id 2.2.2.2
[R1-bgp] peer 10.1.25.5 as-number 345

R3的配置如下:

[R3] ospf 1 router-id 3.3.3.3
[R3-ospf-1] area 0.0.0.0
[R3-ospf-1-area-0.0.0.0] network 10.1.34.3 0.0.0.0
[R3-ospf-1-area-0.0.0.0] network 3.3.3.3 0.0.0.0
[R3-ospf-1-area-0.0.0.0] quit
[R3-ospf-1] quit

[R3] bgp 345
[R3-bgp] router-id 3.3.3.3
[R3-bgp] peer 10.1.13.1 as-number 100
[R3-bgp] peer 4.4.4.4 as-number 345
[R3-bgp] peer 4.4.4.4 connect-interface loopback 0
[R3-bgp] peer 4.4.4.4 next-hop-local  #R3对R4执行next-hop-local
[R3-bgp] quit

R4的配置如下:

[R4] ospf 1 router-id 4.4.4.4
[R4-ospf-1] area 0.0.0.0
[R4-ospf-1-area-0.0.0.0] network 10.1.34.4 0.0.0.0
[R4-ospf-1-area-0.0.0.0] network 10.1.45.4 0.0.0.0
[R4-ospf-1-area-0.0.0.0] network 4.4.4.4 0.0.0.0
[R4-ospf-1-area-0.0.0.0] quit
[R4-ospf-1] quit

[R4] bgp 345
[R4-bgp] router-id 4.4.4.4
[R4-bgp] peer 3.3.3.3 as-number 345
[R4-bgp] peer 3.3.3.3 connect-interface loopback 0
[R4-bgp] peer 5.5.5.5 as-number 345
[R4-bgp] peer 5.5.5.5 connect-interface loopback 0
[R4-bgp] quit

R5的配置如下:

[R5] ospf 1 router-id 5.5.5.5
[R5-ospf1] area 0.0.0.0
[R5-ospf-1-area-0.0.0.0] network 10.1.45.5 0.0.0.0
[R5-ospf-1-area-0.0.0.0] network 5.5.5.5 0.0.0.0
[R5-ospf-1-area-0.0.0.0] quit
[R5-ospf-1] quit

[R5] bgp 345
[R5-bgp] router-id 5.5.5.5
[R5-bgp] peer 10.1.25.2 as-number 200
[R5-bgp] peer 4.4.4.4 as-number 345
[R5-bgp] peer 4.4.4.4 connect-interface loopback 0
[R5-bgp] peer 4.4.4.4 next-hop-local  #R5对R4执行next-hop-local
[R5-bgp] quit

上述配置完成后,基本的实验环境就搭建好了,接下去我们开始逐条验证BGP的选路规则,每个选路规则的验证过程中都会增加一些配置用于验证,在一条选路规则验证完成后,将设备的配置恢复成我们现在所完成的配置,再验证下一条规则。

规则详解及实验验证

  1. 优选具有最大Preferred_value的路由
规则描述

当一台路由器学习到关于同一个路由前缀的多条BGP路由时,首先会比较这些路由在路由器本地的Preferred_value值,优选拥有最大Preferred_value值的路由。

Preferred_value属性回顾

Preferred_value是一个华为私有的路径属性,可以理解为该路由的权重值。范围是0-65535,默认值为0,越大越优先。这个值的作用范围是本路由器(不传递),该值既不会被包含在update消息中,也不会传递给任何BGP邻居。

规则验证

现在我们在R1和R2上各配置一个Loopback1接口,配置IP地址:100.0.1.1/24,然后将这条路由network进BGP。

R1的配置如下:

[R1] interface loopback 1
[R1-loopback1] ip address 100.0.1.1 24
[R1-loopback1] quit

[R1] bgp 100
[R1-bgp] network 100.0.1.0 24
[R1-bgp] quit

R2的配置如下:

[R2] interface loopback 1
[R2-loopback1] ip address 100.0.1.1 24
[R2-loopback1] quit

[R2] bgp 200
[R2-bgp] network 100.0.1.0 24
[R2-bgp] quit

如此一来,R1将会传递BGP路由100.0.1.0/24给R3,而R3从自己的eBGP邻居R1学习到的这条路由也会更新给R4;同理R5也会将学习自eBGP邻居R2的路由100.0.1.0/24更新给R4,那么对于R4来说就同时从R3及R5学习到100.0.1.0/24的路由,R4将如何优选?现在,我们希望通过操控路由的Preferred_valuel值来让R4优选R5传递过来的路由。

在R4上配置上述命令,事实上是将R5传递过来的所有路由的preferred-value都设置为10,而R3传递过来的路由的preferred-value则在本地赋予默认值0,这么一对比,当然是优选R5所传递过来的路由了。但是这个方法“颗粒度”太大,如果我们只是想针对特定的路由设置preferred-value呢?例如:

在R1及R2上新增100.0.2.0/24网段并注入BGP。R1、R2的新增配置这里不再赘述。

那么实现上图描述的需求,R4的配置可以变更成:

[R4] ip ip-prefix 1 permit 100.0.1.0 24
[R4] ip ip-prefix 2 permit 100.0.2.0 24

[R4] route-policy RP1 permit node 10
[R4-route-policy] if-match ip-prefix 1
[R4-route-policy] apply preferred-value 10  #设置所匹配路由的Preferred_value
[R4] route-policy RP1 permit node 20  #匹配其他路由

[R4] route-policy RP2 permit node 10
[R4-route-policy] if-match ip-prefix 2
[R4-route-policy] apply preferred-value 10
[R4] route-policy RP2 permit node 20

bgp 345
peer 3.3.3.3 route-policy RP1 import
peer 5.5.5.5 route-policy RP2 import

注意:上述配置中route-policy RP1 permit node 20及route-policy RP2 permit node 20必须配置,因为route-policy隐含deny any,因此如果这两个node不加的话,相当于是只放行node 10中match住的路由。完成配置后:

[R4]display bgp routing-table

BGP Local router ID is 4.4.4.4
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Total Number of Routes: 4
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 100.0.1.0/24 3.3.3.3 0 100 10 100i
* i 5.5.5.5 0 100 0 200i
*>i 100.0.2.0/24 5.5.5.5 0 100 10 200i
* i 3.3.3.3 0 100 0 100i

我们看到,在R4上,100.0.1.0/24的路由,优选的是R3传递过来的;100.0.2.0/24的路由,优选的是R5传递过来的。这就实现了我们的需求。事实上还可以进一步查看路由的详细信息,例如查看100.0.1.0/24这条路由:

[R4]display bgp routing-table 100.0.1.0
BGP local router ID : 4.4.4.4
Local AS number : 345
Paths: 2 available, 1 best, 1 select
BGP routing table entry information of 100.0.1.0/24: #路径1
From: 3.3.3.3 (3.3.3.3)
Route Duration: 00h01m43s
Relay IP Nexthop: 10.1.34.3
Relay IP Out-Interface: GigabitEthernet0/0/0
Original nexthop: 3.3.3.3
Qos information : 0x0
AS-path 100, origin igp, MED 0, localpref 100, pref-val 10, valid, internal, best, select,
active, pre 255, IGP cost 1 # best字样表示本路径被优选
Not advertised to any peer yet
BGP routing table entry information of 100.0.1.0/24: #路径2
From: 5.5.5.5 (5.5.5.5)
Route Duration: 00h01m43s
Relay IP Nexthop: 10.1.45.5
Relay IP Out-Interface: GigabitEthernet0/0/1
Original nexthop: 5.5.5.5
Qos information : 0x0
AS-path 200, origin igp, MED 0, localpref 100, pref-val 0, valid, internal, pre 255, IGP cost
1, not preferred for PreVal  #这里说明了本路径没被优选的原因:Pre_Val值
Not advertised to any peer yet

OK,完成了规则一的测试后,我们将用于验证本条规则的相关配置删除(恢复到本实验的初始化配置),继续看下一条规则。

  1. 优选具有最大Local_Pref的路由
规则描述

当一台BGP路由器学习到关于同一个路由前缀的多条BGP路由时,首先会比较这些路由在本地的Preferred_value值,优选拥有最大Preferred_value值的路由。如果路由的Preferred_value值都相等,则比较各自携带的Local_preference值,优选具有最大Local_preference值的路由。

Local_Preference属性回顾

Local_preference是公认自决属性,值越大越优先。Local_Preference值只能在IBGP Peer之间传递,不能在EBGP Peer之间传递。本地始发的路由默认Local_Preference值为100。可用bgp default local-preference 修改默认值。

BGP路由器在向其EBGP邻居发送路由更新时,不能携带LP属性,但是对方会在本地为这条路由赋一个默认值,也就是100,然后再传递给自己的IBGP邻居。

本地network及重发布的路由,LP默认100,并能在AS内向其他IBGP邻居传输,传输过程中除非部署策略,否则LP不变。

规则验证

现在实验环境恢复成初始化环境(删除上一个选路规则验证所做的配置)。在R1及R2上都配置Loopback1口,IP为100.0.1.1/24,两台路由器都将这个子网network进BGP。

R1的配置如下:

[R1] interface loopback 1
[R1-loopback1] ip address 100.0.1.1 24
[R1-loopback1] quit

[R1] bgp 100
[R1-bgp] network 100.0.1.0 24
[R1-bgp] quit

R2的配置如下:

[R2] interface loopback 1
[R2-loopback1] ip address 100.0.1.1 24
[R2-loopback1] quit

[R2] bgp 200
[R2-bgp] network 100.0.1.0 24
[R2-bgp] quit

我们要通过操控Local_Preference让R4优选R3传递过来的100.0.1.0/24路由。那么可以在R3上对R4做export方向的策略,修改路由的LP值,将该值设置为200;而R5这头则保持默认,也就是100。如此一来在R4上,关于100.0.1.0/24的两条BGP路径,首先Preferred_Value值相等,那么继续比较Local_Preference,优选值更大的,因此来自R3的路由被优选。

R3的配置变更如下:

[R3] ip ip-prefix 1 permit 100.0.1.0 24

[R3] route-policy RP permit node 10
[R3-route-policy] if-match ip-prefix 1
[R3-route-policy] apply local-preference 200
[R3] route-policy RP permit node 20
[R3-route-policy] quit

[R3] bgp 345
[R3-bgp] peer 4.4.4.4 route-policy RP export

在R4上验证一下:

[R4]display bgp routing-table
BGP Local router ID is 4.4.4.4
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Total Number of Routes: 4
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 100.0.1.0/24 3.3.3.3 0 200 0 100i
* i 5.5.5.5 0 100 0 200i

从上面的输出可以看到关于100.0.1.0/24的路由,R4优选了来自R3的路由更新。

完成了本规则的验证后,我们将用于验证本条规则的相关配置删除,恢复成初始化配置。继续看下一条规则。

  1. 优选起源于本地的路由
规则描述

如过此前两条规则都无法做出决策,例如两条BGP路由的 Preferred_value 及Local_preference值都相等。则优选本地生成的路由(本地生成的路由优先级高于从邻居学来的路由)。

本地生成的路由包括通过network命令或import-route命令引入的路由、手动聚合路由和自动聚合路由。

  • 优选聚合路由(聚合路由优先级高于非聚合路由)。
  • 通过aggregate命令生成的手动聚合路由的优先级高于通过summary automatic命令生成的自动聚合路由。
  • 通过network命令引入的路由的优先级高于import-route命令引入的路由。
  1. 优选AS-Path最短的路由
规则描述

如果前面几条规则都无法决策出最优路径,则比较路由的AS_PATH,优选AS_PATH最短的路由。

规则验证

现在实验环境恢复成初始化配置,同样让R1及R2引入100.0.1.0/24路由。我们要通过操控AS_PATH属性让R4优选R5传递过来的100.0.1.0/24路由。那么可以在R3上对R1做import方向的策略,使得R3将R1发送过来的路由在其原有AS_PATH值的基础上,增加一个100的AS号,使得路由的AS_PATH长度加长。如此一来在R4上,关于100.0.1.0/24的这两条BGP路径,首先Prefered_Value相等,那么继续比较Local_Preferecne,也相等,再往下比较,都不是本地始发的路由,那么就比较到了本条规则:优选AS_PATH最短的,因此R4将优选R5传递过来的100.0.1.0/24路由。

R3的配置如下:

[R3] ip ip-prefix 1 permit 100.0.1.0 24
[R3] route-policy RP permit node 10
[R3-route-policy] if-match ip-prefix 1
[R3-route-policy] apply as-path 100 additive
[R3-route-policy] quit

[R3] route-policy RP permit node 20
[R3-route-policy] quit

[R3] bgp 345
[R3-bgp] peer 10.1.13.1 route-policy RP import

完成配置后,在R4上验证一下:

[R4]display bgp routing-table
BGP Local router ID is 4.4.4.4
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Total Number of Routes: 2
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 100.0.1.0/24 5.5.5.5 0 100 0 200i
* i 3.3.3.3 0 100 0 100 100i

从上面的输出可以看到,R4优选了R5传递过来的100.0.1.0/24路由。当然,可以进一步查看路由的详细信息:

[R4]display bgp routing-table 100.0.1.0
BGP local router ID : 4.4.4.4
Local AS number : 345
Paths: 2 available, 1 best, 1 select
BGP routing table entry information of 100.0.1.0/24:
From: 5.5.5.5 (5.5.5.5)
Route Duration: 00h06m45s
Relay IP Nexthop: 10.1.45.5
Relay IP Out-Interface: GigabitEthernet0/0/1
Original nexthop: 5.5.5.5
Qos information : 0x0
AS-path 200, origin igp, MED 0, localpref 100, pref-val 0, valid, internal, best, select,
active, pre 255, IGP cost 1
Not advertised to any peer yet
BGP routing table entry information of 100.0.1.0/24:
From: 3.3.3.3 (3.3.3.3)
Route Duration: 00h02m37s
Relay IP Nexthop: 10.1.34.3
Relay IP Out-Interface: GigabitEthernet0/0/0
Original nexthop: 3.3.3.3
Qos information : 0x0
AS-path 100 100, origin igp, MED 0, localpref 100, pref-val 0, valid, internal, pre 255, IGP
cost 1, not preferred for AS-Path #这里指出了本路径没有被优选的原因。
Not advertised to any peer yet

当然,也可在R1上对R3做export方向的策略,只不过结果有所不同,可以自己观察和分析一下现象和原因。

注意:

使用route-policy来修改BGP路由的AS_PATH:

  • apply as-path xx additive 是在已有AS_PATH基础上追加xx
  • apply as-path xx overwrite 是将已有AS_PATH值替换(覆盖)成xx
  • apply as-path none overwrite 清空AS_PATH

使用route-policy来修改BGP路由的AS_PATH,在Cisco设备上只能在AS之间(EBGPpeer之间)执行,因为as-path只会在离开AS的时候发生改变。我司设备则没有这个限制,也就是说即使在IBGP peer之间应用策略来修改AS_PATH也是可以的。但是针对AS_PATH的改动必须严格谨慎。

执行bestroute as-path-ignore命令后,BGP选路时,忽略AS_Path的比较,需慎用。BGP的路由防环很大程度上依赖于AS_PATH,因此任何对AS_PATH的策略在实施的时候都应该考虑周全。

  1. Origin(IGP > EGP > Incomplete)
规则描述

本规则比较origin code,优选次序为:i > e > ?

规则验证

现在,我们继续将实验环境恢复成初始化状态。在这个规则的验证中,在R1上,改用import-route的方式来注入100.0.1.0/24路由,R2则仍保持network的方式注入。

那么R1的配置变更如下

[R1] ip ip-prefix 1 permit 100.0.1.0 24
[R1] route-policy RP permit node 10
[R1-route-policy] if-match ip-prefix 1
[R1-route-policy] quit

[R1] bgp 100
[R1-bgp] peer 10.1.13.3 as-number 345
[R1-bgp] undo network 100.0.1.0 24
[R1-bgp] import-route direct route-policy RP

或者使用route-policy来修改路由的origin属性,同样是修改R1的配置:

[R1] route-policy RP permit node 10
[R1-route-policy] apply origin incomplete
[R1] bgp 100
[R1-bgp] peer 10.1.13.3 as-number 345
[R1-bgp] network 100.0.1.0 24 route-policy RP

这 样 一 来 R1引 入 的 100.0.1.0/24 的 路 由 origin 属性 值 就 为 incomplete, 而 R2引 入 的100.0.1.0/24的路由origin属性值为IGP。完成配置后验证一下:

[R4] display bgp routing-table
BGP Local router ID is 4.4.4.4
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Total Number of Routes: 2
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 100.0.1.0/24 5.5.5.5 0 100 0 200 i
* i 3.3.3.3 0 100 0 100 ?

当然,可以进一步看详细信息:

[R4] display bgp routing-table 100.0.1.0
BGP local router ID : 4.4.4.4
Local AS number : 345
Paths: 2 available, 1 best, 1 select
BGP routing table entry information of 100.0.1.0/24: #路径1
From: 5.5.5.5 (5.5.5.5)
Route Duration: 01h01m29s
Relay IP Nexthop: 10.1.45.5
Relay IP Out-Interface: GigabitEthernet0/0/1
Original nexthop: 5.5.5.5
Qos information : 0x0
AS-path 200, origin igp, MED 0, localpref 100, pref-val 0, valid, internal, best, select, active, pre 255, IGP cost 1
Not advertised to any peer yet
BGP routing table entry information of 100.0.1.0/24: #路径2
From: 3.3.3.3 (3.3.3.3)
Route Duration: 00h03m11s
Relay IP Nexthop: 10.1.34.3
Relay IP Out-Interface: GigabitEthernet0/0/0
Original nexthop: 3.3.3.3
Qos information : 0x0
AS-path 100, origin incomplete, MED 0, localpref 100, pref-val 0, valid, interna
l, pre 255, IGP cost 1, not preferred for Origin  #由于Origin为?因此输给了路径1
Not advertised to any peer yet

如此一来本条规则就验证完成了。删除用于验证本条规则所做的配置,将各设备的配置恢复成实验初始化配置,继续看下一条规则。

  1. 优选MED最小的路由
规则描述

如果前面的规则都无法做出决策。那么比较这些路由的MED,优选拥有最小MED值的路由。

MED属性

MED属性为可选非传递属性,值越小越优先,一般用于AS之间影响BGP路由决策

规则详解

BGP只比较来自同一个AS(不包括联盟的子AS)的路由的MED值。即,只有两条路由的AS_SEQUENCE(不包括AS_CONFED_SEQUENCE)属性的第一个AS号相同时,BGP才会比较二者的MED值。

如果路由没有MED属性,BGP选路时将该路由的MED值按缺省值0来处理;执行bestroutemed-none-as-maximum命令后,BGP选路时将该路由的MED值按最大值4294967295来处理。

执行compare-different-as-med命令后,BGP将强制比较来自不同自治系统中的邻居的路由的MED值。除非能够确认不同的自治系统采用了同样的IGP和路由选择方式,否则不要使用compare-different-as-med命令(可能产生环路)。

执行bestroute med-confederation命令后,只有当AS_Path中不包含外部AS号(不属于联盟的子AS),且AS_CONFED_SEQUENCE的第一个AS号相同时,才能比较MED值的大小。

执行deterministic-med命令后,将消除路由接收顺序对选路结果的影响。

规则验证

针对本规则的验证,我们将环境做了小小的变更,R2不再属于AS200了,我们把他规划到AS100,至于为什么,这里相信大家已经都想到了。R1、R2同时向AS345发布路由100.0.1.0/24,最终R4将学习到两条更新。那么现在我们的需求是,通过操控MED值,让R4优选从R5更新过来的路由。方法很简单,R5将100.0.1.0/24更新给R4,MED为默认值0,那么我们只要在R1更新路由给R3时,携带上MED=999,那么这条路由再经由R3更新给R4时,也会一并将MED携带,最终,R4将优选MED小的路径,也就是R5传递过来的路由。

R2及R5的配置变更这里就不再赘述了。

重点看R1的配置:

[R1] ip ip-prefix 1 permit 100.0.1.0 24
[R1] route-policy RP permit node 10
[R1-route-policy] if-match ip-prefix 1
[R1-route-policy] apply cost 999  #设置MED值为999

[R1] bgp 100
[R1-bgp] network 100.0.1.0 24
[R1-bgp] peer 10.1.13.3 as-number 345
[R1-bgp] peer 10.1.13.3 route-policy RP export

完成上述配置后,仍然在R4上验证一下:

[R4]display bgp routing-table
BGP Local router ID is 4.4.4.4
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Total Number of Routes: 2
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 100.0.1.0/24 5.5.5.5 0 100 0 100i
* i 3.3.3.3 999 100 0 100i

从上面的输出可以看到,R4优选了R5传递过来的100.0.1.0/24的路由。因为从R3传递过来的路由MED为999,更大。

到此本条规则就验证完成了,现在删除用于验证本条规则的配置,将设备恢复成本实验初始化配置。

  1. 优选EBGP邻居发来的路由
规则描述

经过前面几条规则的比较如果BGP仍然无法决策出最优路由,那么在本规则中比较路由的类型。相对于iBGP邻居更新来的路由,BGP路由器将优选eBGP邻居传来的路由。

规则验证

为了验证本条规则,我们在初始化配置的基础上,在R3-R5之间建立一条iBGP的邻居关系。这样一来R3会将自己从R1学习到的BGP路由传递给iBGP邻居R5,而R5又会从另一侧学习到eBGP邻居R2更新过来的100.0.1.0/24路由,那么R5将如何优选呢?

变更的配置这里就不再赘述了,这里有一个小细节要注意,那就是R3别忘了要配置一条peer5.5.5.5 next-hop-local,否则R5自R3学习到的路由会不可用。完成配置后,我们在R5上观察一下:

[R5] display bgp routing-table
BGP Local router ID is 5.5.5.5
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Total Number of Routes: 2
Network NextHop MED LocPrf PrefVal Path/Ogn
*> 100.0.1.0/24 10.1.25.2 0 0 100i
* i 3.3.3.3 0 100 0 100i

从上面的输出我们可以看到R5优选了来自R2的路由,可以进一步查看路由的详细信息:

[R5] display bgp routing-table 100.0.1.0
BGP local router ID : 5.5.5.5
Local AS number : 345
Paths: 2 available, 1 best, 1 select
BGP routing table entry information of 100.0.1.0/24:
From: 10.1.25.2 (10.1.25.2)
Route Duration: 00h11m54s
Direct Out-interface: GigabitEthernet0/0/1
Original nexthop: 10.1.25.2
Qos information : 0x0
AS-path 100, origin igp, MED 0, pref-val 0, valid, external, best, select, active, pre 255
Advertised to such 2 peers:
4.4.4.4
3.3.3.3
BGP routing table entry information of 100.0.1.0/24:
From: 3.3.3.3 (3.3.3.3)
Route Duration: 00h02m14s
Relay IP Nexthop: 10.1.45.4
Relay IP Out-Interface: GigabitEthernet0/0/0
Original nexthop: 3.3.3.3
Qos information : 0x0
AS-path 100, origin igp, MED 0, localpref 100, pref-val 0, valid, internal, pre 255, IGP
cost 2, not preferred for peer type #这里指出了为何本路径不是best
Not advertised to any peer yet
  1. 优选到BGP下一跳IGP Metric较小的路由
规则描述

如果一台路由器收到关于同一个路由前缀的多跳BGP路径更新,并且经过前面几个规则都无法做出决策,并且这些路径的Next_hop属性值都不相同,那么在本规则中,将比较路由器到这些Next_hop的IGP度量值,优选到Next_hop度量值最小的那条BGP路由。

规则验证一

仍然是将实验环境恢复到初始化状态。然后在R1、R2上开设Loopback1接口并配置IP地址:100.0.1.0/24,随后两者都把这条直连路由network进BGP。R1将路由100.0.1.0/24更新给了R3,R3将这条路由又更新给了R4,由于我们在R3上对R4做了next-hop-local,因此R4在收到这条路由时路由的Next_hop属性值为3.3.3.3;同理,R4从R5收到的100.0.1.0/24路由的Next_hop为5.5.5.5。而3.3.3.3及5.5.5.5对于R4而言又是通过OSPF学习到的。并且此刻在R4上,关于3.3.3.3及5.5.5.5的OSPF metric都是相等的。

现在我们在图中所述的R4连接R3的接口上增加配置:

[R4] interface gigabitEthernet0/0/0
[R4-GigabitEthernet0/0/0] ospf cost 10

如此一来,R4到达3.3.3.3这条路由的OSPF度量值就发生了变化,变得比到5.5.5.5的 OSPF度量值要更大,因此最终本规则将让R4做出路由优选的决策,优选R5传递过来的100.0.1.0/24路由。

[R4] display bgp routing-table 100.0.1.0
BGP local router ID : 4.4.4.4
Local AS number : 345
Paths: 2 available, 1 best, 1 select
BGP routing table entry information of 100.0.1.0/24:
From: 5.5.5.5 (5.5.5.5)
Route Duration: 00h20m06s
Relay IP Nexthop: 10.1.45.5
Relay IP Out-Interface: GigabitEthernet0/0/1
Original nexthop: 5.5.5.5
Qos information : 0x0
AS-path 100, origin igp, MED 0, localpref 100, pref-val 0, valid, internal, best, select,
active, pre 255, IGP cost 1  # IGP cost=1,这的IGP cost事实上是R4学习到的
关于5.5.5.5的ospf路由的cost,可以在R4的路由表中查看。
Not advertised to any peer yet
BGP routing table entry information of 100.0.1.0/24:
From: 3.3.3.3 (3.3.3.3)
Route Duration: 00h11m25s
Relay IP Nexthop: 10.1.34.3
Relay IP Out-Interface: GigabitEthernet0/0/0
Original nexthop: 3.3.3.3
Qos information : 0x0
AS-path 100, origin igp, MED 0, localpref 100, pref-val 0, valid, internal, pre 255, IGP cost
10, not preferred for IGP cost #到3.3.3.3的IGP cost变成了10,比到5.5.5.5的IGP
cost要大,因此PK输了。
Not advertised to any peer yet
规则验证二

现在我们进一步测试,将网络环境再做点调整:

  • R3-R5之间增加一条iBGP的连接;
  • R4配置为路由反射器RR,R3是她的Client;
  • R2取消network 10.0.1.0/24路由进BGP。

R3增加如下配置:

[R3] bgp 345
[R3-bgp] peer 5.5.5.5 as-number 345
[R3-bgp] peer 5.5.5.5 connect-interface loopback 0
[R3-bgp] peer 5.5.5.5 next-hop-local

R4增加如下配置:

[R4] bgp 345
[R4-bgp] peer 5.5.5.5 reflect-client

R5增加如下配置:

[R5] bgp 345
[R5-bgp] peer 3.3.3.3 as-number 345
[R5-bgp] peer 3.3.3.3 connect-interface loopback 0

这样一来,100.0.1.0/24的路由首先是R3通过iBGP连接直接传给了R5,另一方面又经由路由反射器R4反射给了R5,因此R5将同时从R3及R4学习到100.0.1.0/24的BGP路由。这时候R5怎么决策?注意,由于这两条BGP路由Next_Hop属性值都是3.3.3.3,因此明显,本规则无法做出决策,因为两条路由的Next_hop都相等。只能到下一条规则中PK。

  1. BGP负载均衡
关于BGP负载均衡

严格的说,第十条并不能算得上是路由优选的规则,但是也将影响BGP路由器最终的路由表装载过程,因此也在这里一并探讨。当前面的9条选路原则都无法优选出最优路由时,并且又在BGP进程下面配置了maximum load-balancing [ ebgp | ibgp ] num,那么将执行等价负载均衡,也就是将这些等代价的BGP路径都放进IP路由表使用。

值得注意的是,虽然这些BGP等价路径在本地路由表中都被装载,最终却仍只有一条BGP路径是preferred优选的。只有优选的BGP路由才会被发送给自己的BGP邻居。

具备等价负载均衡条件的候选路径需满足如下条件:

  • 必须有相同的路径属性,如weight、LP、AS_PATH(不仅是长度,整个AS_PATH包括AS号都要相同)、origin code、MED及IGP的Distance值
  • 每一条路径的下一跳都不相同
注意事项
  • 在公网中到达同一目的地的路由形成负载分担时,系统会首先判断最优路由的类型。若最优路由为iBGP路由则只是IBGP路由参与负载分担,若最优路由为eBGP路由则只是eBGP路由参与负载分担,即公网中到达同一目的地的iBGP和eBGP路由不能形成负载分担。
  • 如果到达目的地址存在多条路由,但是这些路由分别经过了不同的AS,缺省情况下,这些路由不能形成负载分担。如果用户需要这些路由参与负载分担,就可以执行load-balancing as-path-ignore命令。配置load-balancing as-path-ignore命令后会改变路由参与负载分担的条件,路由形成负载分担时不再比较AS-Path属性,配置时需要慎重考虑。
  • load-balancing as-path-ignore命令和bestroute as-path-ignore命令互斥,不能同时使能。
iBGP等价负载均衡

R4同时从IBGP邻居R3、R5收到100网段的路由,在不执行任何策略的情况下,这些路由通过BGP决策的规则1-8都无法抉择,并且所有的路径属性都相等,具备实施等价负载均衡的条件,命令如下 :

[R4] bgp 345
[R4-bgp] maximum load-balancing ibgp 2

完成配置后,在R4上验证一下:

[R4-bgp]display bgp routing-table 100.0.1.0
BGP local router ID : 4.4.4.4

Local AS number : 345
Paths: 2 available, 1 best, 2 select
BGP routing table entry information of 100.0.1.0/24:
From: 3.3.3.3 (3.3.3.3)
Route Duration: 00h11m54s
Relay IP Nexthop: 10.1.34.3
Relay IP Out-Interface: GigabitEthernet0/0/0
Original nexthop: 3.3.3.3
Qos information : 0x0
AS-path 12, origin igp, MED 0, localpref 100, pref-val 0, valid, internal, best, select,
active, pre 255, IGP cost 1 #注意虽然配置了maximum-paths,路由表中关于100网段出现
了负载均衡,但R4在BGP优选动作仍然只会优选一条BGP路由,并只将这条路由更新给
BGP邻居
Not advertised to any peer yet

BGP routing table entry information of 100.0.1.0/24:
From: 5.5.5.5 (5.5.5.5)
Route Duration: 00h11m20s
Relay IP Nexthop: 10.1.45.5
Relay IP Out-Interface: GigabitEthernet0/0/1
Original nexthop: 5.5.5.5
Qos information : 0x0
AS-path 12, origin igp, MED 0, localpref 100, pref-val 0, valid, internal, select, active, pre
255, IGP cost 1, not preferred for router ID
Not advertised to any peer yet

再看一下R4的全局路由表发生了什么变化:

[R4-bgp]display ip routing-table protocol bgp
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Public routing table : BGP
Destinations : 1 Routes : 2
BGP routing table status : <Active>
Destinations : 1 Routes : 2
Destination/Mask Proto Pre Cost Flags NextHop Interface
100.0.1.0/24 IBGP 255 0 RD 3.3.3.3 GigabitEthernet0/0/0
IBGP 255 0 RD 5.5.5.5 GigabitEthernet0/0/1  

我们看到,两条BGP路径都被R4装载进了路由表。这就是IBGP等价负载均衡。而如果不配置上面的maximum load-balancing ibgp 2命令,默认情况下,R4只会将被优选的路径拿出来放到路由表中。

eBGP等价负载均衡

  1. 优选Cluster-List 最短的路由
规则描述

如果经过前面的规则,如果依然无法决策出最优路由,那么将进一步比较候选路由的Cluster_list属性,优选最短Cluster_list的路由。

规则验证

首先将用于验证上一个规则的配置删除,把设备恢复成本实验的初始化配置。现在我们将网络环境再做点调整:

  • R3-R5之间增加一条iBGP的连接;
  • R4配置为路由反射器RR,R3是她的Client;
  • R2取消network 10.0.1.0/24路由进BGP。

R3增加如下配置:

[R3] bgp 345
[R3-bgp] peer 5.5.5.5 as-number 345
[R3-bgp] peer 5.5.5.5 connect-interface loopback 0
[R3-bgp] peer 5.5.5.5 next-hop-local

R4增加如下配置:

[R4] bgp 345
[R4-bgp] peer 5.5.5.5 reflect-client

R5增加如下配置:

[R5] bgp 345
[R5-bgp] peer 3.3.3.3 as-number 345
[R5-bgp] peer 3.3.3.3 connect-interface loopback 0

这样一来,100.0.1.0/24的路由首先是R3通过iBGP连接直接传给了R5,另一方面又经由路由反射器R4反射给了R5,因此R5将同时从R3及R4学习到100.0.1.0/24的BGP路由:

<R5>display bgp routing-table 100.0.1.0
BGP local router ID : 10.1.45.5
Local AS number : 345
Paths: 2 available, 1 best, 1 select
BGP routing table entry information of 100.0.1.0/24: #路径1
From: 3.3.3.3 (10.1.13.3)
Route Duration: 00h10m10s
Relay IP Nexthop: 10.1.45.4
Relay IP Out-Interface: GigabitEthernet0/0/0
Original nexthop: 3.3.3.3
Qos information : 0x0
AS-path 100, origin igp, MED 0, localpref 100, pref-val 0, valid, internal, best
, select, active, pre 255, IGP cost 2
Not advertised to any peer yet
BGP routing table entry information of 100.0.1.0/24: #路径2
From: 4.4.4.4 (10.1.34.4)
Route Duration: 00h09m01s
Relay IP Nexthop: 10.1.45.4
Relay IP Out-Interface: GigabitEthernet0/0/0
Original nexthop: 3.3.3.3
Qos information : 0x0
AS-path 100, origin igp, MED 0, localpref 100, pref-val 0, valid, internal, pre
255, IGP cost 2, not preferred for Cluster List
Originator: 10.1.13.3
Cluster list: 10.1.34.4
Not advertised to any peer yet

最终R5将优选来自R3的路由,而不是R4的路由。因为R3更新过来的路由Cluster_List长度为0,而R4更新过来的路由Cluster_List长度为1。

到此本条规则就验证成功了。现在清除用于验证本条规则所做的配置,将设备还原成本实验的初始化配置。

  1. 优选RouterID最小的BGP邻居发来的路由
规则描述

如果经过前面的规则都无法决策出最优路径,则优选RouterID最小的BGP邻居发来的路由。

规则验证

在R1及R2上都发布100.0.1.0/24的路由。那么在不做任何配置的情况下,R4将学习到R3及R5传递过来的两条路由。我们什么策略都不做,然后再R4上观察一下:

从上面的输出我们可以看到,R4已经优选了R3传递过来的路由,因此规则1-10都无法做出决策,R4最终比较更新这两条路由的邻居的RouterID,显然R3的RouterID3.3.3.3要小于R5的RouterID 5.5.5.5,因此R3传递过来的路由被优选。

规则补充

规则补充:如果路由携带Originator属性,则本规则的PK过程中将比较Originator的大小(不再比较Router ID),并优选Originator最小的路由。

在上面的拓扑环境中:

  • R1、R2、R3、R4属于同一个AS1234,AS内运行了OSPF,路由器都宣告各自的Loopback0接口,IP为x.x.x.x/32,x为设备编号。
  • R1-R4;R4-R3;R1-R2;R2-R3基于Loopback建立IBGP邻居关系。
  • R1配置为RR,R4是它的Client;R3配置为RR,R4是它的Client。
  • 在R4上引入44.44.44.0/24进BGP。

那么R1收到R4更新过来的路由,将其反射给R2并携带上Originator及Cluster_list属性值。R3同理。那么最终R2将分别从R1和R3都学习到44.44.44.0/24的路由,R2会如何优选?

  • Pre_val相等
  • Local_Pref相等
  • 都不是起源于本地
  • AS-Path一样长
  • Origin code都是i
  • MED相等
  • 都是IBGP peer发来的
  • NH相等
  • Cluster-list等长
  • 比较BGP邻居的RouterID,注意,这里由于两条路由都携带了originator属性,因此在这一轮的PK中,就不是比较R1和R3的RouterID了,而是比较这两条路由的Originator属性值。结果,由于这两条路由的起源都是R4,因此Originator值相等,都是4.4.4.4,所以本条规则仍无法决策。
  • 那么只能在往下比较了,请看下文。
  1. 优选peer ip地址最小的邻居发来的路由
规则描述

如果经过前面的一系列规则仍然无法优选出最佳路由,那么最后一步将比较邻居的IP地址。这个IP地址是在BGP路由器上的BGP配置进程汇总,peer命令后所指的那个IP。

规则验证

仍然看上一个小节最后的实验,在R2上,最终将比较R1及R3的peer ip,在R2上指R1时,我们用的命令是peer 1.1.1.1 as-number 1234;指R3时用的命令是peer 3.3.3.3 as-number 1234,因此R1的地址要小于R3,故优选R1传递过来的44.44.44.0/24路由。

[R2]dis bgp ro 44.44.44.0
BGP routing table entry information of 44.44.44.0/24:

From: 1.1.1.1 (1.1.1.1)
……
AS-path Nil, origin igp, MED 0, localpref 100, pref-val 0, valid, internal, best, select,
active, pre 255, IGP cost 2
Originator: 4.4.4.4
Cluster list: 1.1.1.1
BGP routing table entry information of 44.44.44.0/24:
From: 3.3.3.3 (3.3.3.3)
……
AS-path Nil, origin igp, MED 0, localpref 100, pref-val 0, valid, internal, pre
255, IGP cost 2, not preferred for peer address
Originator: 4.4.4.4
Cluster list: 3.3.3.3

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/33093.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

win10家庭版安装Docker

首先查看你的电脑里面是否是win10且没有Hyper-V&#xff0c;是的话&#xff0c;那这个教程就是给你的啦~ 1、安装Hyper-v 首先将下面的内容复制到新建的txt中&#xff0c;将txt更名为Hyper-V.cmd,右键管理员运行这个文件 pushd "%~dp0"dir /b %SystemRoot%\servici…

为了提前预测比赛结果,于是我用Python获取比赛球员数据进行分析,结果...

为了提前预测比赛结果&#xff0c;于是我用Python获取比赛球员数据进行分析&#xff0c;结果...前因后果准备工作实现步骤代码展示部分效果展示最后前因后果 最近不是世界杯嘛&#xff0c;但是太忙了实在没时间看&#xff0c;于是为了凑热闹&#xff0c;用Python把本次球员信息…

AQS源码解析 5.Condition条件队列 await() signal() 核心方法

AQS源码解析—Condition条件队列 await() & signal() 核心方法 简介 在 Condition 条件队列中使用的也是 AQS 中的 Node 结构&#xff0c;它并没有使用 prev 和 next 属性&#xff0c;而使用的是 nextWaiter 去实现了一个单向链表的结构&#xff1a; Node nextWaiter;流…

MySQL索引和事务

目录 1.索引 1.1 索引的作用 1.2 查看索引 1.3 创建索引 1.4 删除索引 1.5 索引背后的数据结构(重点、面试题) 2.事务 2.1 什么是事务? 2.2 事务的使用 2.2.1 回滚 2.2.2 执行 2.3 事务的原子性(事务的初心) 2.4 事务的一致性 2.5 事务的持久性 2.6 事务的隔离性…

STM32之蜂鸣器实验

本章知识点 STM32GPIO的应用 蜂鸣器的原理&#xff08;最好网上看看&#xff09; 蜂鸣器概述 蜂鸣器是一种一体化结构的电子讯响器&#xff0c;采用直流电压供电&#xff0c;广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作…

CFD基本概念

1、流动控制方程 2、流体力学中的流动模型及流场解 N-S方程→&#xff08;忽略粘性与热扩散&#xff09;→Euler方程→&#xff08;无旋&#xff09;→全速位方程→&#xff08;小扰动&#xff09;→小扰动方程→&#xff08;不可压&#xff09;→labplace方程&#xff1b; 数…

【机器学习】python实现随机森林

目录 一、模型介绍 1. 集成学习 2. bagging 3. 随机森林算法 二、随机森林算法优缺点 三、代码实现 四、疑问 五、总结 本文使用mnist数据集&#xff0c;进行随机森林算法。 一、模型介绍 1. 集成学习 集成学习通过训练学习出多个估计器&#xff0c;当需要预测时通过…

[附源码]SSM计算机毕业设计流浪动物救助网站JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【百度AI_人脸识别】图片对比相似度、人脸对比登录(调摄像头)

人脸对比 此文档功能&#xff1a; 两张人脸图片相似度对比&#xff1a;比对两张图片中人脸的相似度&#xff0c;并返回相似度分值。存档一张图片与调用的摄像中的人脸进行对比。项目、资源下载&#xff1a;https://download.csdn.net/download/m0_70083523/87150842?spm1001.2…

编译原理—语法制导翻译、S属性、L属性、自上而下、自下而上计算

编译原理—语法制导翻译、S属性、L属性、自上而下、自下而上计算1.语法制导翻译1.1属性文法1.2算术表达式的计数器1.3属性的分类1.4属性依赖图继承属性的计算1.5语义规则的计算方法1.6属性计算次序2. S属性定义2.1 语法树与分析树2.2 语法树与DAG2.2.1构造表达式的语法树(DAG)2…

Android中常见的那些内存泄漏——【问题分析+方案】

1.静态Activity(Activity上下文Context)和View 静态变量Activity和View会导致内存泄漏&#xff0c;在下面代码中对Activity的Context和TextView设置为静态对象&#xff0c;从而产生内存泄漏&#xff1b; public class MemoryTestActivity extends AppCompatActivity {private…

[附源码]SSM计算机毕业设计健身健康规划系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

noexcept说明符/运算符

一、noexcept说明符 1、语法 &#xff08;1&#xff09;noexcept 与 noexcept(true) 相同 &#xff08;2&#xff09;noexcept&#xff08;表达式&#xff09; 如果 表达式 求值为 true&#xff0c;那么声明函数不会抛出任何异常。 &#xff08;3&#xff09;throw() //c1…

Ubuntu配置FTP服务

参考目录1.安装FTP服务器软件2.配置FTP服务3.Ubuntud登录ftp服务器4.windows下通过cuteFTPlianjei1.安装FTP服务器软件 (1) FTP文件传送协议(File Transfer Protocol&#xff0c;简称FTP)&#xff0c;是一个用于从一台主机到另一台主机传输文件的协议。 (2&#xff09;Linux下有…

Jetpack 之 LiveData 实现事件总线

事件总线相信大家很多时候都会用到&#xff0c;那大家常用的也就是常青树 EventBus&#xff0c;以及 RxJava 流行起来的后起之秀 RxBus。它们的使用方式都差不多&#xff0c;思想也都是基于观察者模式&#xff0c;正好 LiveData 的核心思想也是观察者模式&#xff0c;因此我们完…

做Android 开发这么久,还不明白 Android Framework 知识重要性?

Framework作为Android的框架层&#xff0c;为App提供了很多API调用&#xff0c;但很多机制都是Framework包装好后直接给App用的&#xff0c;如果不懂这些机制的原理&#xff0c;就很难在这基础上进行优化。 从做Android的第一天起&#xff0c;你一定听过无数次关于Framework的…

计算机音乐-乐理知识(1)

一、节拍 节拍&#xff08;Beat/Meter&#xff09;&#xff0c;是一个衡量节奏的单位&#xff0c;在音乐中&#xff0c;有一定强弱分别的一系列拍子在每隔一定时间重复出现。如 2 / 4 、 4 / 4 、 3 / 4 拍等。节拍&#xff0c;乐曲中表示固定单位时值和强弱规律的组织形式。 …

测试员工作三年后的工资对比,没达到这个数的都属于拖后腿了

“毕业三年的薪资是职场阶段的一个分水岭。” 不知什么时候开始&#xff0c;这句话深刻的引入了所有打工人的心中&#xff0c;程序员们自然也不例外。 事实上&#xff0c;这句话说的并不无道理&#xff0c;毕业的三年&#xff0c;不仅是学生到职场人身份上的一个转变&#xf…

初阶数据结构学习记录——아홉 二叉树和堆(2)

接着上一篇 之前写过一些关于堆的代码&#xff0c;向下调整&#xff0c;向上调整算法&#xff0c;以及常用的几个函数。这一篇继续完善堆&#xff0c;难度也会有所上升。先来看上一篇文末提到的创建堆算法。 首先要有空间&#xff0c;要有数据&#xff0c;之后再形成堆。我们…

9.5 利用可执行内存挑战DEP

目录 一、实验环境 二、实验思路 三、实验代码 四、实验步骤 1、寻找memcpy函数的地址 2、查看内存中可读可写可执行的内存 3、修复EBP 4、保证memcpy的源地址位于shellcode之前 一、实验环境 操作系统&#xff1a;windows 2000 软件&#xff1a;原版OD、VC6.0 二、实…