Day17-BGP(2)

BGP 的六种状态机

状态名称 用途 备注
idle(爱豆) 初始化状态。说明正在进行 TCP 三次握手的过程。 tcp未连接状态,邻居的状态为idle , 当bgp设备和邻居进行tcp 连接时,会从当前的状态转为connect 状态
connect(可埃克特) TCP 已连接状态 如果tcp 建立连接成功,bgp 设备会向邻居发送open报文,状态也会转为opensent 状态 如果tcp 建立连接失败,bgp设备的状态会转为active 状态
active(艾克替五) 如果 tcp 连接失败,则进入 active 状态。依然试图建立 tcp 连接,如果成功,则转为下一状态 1.在当前状态下,bgp 设备依然没有放弃希望,依然试图继续建立tcp 连接,如果成功,状态依然可以转为opensent 状态 2.如果依然失败,bgp会停留在active 状态 3.如果重传计时器超时,依然没有收到邻居回应,bgp设备会心灰意冷的返回上一个状态,上一个是connect 状态
opensent(哦盆森特) 报文已发送状态,已向邻居发送 oepn 报文 1.如果bgp设备给邻居发送open报文后,如果收到来自邻居的回复,并且回复的报文是正确的,bgp 设备会继续发送报文,发送什么报文呢? 发送keep alive 报文,状态转为 open comfirm 状态 2.如果bgp设备给邻居发送open报文后,如果收到来自邻居的回复,但是回复的报文有错误,bgp 设备会向邻居发送notification 报文(用于断开bgp连接状态),断开后会跳转到最初的idle 状态
open confirm(哦盆 肯佛木) open 报文确认状态 1.如果收到邻居发来的keep alive 报文,状态会转为established 建立状态 2.如果收到邻居发来的notification 报文,状态会跳转为 idle 状态
established(意思他不历史 d) 连接已建立状态 1.如果收到邻居发来的正确的update 报文或者keepalive 报文,bgp就会认为邻居是正常的 2.如果收到邻居发来的错误的update 报文或者keepalive 报文,bgp设备会发送notification 报文,通知邻居,我们分手把,不做邻居了,会回到idle 初始化状态

BGP 引入路由的两种方式

在BGP中,通过network 或者import-route 宣告,将通告 IGP 学习到的路由信息,宣告进进入到BGP的数据库,然后在 BGP 邻居之间进行传递

BGP协议中的network 命令和之前在OSPF协议中的network命令不太一样,因为在BGP 协议中,network 后面跟的是与路由表中完全精确匹配的路由条目和掩码,不是反掩码,并且这种路由的类型,可以是任何类型。

NETWORK 宣告代码示例

bgp 400. //进入 AS 400
  NETWORK 192.168.14.0 24 //将路由宣告入 BGP 协议

但是,当 AS 中的路由条目多的时候(成千上万条路由),逐条宣告太浪费时间

IMPORT 宣告代码示例

bgp 400
  import-route direct|static|ospf|rip|...// 将通告某种 IGP 学习到的路由,统一进行宣告

BGP 路由 表解析

status codes: * 该路由是有效的,能用
> 该路由是最优秀的,自己能用,别人也能用
Origin:表示的是一个BGP路由的起源属性,主要用来定义路径信息的来源,标记一条路由是怎么成为BGP路由的 I IGP,具有最高的优先级。通过network命令注入到BGP路由表的路由,其Origin属性为IGP。
E 优先级次之,通过EGP得到的路由信息,其Origin属性为EGP。
优先级最低。通过其他方式学习到的路由信息。比如BGP通过import-route命令引入的路由,其Origin属性为Incomplete
network 表示路由的网段和掩码
nexthop 表示 BGP 路由的下一跳地址,如果是 0.0.0.0 代表该路由是自己产生的
MED 路由度量值,表示去往一个 BGP 路由的距离
locPrf 本地优先级,表示路由器的 BGP 本地优先级
PrefVal 协议首选值,表示的是一个 BGP 路由的优选值,最高的路由
Path/Ogn Path 代表一个 BGP 路由的 AS Path 属性,该属性顺序的记录了一个 BGP 路由从始发地到目的地经过了哪个几个 AS 编号

