网络基础——BGP

背景

前面介绍的OSPF、ISIS都是使用于一般的中小型网络,但是如果是ISP那种网络,如果就是使用OSPF或者ISIS,那么是很难管理的,对于设备的性能和损耗也大,于是BGP(边界网关协议),一种针对AS的路由协议被定义出来

相关名词

  • AS:自治系统,指的是在同一个组织管理下,使用统一选路策略的设备集合
  • EGP:外部网关协议,是用于AS之间的路由协议,但是只会发布路由可达,而不对路由进行优选
  • IGP:内部网关协议,是一种统称,例如ISIS、OSPF都是属于内部网关协议
  • BGP:边界网关协议,基于TCP,只是传递路由信息,不会传递拓扑信息,同时是触发式更新
  • 对等体:就是运行BGP的设备之间建立的邻居关系
  • IBGP:就是在同一个AS内建立的BGP对等体关系
  • EBGP:就是不在同一个AS内建立的BGP对等体关系
  • router-ID:运行BGP协议的路由的唯一标识,可以手工指定,也可以设备选择,重新指定不需要重启
  • 更新源地址:就是用来建立TCP连接的地址,loopback建立时需要修改

原理


基本原理

  • 首先是确保底层的IGP协议可达,底层的主要就是使用OSPF或者ISIS建立成功
  • 当底层的TCP连接建立成功后,会开始协商open报文,此时的状态是opensent
  • 协商成功,那么就会进行Keeplive的交互,如果协商不成功,那么就会发送notification报文,状态重新回到idle
  • 当所有的协商成功,会进入到最终的状态established状态,此时会发送update报文,进行路由操作

报文

  • open报文:用来建立BGP邻居关系,以及协商BGP可选能力,里面携带一些重要字段,例如MY AS、router-ID、hold time、 AFI:协议标识符、SAFI:子协议标识符             
  • update报文: 只能触发时发送,没有周期,有三种情况会发送该报文,当存在某条路由更新时/当需要撤销某条路由时/当某条路由属性被修改时
  • notification报文: 差错报文,用来通知设备邻居关系出现错误信息,需要断开BGP邻居,一旦收到这个报文,状态立马为idle
  • Keeplive报文:60秒为一个周期发送,用来保活BGP邻居关系
  • refresh报文:刷新报文,当需要刷新BGP状态时,这个报文会发送

状态机

  • idle:BGP初始状态,收到start事件后,会进入connect状态
  • connect:等待TCP连接完成,默认事件为32秒,完成连接,则进入opensent状态,如果连接失败,那么就进入active
  • active:主动发起TCP的重连接,如果成功则发送open报文,进入opensen状态,连接失败保留在active,等超时时间到时,回到connect状态
  • opensent:发出open报文,协商来自的邻居的open报文,协商成功,进入openconfirm状态
  • openconfirm:发出Keeplive,等待对方的Keeplive,时间为5秒,如果收到,那么进入established状态,没有收到,回到idle
  • established状态:表示邻居关系建立完成,开始发送update报文

通告原则

  • 只会发布最优且可达的路由
  • 从EBGP对等体收到的路由会发送给所有的BGP对等体邻居
  • 水平分割:从IBGP对等体收到的路由不会发送给自己的IBGP对等体关系
  • 路由同步:从IBGP收到的路由,如果EBGP又通过自己的IGP协议学习到该条路由,那么该EBGP可以收到来自IBGP发送的该条路由

BGP路由属性

  • 公认必遵:必须是BGP可以识别,且存在于update报文中的

origin:起源属性,用于判断设备的路由来源

AS-path:是标识设备所经过的AS,可以用作AS间防环

nex-hop:下一跳,用于指导路由,同时建立邻居使用的更新源地址

  • 公认任意:必须是BGP可以识别,但是不要求存在update报文中

Local——prf:本地优先级属性,用来判断离开本AS的最优路径,只在AS内生效

Atomic-Aggregate:是在聚合路由中的属性,标明该路由为聚合路由

  • 可选过度:不要求BGP可以识别,但是需要保留在BGP设备中

community:团体属性,限制传播范围,默认是不会传递的

Aggregator:是在聚合路由中的属性,记录了聚合设备的AS号、Router ID

  • 可选非过度:不要求BGP可以识别,同时也不要求保留在BGP设备中

MED:BGP开销值,用来判断进入本AS的最优路径,只能在两个AS间传递

Cluster-List:集群列表,在RR反射器的路由属性,会记录经过的每一个RR设备

Originator-ID :起源ID,是在RR中的路由属性,记录路由的产生者设备的Router-ID


选路原则(前提条件是丢弃下一跳不可达的路由

  1. 优选Preferred-Value(华为设备独有的特性)属性值最大
  2. 优选Local_Preference属性值大的,适用于AS内
  3. 优选本地始发的BGP路由
  4. 优选AS-path短的路由,适用于两个AS间
  5. 优选起源属性最优的,i>e>?
  6. 优选MED最小的路由
  7. 优选从EBGP学习到的路由
  8. 优选nex_hop中的IGP开销最小的路由(MED值就是在这里的开销)
  9. 优选簇ID短的路由
  10. 优选起源ID短的路由
  11. 优选IP地址最小的路由

实验

要求

  1. 按照图中规划,同时使用loopback口建立邻居
  2. 只有AS200内运行ospf,其他两个AS不能使能ospf
  3. 最终实现设备全部可互通

建立成功的截图(display bgp peer)

查看Bgp路由(display bgp routing-table)

抓包--Keeplive

抓包--update报文

抓包--refresh报文

代码

bgp AS号//创建BGP进程,并且进入
 router-id 1.1.1.1//指定运行BGP的router-ID
 peer 2.2.2.2 as-number 200 //指定与AS200内的2.2.2.2建立邻居
 peer 2.2.2.2 ebgp-max-hop 3 //修改EBGP邻居的最大跳数为3
 peer 2.2.2.2 connect-interface LoopBack0//修改更新源地址为环回接口
 peer 2.2.2.2 next-hop-local//修改下一跳为本地

network 想要宣告的地址 掩码//注意这里的地址必须是存在与IP路由表中的

refresh bgp all export //刷新出方向的Bgp路由,在用户视图下

refresh bgp all import //刷新入方向的Bgp路由,在用户视图下

ps:BGP基础就是这些,但是如果想要完全懂得BGP,还是需要自己多看,多做实验,例如全互联、RR反射器、BGP联盟、路由选路等等

相关推荐

  1. 基于BP神经网络的租金预测

    2024-04-02 13:20:06       43 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-02 13:20:06       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-02 13:20:06       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-02 13:20:06       20 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-02 13:20:06       20 阅读

热门阅读

  1. Spring Boot单元测试

    2024-04-02 13:20:06       16 阅读
  2. PCL 点云的平面裁剪

    2024-04-02 13:20:06       16 阅读
  3. 【USB】C#使用HID通信

    2024-04-02 13:20:06       17 阅读
  4. go-zero整合单机版Redis并实现增删改查

    2024-04-02 13:20:06       16 阅读
  5. 438 找到字符串中所有字母异味词

    2024-04-02 13:20:06       12 阅读
  6. springcloud基本使用四(Feign远程调用)

    2024-04-02 13:20:06       14 阅读
  7. 为什么型类型信息可以通过匿名内部类来保存

    2024-04-02 13:20:06       14 阅读
  8. 2404C++,C++ADL扩展库

    2024-04-02 13:20:06       15 阅读
  9. width:100%与width:auto区别

    2024-04-02 13:20:06       15 阅读
  10. mysql常见故障及mysql优化

    2024-04-02 13:20:06       18 阅读