一、BGP协议基础

1、路由的分类

1)直连路由
2)非直连路由(间接路由)
&:静态路由
&:动态路由
@:IGP: 内网网关路由协议(在企业内部或数据中心内部使用)
DV:距离矢量路由协议
-RIP(v1/v2)
-IGRP—网络直径:100—255(思科的私有协议)
-EIGRP—思科的私有
LS: 链路状态路由协议
-ISIS- 中间系统到中间系统
-OSPF —开放式最短路径优先

@: EGP : 外部网关路由协议:在不同公司之间使用,在不同的城市之间
BGP:边界网关协议 (路径矢量路由协议)

2、为什么要使用BGP协议

我们要在不同AS之间实现网络通信,需要使用EGP-BGP协议,当然我们还看重BGP的一些优势
1)非常稳定
2)可以传输大量的路由,支持大规模网络
3)具有非常丰富的路由控制策略,可以实现灵活的选路


3、BGP概述

-BGP:边界网关协议
-BGP是公有协议,任何厂商的设备都支持BGP
-BGP位于OSI的第7层 (应用层)

备注:
OSPF基于IP协议,为了可靠性,数据库同步:协商主从关系,序列号、有确认机制

4、AS

-AS号(Autonomous System Number):自治系统:
-是互联网中的一种标识符,用于标识一个自治系统(AS)的唯一数字。自治系统是指由一组网络和路由器组成的网络。
-AS号可以帮助互联网中的路由器找到要到达目的地的IP地址的最短路径。
-AS号由互联网分配机构IANA(互联网分配号码管理局)分配。
-AS号的范围被划分为两类:公共AS号和私有AS号。
-公共AS号是指由IANA分配的AS号,可用于在全球范围内标识自治系统。
-私有AS号是指由互联网注册机构(IR)分配的AS号,用于在私有互联网中标识自治系统。
-AS通常使用“数字”来表示,称为AS
-AS号的范围是从065535,其中0被保留不使用
-AS编号取值范围
&:之前—2字节表示,取值范围:1-65535
#私有AS号:64512-65534,可以用于在私有互联网中标识自治系统,但不会在公共互联网中出现。这些私有AS号通常用于连接组织的内部网络。

&:目前是4个字节:1-4294967295
4字节AS号的范围是从04294967295,其中0AS被保留不使用
私有AS号范围是42000000004294967294
4字节AS号由IANA管理,并由全球RIR(区域互联网注册局)负责分配

在国内,中国的运营商通常将AS号按照不同的地理区域划分。
例如,中国电信在各省市设立了不同的自治系统,每个自治系统都有自己独立的AS号。而中国联通则将其网络划分为北方、南方、西南、东北、华东、华中六个区域,每个区域都分配了不同的AS
AS号的划分方式取决于运营商的具体管理需求和网络架构,可以按照城市、区域、网络、子网等不同的维度进行划分。
截止20219月,中国共分配了超过37,000AS号。要查询中国已分配的AS号,可以使用以下方法:
访问CNNIC官网:CNNIC是中国国家互联网信息中心

二、BGP协议概述

1、场景

场景一:遍布全国大型政企单位之间, 或大型数据中心
场景二:运营商骨干网

2、作用

AS之间动态的交互路由信息,实现公司与公司之间的互访

3、优势

1)稳定,基于TCP协议建立的,使用端口号TCP179,所以非常稳定
2)传递大量路由,可以跨多跳建立邻居关系
3)路由控制策略丰富

4、BGP邻居类型

EBGP: 运行于不同的AS
IBGP: 运行于同一AS内部

5、BGP特征



•BGP使用传输层协议为TCP,TCP端口号179。路由器之间的BGP会话基于TCP连接而建立。
•运行BGP的路由器被称为BGP发言者(BGP Speaker),或BGP路由器。
•两个建立BGP会话的路由器互为对等体(Peer),说人话,就是BGP邻居
•BGP对等体之间交换BGP路由信息 , 说人话,BGP在邻居之间传递路由
•BGP路由器只发送增量的BGP路由更新,或进行触发式更新(不会周期性更新)。
•BGP能够传递大批量的路由,可在大规模网络中应用。

6、BGP报文类型