在学习 BGP 数据库时,最关注的就是路由前面的'>',一旦有这个标识符,代表该 BGP 路由是最好的,尝试放入自己的 BGP 路由表,尝试通告给自己的 BGP 邻居。

BGP 的通告原则

BGP 通告原则一:仅将自己最优的路由发布给邻居

BGP 通告原则二:通告 EBGP 获得的最优路由,发布给所有 BGP 邻居

BGP 通告原则三:通告 IBGP 获得的最优路由,不会发布给其他的 IBGP 邻居(IBGP的水平分割)

BGP 通告原则四:BGP 于 IGP 同步(华为路由器上默认是关闭同步检查的)也就是说,一个BGP路由器在宣告(通告)一条路由到外部网络之前,必须确保这条路由在内部网络(通过IGP)是可达的。

  • 防止路由环路:确保数据包不会因为路由信息不一致而在网络中循环转发。
  • 确保网络的可达性:防止数据包因为找不到合适的路径而无法到达目的地。

IBGP 水平分割(内内不相传)

一台路由器从 IBGP 邻居那里学习到的路由,不会再传递给自己的 IBGP 邻居,可以防止路由环路

那怎么解决路由传递的问题呢?

1.IBGP 全互连(每一个运行 BGP 协议的路由器,都互相建立邻居)

全互联要建立多少邻居关系呢?

n(n-1)/2

5(4)/2=10

BGP 联盟

IBGP 全互联需要建立邻居系数量太多太麻烦了,而且会增加设备的资源消耗。

—怎么减少邻居关系?

BGP 联盟

将一个大的 AS 系统,划分成多分小的 AS 系统。

联盟 AS:和外部建立邻居的时候,使用共有的 AS 号,对外,联盟 AS 是一个独立的 AS 号

子 AS:一个联盟 AS 内部,可以包含多个子 AS,子 AS 之间是 EBGP 邻居关系,子 AS 内部是全互联的 IBGP 邻居关系。

BGP 联盟,降低了 AS 内部网络设备的 CPU 负担,适用于大型网络规模。

BGP联盟实验

需求:

1.AS200 内使用 BGP 联盟,减少 IBGP 互连的数量。

2.R1 的 10.10.1.1 可以 ping 同 R7 的 10.10.7.7

[R4]bgp 64512  //进入子AS  —相当于部落
[R4-bgp]confederation id 200  //声明子AS  所属的 联盟  即 公有AS
 [R4-bgp]confederation peer-as 64513  //  声明  子AS 之间的 邻居关系 (联盟内部的EBGP 专属) 
[R4-bgp]peer 192.168.45. 2 as-number 64513   // 子AS 之间 使用物理接口建立 内部 的 EBGP 邻居关
[R4-bgp]peer 10.10.2.2 as-number 64512   
[R4-bgp]peer  10.10.2.2 connect-interface LoopBack 0
[R4-bgp]peer 10.10.2.2 next-hop-local
[R4-bgp]peer 10.10.3.3 as-number 64512
[R4-bgp]peer 10.10.3.3 connect-interface LoopBack 0
[R4-bgp]peer 10.10.3.3 next-hop-local

[R5]bgp 64513  //进入子AS  —相当于部落
[R5-bgp]confederation id 200  //声明子AS  所属的 联盟  即 公有AS
 [R5-bgp]confederation peer-as 64512  //  声明  子AS 之间的 邻居关系 (联盟内部的EBGP 专属) 
[R5-bgp]peer 192.168.45. 1 as-number 64512   // 子AS 之间 使用物理接口建立 内部 的 EBGP 邻居关
[R5-bgp]peer 10.10.6.6 as-number 64513  
[R5-bgp]peer  10.10.6.6 connect-interface LoopBack 0
[R6-bgp]peer 10.10.6.6 next-hop-local

BGP 传递路由的规律

