BGP 学习第一课

时间:2022-10-05 20:13:54

一。什么时候要使用BGP路由

1.给运营商使用的

2.成担互联网的传输与业务。

3.如果企业要使用BGP,

1)如果是一个传输AS,(可能要成担互联网的流量)

2)连接不同的网络(比如连接了联通,又连接到了电信,以保安全)单位使用的就这种。

3)希望流量是可以控制的。

                BGP 学习第一课

       如果一个连电信一个连网通,可以使用 ROUTE MAP 进行判断目的地址,如果是电信走电信,如果是网通走网通。但是性能会降低,因为这台设备就会是边界路由,要使用NET,转发,判断每个包的走向,是没有办法的办法,效率底。


BGP 围绕的主要是 AS,将整个互联网分成了几个若干的管理域。

多个AS之间做路由使用 BGP,但AS内部还是使用 OSPF RIP 等。

一个AS 是一个单独的技术管理下的路由器,

AS号是IANA来管理和分配,是个组织。

私有的AS号 64512 - 65535 可以内部自己使用。

path-vector  路径矢量 bgp新的特性。经过AS最少的就是优先使用的路径

BGP依赖管理员分配的属性,依据属性进行操作和寻径。

BGP只能影响自己的决策,不能影响邻居(AS)做决策。

什么时候不能用

硬件不行不能用

只有一个出口不能用


BGP传输的前提,必须要建立一条TCP会话,要想两个路由器建立一个BGP会话,就必须要先建立一个TCP会话,使用端口179 

促发更新,只有产生变化时才会向外发送更新。

周期性发送保活信息,确认双方是正常的。

OSPF 使用 IP 包

EIGRP 使用 IP 包

RIP 使用 UDP 520端口

使用TCP的意义。BGP使用TCP 179 ,因为TCP可靠,有窗口机制传大包有保障,有流控,有重传输机制。


BGP也是三张表

邻居表

要建立邻居表先要建议TCP的会话,然后建议BGP的邻居关系 ,在周期性发送保活信息。会把邻居关系记录邻居表中。


转发表

也叫转发数据库。从每个邻居里学到的所有网络的列表。取最优的路径放IP路由表里


IP路由表

记录路由


BGP是有管理距离的

IBGP 是 内部BGP 管理距离是200

EBGP 是外部BGP 管理距离是 20

建议通信时使用四个消息

先建立一条TCP连接

OPEN

发送一个OPEN消息 ,如果收到,就每60秒发送KEEPALIVE

OPEN消息包括

version number :  4  如果版本不同,就互相协商,

AS Number : 

Hold time  : 建议秒数 可以是0 但最少是3

route id : 路由器的名子,建议手动设置,如果没有环回口最高,如果没有环回口,就是物理口的最高地址

optional parameters : 可选字段,一般用不上

Keepalive

就成功建立了,周期发送保活消息,

update

进行更新

网络号:network-layer reachability information 网络层可达性信息 就是IP的前缀信息,就是网络号

度量 :PATH attribmtes 路径属性

withdraum routes 撤销的路由,就是发要删除的路由 

notification

有错误的时候发送

包含一个error code 信息

error subcode  &  data

如果路由器收到了,就会关闭和对方的bug链接。



EBGP & IBGP

EGBP 也叫外部BGP,是工作在两个AS之间的BGP

BGP 学习第一课

需要被直连,因为要建立TCP会话,如果不直连,就PING不通,没有TCP会话

IBGP

可以不直连

BGP 学习第一课

把一个运行一个BGP路由的叫 “讲者”

建议了邻居的 BGP路由器叫 ”对等体“


BGP 学习第一课

IBGP,

一台路由器只能存在于一个AS,也就是只能起一个BGP

BGP 学习第一课

BGP 学习第一课

红线处 如果是 external link 就是 EBGP , 在AS 之间使用的 BGP  比如AS 100与AS200 或AS 65535 与AS65534


如果是 internal link 就是IBGP,一共是AS内部,比如都是AS100之间建立的BGP

BGP neighbor is 1.1.1.1,  remote AS 100, internal link
  BGP version 4, remote router ID 1.1.1.1
  BGP state = Established, up for 00:29:34
  Last read 00:00:34, last write 00:00:34, hold time is 180, keepalive interval is 60 seconds
  Neighbor capabilities:
    Route refresh: advertised and received(old & new)
    Address family IPv4 Unicast: advertised and received
  Message statistics:
    InQ depth is 0
    OutQ depth is 0
                         Sent       Rcvd
    Opens:                  1          1
    Notifications:          0          0
    Updates:                4          3
    Keepalives:            31         31
    Route Refresh:          0          0
    Total:                 36         35
  Default minimum time between advertisement runs is 0 seconds