-open : 用于建立邻居关系 (类似于hello报文)
-keep alive : 用于维护邻居关系,周期性发送,保持BGP连接 (类似于hello)
-update : 用于传递路由和撤销路由 (类似于LSU报文)
-notification : 通知报文,用于通知BGP邻居之间的报错信息,用于断开BGP连接
-router-refresh : 重传报文,请求邻居重新发送路由信息
报文名称作用发送时刻
Open协商BGP对等体参数,建立对等体关系BGP TCP连接建立成功之后
Update发送BGP路由更新BGP邻居关系建立之后有路由需要发送或路由变化时向邻居发送Update报文
Notification报告错误信息,中止邻居关系BGP在运行中发现错误时,发送Notification报文将错误通告给BGP邻居
Keepalive标志邻居建立,维持BGP邻居关系BGP路由器收到对端发送的Keepalive报文,将邻居状态置为已建立,同时后续定期发送keepalive报文用于保持连接
Route-refresh用于在改变路由策略后请求对等体重新发送路由信息。只有支持路由刷新能力的BGP设备会发送和响应此报文当路由策略发生变化时,触发请求对等体重新通告路由

7、BGP工作过程




8、BGP状态

1)idle :初始化状态
-tcp未连接状态,邻居的状态为idle , 当bgp设备和邻居进行tcp 连接时,会从当前的状态转为connect 状态

2)connect 状态: tcp 连接状态
-如果tcp 建立连接成功,bgp 设备会向邻居发送open报文,状态也会转为opensent 状态
-如果tcp 建立连接失败,bgp设备的状态会转为active 状态

3)active 状态:活跃状态
-如果依然失败,bgp会停留在active 状态
备注:如果重传计时器超时,依然没有收到邻居回应,bgp设备会心灰意冷的返回上一个状态,上一个是connect 状态

4)opensent 状态: open报文已发送状态,已向邻居发送open报文
-如果bgp设备给邻居发送open报文后,如果收到来自邻居的回复,并且回复的报文是正确的,bgp 设备会继续发送报文,发送什么报文呢? 发送keep alive 报文,状态转为 open comfirm 状态
-如果bgp设备给邻居发送open报文后,如果收到来自邻居的回复,但是回复的报文有错误,bgp 设备会向邻居发送notification 报文(用于断开bgp连接状态),断开后会跳转到最初的idle 状态

5)open comfirm : open报文确认状态
-如果收到邻居发来的keep alive 报文,状态会转为established 建立状态
-如果收到邻居发来的notification 报文,状态会跳转为 idle 状态

6)established : 连接已建立状态
-如果收到邻居发来的正确的update 报文或者keepalive 报文,bgp就会认为邻居是正常的

9、BGP的工作原理

建立邻居
传递路由

10、BGP路由默认优先级为255

IBGP路由的默认优先级为255
EBGP路由的默认优先级为255

11、BGP邻居关系建立的完整流程

三、BGP基础配置案例

BGP实验

拓扑

需求

1)配置EBGP邻居关系
2)实现网络互通

配置步骤

1)配置接口IP地址
2)配置EBGP邻居
-开启BGP功能,进入AS
-配置router-id
-指定邻居地址,指定邻居AS
3)注入路由

配置命令

sysname R1 
#
interface GigabitEthernet0/0/0
 ip address 192.168.1.254 255.255.255.0 
#
interface GigabitEthernet0/0/1
 ip address 192.168.12.1 255.255.255.0 

#
bgp 100
 router-id 1.1.1.1
 peer 192.168.12.2 as-number 200 
 network 192.168.1.0 
 
 sysname R2 
#
interface GigabitEthernet0/0/0
 ip address 192.168.12.2 255.255.255.0 
#
interface GigabitEthernet0/0/1
 ip address 192.168.2.254 255.255.255.0 
#
bgp 200
 router-id 2.2.2.2
 peer 192.168.12.1 as-number 100 
 network 192.168.2.0 
 
 验证:查看邻居表
 <R1>display bgp peer 

 BGP local router ID : 1.1.1.1
 Local AS number : 100
 Total number of peers : 1      Peers in established state : 1

 Peer          V   AS  MsgRcvd  MsgSent  OutQ  Up/Down   State       PrefRcv

 192.168.12.2  4   200   45       46      0     00:42:35 Established    1