EBGP邻居

传递路由的时候,会默认修改下一跳地址,将下一跳地址修改为了自己接口的 IP 地址(与对方建立邻居关系时,使用的 接口IP 地址),方便对方使用

IBGP 邻居

传递路由的时候,不会修改下一跳地址。导致IBGP 邻居即使接收到BGP 路由,也不可用。


我们发现,EBGP 总是很让人放心,但是 IBGP 确已经遇到了两个问题:邻居无法建立,路由无法同步。

1.由于 IBGP 邻居关系是以 loopback 口建立的,所以需要手动更改更新源地址为 loopback 口

peer 10.10.2.1 connect-interface LoopBack0   //解决邻居无法建立的命令

2.由于 IBGP 传递路由时,不会修改下一跳地址,导致路由不可用。所以需要手动更改路由的下一跳地址

peer 10.10.2.1 next-hop-local      //解决数据库(路由信息)无法同步的问题

BGP实验(阶段 1)

需求:AR10能和区域 AS100 内的所有设备进行通讯(BGP)

配置思路

1.按照要求配置 IP 地址、loopback 接口地址。AS100 内的网段使用 ospf 互通(禁止宣告 EBGP 网段

2.建立 EBGP 邻居关系
3.建立 IBGP全互联
4.全互联后,即通讯

R10(EBGP 邻居建立)
BGP 200
peer 192.168.1.2 as-number 100. //建立 EBGP 邻居,使用物理接口
network 10.10.10.10 24  //将想要通告的路由,引入到 BGP 当中
R20(EBGP 邻居建立)
BGP 300
peer 192.168.4.2 as-number 100. //建立 EBGP 邻居,使用物理接口
network 20.20.20.20 24  //将想要通告的路由,引入到 BGP 当中

R1(EBGP 邻居建立)
BGP 100
peer 192.168.1.1 as-number 200. //建立 EBGP 邻居,使用物理接口

R3(EBGP 邻居建立)
BGP 100
peer 192.168.4.1 as-number 300. //建立 EBGP 邻居,使用物理接口

R1(IBGP 全互联)
BGP 100
peer 23.23.23.23 as-number 100. //建立 IBGP 邻居,使用逻辑接口
peer 23.23.23.23 connect-interface loopback 0. //更改更新源地址
peer 23.23.23.23 next-hop-local //修改传递路由的下一跳地址(IBGP)

peer 34.34.34.34 as-number 100. //建立 IBGP 邻居,使用逻辑接口
peer 34.34.34.34 connect-interface loopback 0. //更改更新源地址
peer 34.34.34.34 next-hop-local //修改传递路由的下一跳地址(IBGP)

R2(IBGP 全互连)
BGP 100
peer 12.12.12.12 as-number 100. //建立 IBGP 邻居,使用逻辑接口
peer 12.12.12.12 connect-interface loopback 0. //更改更新源地址
peer 12.12.12.12 next-hop-local //修改传递路由的下一跳地址(IBGP)

peer 34.34.34.34 as-number 100. //建立 IBGP 邻居,使用逻辑接口
peer 34.34.34.34 connect-interface loopback 0. //更改更新源地址
peer 34.34.34.34 next-hop-local //修改传递路由的下一跳地址(IBGP)

R3(IBGP 全互联)
BGP 100
peer 23.23.23.23 as-number 100. //建立 IBGP 邻居,使用逻辑接口
peer 23.23.23.23 connect-interface loopback 0. //更改更新源地址
peer 23.23.23.23 next-hop-local //修改传递路由的下一跳地址(IBGP)

peer 12.12.12.12 as-number 100. //建立 IBGP 邻居,使用逻辑接口
peer 12.12.12.12 connect-interface loopback 0. //更改更新源地址
peer 12.12.12.12 next-hop-local //修改传递路由的下一跳地址(IBGP)

通告路由

R1(将 AS100 内的IGP 路由通告进 BGP 里)
BGP 100
import-route ospf 1

完成以上操作后,AS200 即可于 AS100 进行互通