BGP 学习第一课BGP 学习第一课

二 建立BGP

R1

router bgp 100
 no synchronization
 bgp router-id 1.1.1.1
 bgp log-neighbor-changes
 neighbor 12.1.1.2 remote-as 200
 no auto-summary

R2



router bgp 200
 no synchronization
 bgp router-id 2.2.2.2
 bgp log-neighbor-changes
 neighbor 12.1.1.1 remote-as 100
 no auto-summary


这样 R1 R2 的EBGP就起来了。


宣告网络

1,可宣告非直连的网络,与其它的不一样,以前的是哪些接口参与就宣哪个,

而现在是哪一个网络在哪里做一个起源,

2. 条件是,他必须存在IP路由表中,不管用什么方式得取的,只要在路由表就行


R1(config)#route bgp 100

R1(config-router)#network 1.1.1.0 mask 255.255.255.0  //掩码是正常的掩码 这里接的掩码一定要

和路由表里的掩码是一样的,否则不生效,子网一定要是网络号,如果是其它的也不好使。




R1#show ip bgp
BGP table version is 2, local router ID is 1.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
*> 1.1.1.0/24       0.0.0.0                  0         32768 i


宣告后,要等一段时间,不是立即响应。


在R2上 执行下面的命令,就会发现 因为是 EBGP 所以管理距离是 20

BGP 学习第一课


三 AS200中的三个ROU 都启OSPF 

在使用 BGP(IBGP)把 2与3,3与4起IBGP,

建立好后

BGP 学习第一课

是注意R1发送 1.1.1.1 10.10.10.0 这两条路由

R2能学到 R3能学到 但R4不能学到,这是为什么呢。

因为BGP的一个特性(BGP的水平分割),就是我从一个IBGP邻居里收到的路由更新不会

发给另外一个IBGP邻居。就是R3收到了R2的路由更新信息,不会发给R4

所以BGP要求全互联的,就是2 - 4 也要建立邻居

因为使用了OSPF,所以2与4的任何接口地址都是互通的,所以很轻松的就建议了BGP,

就会学到路由信息。


当我们去往目地地的时候,如果有冗余路径,建立关系就要指定 环回口,

比如下图,如果A与D建立关系,IP就是指向 4,这样B C哪个断了都不影响使用。

BGP 学习第一课


如何 才能避免这种构架呢,就是建立邻居的时候,使用环回口来指定邻居,

R2(config-router)#neighbor 3.3.3.3 remote-as 200

但是数据是不会用环回口来进行向对方发包的,因为使用三层接口地址,如果还要指定一下

neighbor 3.3.3.3 update-source loopback 0

这样就没问题了。



在ebgp与ebgp中也要使用环回口建立,之间使用静态进行指一下路由,

如果多条路径就指多条静态。

在最后要写这下面这条命令

neighbor 3.3.3.3 ebgp-multihop 2

就是最多的跳数,如果不保险就写大点。

在IBGP与IBGP不用写。

如下图BGP 学习第一课


R2如果是 AS 100 R3 R4 是AS 200, 如果使用 LOOPBACK地址让R2与R3 R4之间建立邻居时,就要使用这个命令 neighbor XXX ebgp-multihop 2 ,否则建立邻居无效,但如果使用接口地址进行的话,就可以。


BGP又一个特性,看下图,

当 2和3,2和4,3和4 都建立了IBGP,1和2之间是EBGP。是你会发现

1,2,3,4,在show ip bgp时都会学到 Bgp发布的路由

但3和4在 show ip route 的时候就没有bgp路由,

这是因为bgp的又一个特性,就是发布路由信息的时候,下一跳是不会变的

比如2从1那学到一条路由,下一跳就是1,这时可以PING通1,

但3从2那又到1发布的路由,下一跳信息仍然还是1,但3还没有到1的路由信息。导致不在 ip route 中体现,因为无法到达。

BGP 学习第一课


解决这个问题,使用一个命令。

R2(config-router)#neighbor 4.4.4.4 next-hop-self

把自己做为下一跳的地址。


neighbor soft-reconfiguration inbound告诉BGP进程保存从指定邻居那里获悉的所有更新