验证:查看路由表
<R1>display bgp routing-table 

 BGP Local router ID is 1.1.1.1 
 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

 *>   192.168.1.0        0.0.0.0         0                     0      i
 *>   192.168.2.0        192.168.12.2    0                     0      200i
 
 验证:PC1PC2 可以ping通

邻居表解析

 <R1>display bgp peer 

 BGP local router ID : 1.1.1.1
 Local AS number : 100
 Total number of peers : 1      Peers in established state : 1

 Peer          V   AS  MsgRcvd  MsgSent  OutQ  Up/Down   State       PrefRcv

 192.168.12.2  4   200   45       46      0     00:42:35 Established    1
 
 
 邻居表字段详细解析: 
-BGP local router ID :    //表示的BGP给当前这台设备分配的名字
-Local AS number :         //表示的是当前这个设备所属的AS号
-Total number of peers :   //表示当前设备一共有多少邻居
-Peers in established state :  //表示当前设备有效的邻居
-Peer :   //表示的是对端邻居的IP地址
- V :   //表示的是版本
-AS//表示的是邻居设备所在的AS号
-MsgRcvd:    //表示的是从邻居设备收到的消息数目
-MsgSent:     //表示的是向邻居设备发送的消息数目
-OutQ:       //表示的是 出向队列 (等待发往指定邻居的消息—出向数据—排队的数据)
bgp要求稳定,所以如果邻居设备无法向对端发送一个稳定的报文,那么这个报文就会被要求重新传输,
哪些需要重传的报文,就会放到这个出向队列中,所以正常情况下,这个参数的值是0,
如果这个参数不是0,说明和邻居之间的链路非常不稳定,容易出现网络拥塞和丢包

-State:    //表示的是邻居的状态,最完美的状态,就是established (建立)
-PrefRcv:   //表示的是从邻居设备所接受过来的路由条目的数量
目前这个值为0,就代表对端设备还没有给我们传递路由信息,就是没有给我们发路由
也可以这样表述:本段从对端设备上收到的路由前缀的数目(接收到的路由的数量)

BGP路由表解析

<R1>display bgp routing-table 

 BGP Local router ID is 1.1.1.1 
 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

 *>   192.168.1.0        0.0.0.0         0                     0      i
 *>   192.168.2.0        192.168.12.2    0                     0      200i
 
   路由表字段解析: 
 BGP Local router ID : 标识的BGP路由器自己的Router-id
 
 Status codes : 状态代码 
  * - valid : 表示BGP路由是有效的,能用
  > - best : 表示BGP路由是最优的,自己可以用,别人也可以用

 Origin : 起源代码,表示该BGP路由是通过什么方式宣告进BGP协议的 
   i - IGP  :最优的 (通过network注入)
   e - EGP  :次优的
   ? - incomplete :最差的 (import 引入)
   
Network :表示BGP路由网段和掩码
NextHop :表示BGP路由的下一跳地址(如果是0.0.0.0 表示该路由是自己产生的)


@:接下来的这些,都是BGP路由条目的属性(后面讲BGP选路规则时还会详细分析和讲解这几个属性)
  MED  :  路由度量值,表示去往一个BGP路由的距离,类似于其他协议的cost
  
  LocPrf : 本地优先级,表明路由器的BGP本地优先级

  PrefVal :协议首选值,表示的是一个BGP路由的优选值,最高的路由
            协议首选值(PrefVal)是华为设备的特有属性,该属性仅在本地有效

  Path:AS路径,表示的是一个BGP路由AS_Path属性,
               AS_Path属性按顺序记录了一个BGP路由从本地到目的地址所要经过的所有AS编号
  
  Ogn:表示的是一个BGP路由的起源属性,主要用来定义路径信息的来源
  
       标记一条路由是怎么成为BGP路由的。它有以下3种类型:
       IGP:具有最高的优先级。通过network命令注入到BGP路由表的路由,其Origin属性为IGPEGP:优先级次之,通过EGP得到的路由信息,其Origin属性为EGPIncomplete:优先级最低。通过其他方式学习到的路由信息。
                   比如BGP通过import-route命令引入的路由

四、IBGP全互联案例:

1、IBGP全互联实验

拓扑
需求:实现AS100R410.10.4.4 和AS300R510.10.5.5互通
思路:
思路1:R4R1建立EBGP邻居 (外部的EBGP邻居)--完成
思路2:R3R5建立EBGP邻居 (外部的EBGP邻居)
思路3:AS200内部的R1-R2-R3配置ospf-建立ospf邻居关系
思路4:R1R3建立IBGP邻居 :BGP可以跨越路由器建立邻居
思路5:在R4R5中注入路由

配置步骤
1)配置路由器的接口IP地址
2)在AS200内部配置OSPF
3)配置BGP邻居关系
-开启BGP功能,进入AS
-配置Router-id
-配置邻居关系,指定邻居IP地址,指定邻居的AS
4)在R4 和R5中注入路由

配置命令
R4的配置: 
 1R4的接口配置: 
[R4]int g0/0/0
[R4-G0/0/0]ip add 192.168.14.4 24
[R4-G0/0/0]int lo0
[R4-LoopBack0]ip add 10.10.4.4 32

 2R4BGP配置: 
[R4]bgp 100
[R4-bgp]router-id 4.4.4.4
[R4-bgp]peer 192.168.14.1 as 200    //和R1建立外部邻居
[R4-bgp]network 10.10.4.4 32        //注入路由

 R1的配置: 
 1R1的接口配置: 
[R1]int g0/0/0
[R1-G0/0/0]ip add 192.168.12.1 24
[R1-G0/0/0]int g0/0/1
[R1-G0/0/1]ip add 192.168.14.1 24

 2R1OSPF配置: 
[R1]ospf 1 router-id 1.1.1.1
[R1-ospf-1]area 0
[R1-ospf-1-area-0.0.0.0]network 192.168.12.0 0.0.0.255
[R1-ospf-1-area-0.0.0.0]quit
[R1-ospf-1]quit

 3R1BGP配置: 
[R1]bgp 200  //开启BGP,配置AS200
[R1-bgp]router-id 1.1.1.1
[R1-bgp]peer 192.168.14.4 as 100      //和R4建立外部邻居

[R1-bgp]peer 192.168.23.3 as 200      //和R3建立内部邻居
[R1-bgp]peer 192.168.23.3 next-hop-local   //修改下一跳


 R2的配置: 
 1R2的接口配置: 
[R2]int g0/0/0
[R2-G0/0/0]ip add 192.168.12.2 24
[R2-G0/0/0]int g0/0/1
[R2-G0/0/1]ip add 192.168.23.2 24

 2R2的ospf配置: 
[R2]ospf 1 router-id 2.2.2.2
[R2-ospf-1]area 0
[R2-ospf-1-area-0.0.0.0]network 192.168.12.0 0.0.0.255
[R2-ospf-1-area-0.0.0.0]network 192.168.23.0 0.0.0.255
[R2-ospf-1-area-0.0.0.0]quit


 R3的配置: 
 1R3的接口配置: 
[R3]int g0/0/0
[R3-G0/0/0]ip add 192.168.23.3 24
[R3-G0/0/0]int g0/0/1
[R3-G0/0/1]ip add 192.168.35.3 24

 2R3OSPF配置 
[R3]ospf 1 router-id 3.3.3.3
[R3-ospf-1]area 0
[R3-ospf-1-area-0.0.0.0]network 192.168.23.0 0.0.0.255
[R3-ospf-1-area-0.0.0.0]quit
[R3-ospf-1]quit

 3R3BGP配置: 
[R3]bgp 200
[R3-bgp]router-id 3.3.3.3

[R3-bgp]peer 192.168.12.1 as 200    //和R1建立内部邻居
[R3-bgp]peer 192.168.12.1 next-hop-local  //修改下一跳

[R3-bgp]peer 192.168.35.5 as 300    //和R5建立外部邻居


 R5的配置: 
 1R5的接口配置: 
[R5]int g0/0/0
[R5-G0/0/0]ip add 192.168.35.5 24
[R5-G0/0/0]int lo0
[R5-LoopBack0]ip add 10.10.5.5 32

 2R5BGP配置: 
[R5]bgp 300
[R5-bgp]router-id 5.5.5.5
[R5-bgp]peer 192.168.35.3 as 200   //和R3建立外部邻居
[R5-bgp]network 10.10.5.5 32       //注入路由

 验证方法: 
1) dis ospf peer br     :查看ospf 邻居
2)dis bgp peer        :查看bgp邻居关系
 3)dis bgp routing-table     :查看BGP路由表 
4)dis ip routing-table    :查看IP核心路由表

5)在R4中 ping -a 10.10.4.4 10.10.5.5  不通
备注:R4中有去往10.10.5.5/32的路由  
     R5中有去往10.10.4.4/32的路由
有路由,但是网络不通? 为什么? 查找数据转发路径

第一步:在R4中查看去往10.10.5.5的路由
display  ip routing-table  10.10.5.5 
发现有路由,下一跳为192.168.14.1  --R1

第二步:在R1中查看去往10.10.5.5的路由
发现有路由,下一跳为192.168.23.3  --R3

备注:由于R1到达10.10.5.5 的路由下一跳,非直连下一跳,所以出向迭代路由
R1去往10.10.5.5的路由下一跳时R3,但是数据包总是要沿着真实的物理链路去传输的
所以R1依然会把数据包转发给R2这个设备,由R2在转发给R3

但是R2中并没有配置BGP路由协议,所以根本没有去往10.10.5.5的路由
所以R1发给R2的流量,R2由于没有路由,无法转发,所以会销毁数据
所以R2设备会出现“流量黑洞”, 所以数据无法转发

如何解决这个问题呢?  

 流量黑洞的解决方案: 
 1、第一个解决方案:在出现流量黑洞的路由器中,手写静态路由 
 1)在R2中手写静态路由 
[R2]ip route-static 10.10.5.5 32  192.168.23.3
[R2]ip route-static 10.10.4.4 32  192.168.12.1

 2)在R4中验证测试: 
<R4> ping  -a  10.10.4.4  10.10.5.5   --可以实现互通

 3)备注:静态路由的不足 
在R2中配置静态路由,可以实现10.10.4.410.10.5.5 的互通
但是不建议使用静态路由,因为当网络中设备过多时,
静态路由配置工作量大,当网络拓扑变更的时候,维护成本非常的高

 4)删除静态路由,恢复配置 
[R2]undo ip route-static all     //删除所有静态路由


 2、第二个解决方案:在ospf中引入外部路由BGP 
 1)在R1R3中的ospf中引入BGP 
[R1]ospf 1
[R1-ospf-1]import-route bgp 

[R3]ospf 1 
[R3-ospf-1]import-route bgp 

 2)在R4中验证测试: 
<R4> ping  -a  10.10.4.4  10.10.5.5   --可以实现互通

 3)备注:在OSPF中引入BGP路由的潜在风险 
为什么不建议在OSPF中引入BGP路由
因为BGP传递路由,会传递大量的路由,假设50W条路由
如果把BGP路由传递给ospf ,那么就会瞬间产生50W个5类的LSA,而且全域泛洪
所有的OSPF路由器,都要学习这些5类的LSA
所以同步数据库非常慢,设备压力非常大,可能导致大量内网路由器宕机

 4)删除配置,恢复配置 
[R1-ospf-1]undo import-route bgp 
[R3-ospf-1]undo import-route bgp 

 3、第三个解决方案;IBGP全互联 
 1)配置IBGP全互联:在原有的基础上配置 

[R2]bgp 200
[R2-bgp]router-id 2.2.2.2
[R2-bgp]peer 192.168.12.1 as 200
[R2-bgp]peer 192.168.23.3 as 200

[R1]bgp 200
[R1-bgp]peer 192.168.12.2 as 200
[R1-bgp]peer 192.168.12.2 next-hop-local

[R3]bgp 200
[R3-bgp]peer 192.168.23.2 as 200
[R3-bgp]peer 192.168.23.2 next-hop-local


 2)在R4中验证测试: 
<R4> ping  -a  10.10.4.4  10.10.5.5   --可以实现互通

 3)备注:配置IBGP全互联的不足 
要建立N*(n-1)/2的邻居关系
配置工作量非常大, 维护非常难

 ======================================================================
======================================================================
======================================================================
IBGP全互联完整配置: 

1R4的接口配置:
[R4]int g0/0/0
[R4-G0/0/0]ip add 192.168.14.4 24
[R4-G0/0/0]int lo0
[R4-LoopBack0]ip add 10.10.4.4 32

2R4BGP配置:
[R4]bgp 100
[R4-bgp]router-id 4.4.4.4
[R4-bgp]peer 192.168.14.1 as 200    //和R1建立外部邻居
[R4-bgp]network 10.10.4.4 32        //注入路由

**R1的配置:**
1R1的接口配置:
[R1]int g0/0/0
[R1-G0/0/0]ip add 192.168.12.1 24
[R1-G0/0/0]int g0/0/1
[R1-G0/0/1]ip add 192.168.14.1 24

2R1OSPF配置:
[R1]ospf 1 router-id 1.1.1.1
[R1-ospf-1]area 0
[R1-ospf-1-area-0.0.0.0]network 192.168.12.0 0.0.0.255
[R1-ospf-1-area-0.0.0.0]quit
[R1-ospf-1]quit

3R1BGP配置:
[R1]bgp 200  //开启BGP,配置AS200
[R1-bgp]router-id 1.1.1.1
[R1-bgp]peer 192.168.14.4 as 100      //和R4建立外部邻居

[R1-bgp]peer 192.168.12.2 as 200      //和R2建立内部邻居
[R1-bgp]peer 192.168.12.2 next-hop-local   //修改下一跳

[R1-bgp]peer 192.168.23.3 as 200      //和R3建立内部邻居
[R1-bgp]peer 192.168.23.3 next-hop-local   //修改下一跳


**R2的配置:**
1R2的接口配置:
[R2]int g0/0/0
[R2-G0/0/0]ip add 192.168.12.2 24
[R2-G0/0/0]int g0/0/1
[R2-G0/0/1]ip add 192.168.23.2 24

2R2的ospf配置:
[R2]ospf 1 router-id 2.2.2.2
[R2-ospf-1]area 0
[R2-ospf-1-area-0.0.0.0]network 192.168.12.0 0.0.0.255
[R2-ospf-1-area-0.0.0.0]network 192.168.23.0 0.0.0.255
[R2-ospf-1-area-0.0.0.0]quit

3R2BGP配置:
[R2]bgp 200
[R2-bgp]router-id 2.2.2.2
[R2-bgp]peer 192.168.12.1 as 200    //和R1建立内部邻居
[R2-bgp]peer 192.168.23.3 as 200    //和R3建立内部邻居

**R3的配置:**
1R3的接口配置:
[R3]int g0/0/0
[R3-G0/0/0]ip add 192.168.23.3 24
[R3-G0/0/0]int g0/0/1
[R3-G0/0/1]ip add 192.168.35.3 24

2R3OSPF配置
[R3]ospf 1 router-id 3.3.3.3
[R3-ospf-1]area 0
[R3-ospf-1-area-0.0.0.0]network 192.168.23.0 0.0.0.255
[R3-ospf-1-area-0.0.0.0]quit
[R3-ospf-1]quit

3R3BGP配置:
[R3]bgp 200
[R3-bgp]router-id 3.3.3.3
[R3-bgp]peer 192.168.23.2 as 200    //和R2建立内部邻居
[R3-bgp]peer 192.168.23.2 next-hop-local  //修改下一跳

[R3-bgp]peer 192.168.12.1 as 200    //和R1建立内部邻居
[R3-bgp]peer 192.168.12.1 next-hop-local  //修改下一跳

[R3-bgp]peer 192.168.35.5 as 300    //和R5建立外部邻居


**R5的配置:**
1R5的接口配置:
[R5]int g0/0/0
[R5-G0/0/0]ip add 192.168.35.5 24
[R5-G0/0/0]int lo0
[R5-LoopBack0]ip add 10.10.5.5 32

2R5BGP配置:
[R5]bgp 300
[R5-bgp]router-id 5.5.5.5
[R5-bgp]peer 192.168.35.3 as 200   //和R3建立外部邻居
[R5-bgp]network 10.10.5.5 32       //注入路由

**验证方法:**
1<R2>dis ospf peer br     //在R2中查看ospf 邻居
2<R1>ping 192.168.23.3    //在R1 ping  R3 通

3<R1>dis bgp peer    //R1和R2 R3  R4 都是BGP邻居
 Peer            V   AS  MsgRcvd  MsgSent  OutQ  Up/Down       State     PrefRcv
 192.168.12.2    4   200    47      50     0     00:45:22    Established    0
 192.168.14.4    4   100    57      57     0     00:54:20    Established    1
 192.168.23.3    4   200    42      44     0     00:39:58    Established    1



<R3>dis bgp peer     //R3和R1 R2  R5 都是BGP邻居
 Peer            V    AS   MsgRcvd  MsgSent  OutQ  Up/Down       State    PrefRcv
 192.168.12.1    4    200    48       48     0     00:45:14   Established    1
 192.168.23.2    4    200    47       48     0     00:45:42   Established    0
 192.168.35.5    4    300    42       43     0     00:39:08   Established    1 

<R4>dis bgp routing-table     //所有的路由器都有这两条路由
 *>   10.10.4.4/32       0.0.0.0         0                     0      i
 *>   10.10.5.5/32       192.168.14.1                          0      200 300i 


<R4>ping -a 10.10.4.4  10.10.5.5      //可以通

2、解析:修改下一跳: Next_Hop

1)始发路由器在给邻居传递BGP路由时,默认修改下一跳地址
1)在R4的始发路由器上注入路由10.10.4.4  下一跳为0.0.0.0
<R4>dis bgp routing-table 
       Network            NextHop        MED        LocPrf    PrefVal Path/Ogn
  *>   10.10.4.4/32        0.0.0.0          0                     0           i
  
 
 2R1查看路由表,发现10.10.4.4的这条路由下一跳地址改为192.168.14.4
 <R1>display bgp routing-table
      Network            NextHop        MED        LocPrf    PrefVal Path/Ogn
 *>   10.10.4.4/32        192.168.14.4     0                     0      100 i
 
  备注:始发路由器在给邻居传递BGP路由时,默认修改下一跳地址,
                                   修改为和对端设备建立邻居的那个接口的IP地址 



2)从外部邻居哪里学来的路由,在传递给自己的内部邻居时,默认不修改下一跳地址
3)在R3中查看路由表,发现10.10.4.4的这条路由下一跳地址改为192.168.14.4
<R3>display bgp routing-table

      Network            NextHop        MED        LocPrf    PrefVal Path/Ogn
   i  10.10.4.4/32       192.168.14.4    0          100        0      100 i
 
 备注:在R3中,我认为10.10.4.4 这条路由不是最优的,也不是有效的路由
      为什么?
      因为下一跳不可达,R3和下一跳地址192.168.14.4之间网络不可达
      
 为什么会出现这个问题?
      因为BGP路由器从外部邻居哪里学来的路由,在传递给自己的内部邻居时,默认不修改下一跳地址
      因为R1从外部邻居R4哪里学来的路由,在传递给内部邻居R3时,默认不修改下一跳地址
 
 如何解决这个问题:
      [R1]bgp 200
      [R1-bgp]peer 192.168.23.3 next-hop-local      //修改下一跳
      

3)外部邻居在传递路由的时候,默认修改下一跳地址

====================以下是参考图示案例======================
====================以下是参考图示案例======================
====================以下是参考图示案例======================
1)始发路由器在给邻居传递BGP路由时,默认修改下一跳地址
R4BGP路由传递给EBGP邻居R1时,将该路由的下一跳地址设置为自己和R1建立邻居的那个接口IP地址:192.168.14.1


2)BGP路由器从外部邻居-EBGP邻居哪里学来的路由,在传递给自己的内部邻居-IBGP邻居时,默认不修改下一跳地址,会保持路由的下一跳地址不变

备注:所以R3收到R1发来的:10.10.4.0 这条路由后,发现这条路由不是有效的,为什么?
因为R3无法访问192.168.14.4 ,R3发现下一跳不可达,所以认为这条路由是无效的

解决方案:
[R1]bgp  200
[R1-bgp]peer 10.10.3.3 next-hop-local   
 //R1在给R3传递路由的时候会修改路由的下一跳地址为R1的本地地址(也就是10.10.1.1)















---------------------------------------------------------
思路5:R1R2建立IBGP邻居 (内部的IBGP邻居)
思路6:R2R3建立IBGP邻居 (内部的IBGP邻居)
思路7:在R4R5中注入路由