BGP边界网关协议 - 从零开始学习

概述

它是一种实现AS之间的路由可达并选择最佳路由的距离矢量协议,它能够承载大量的路由信息,支撑大规模网络

AS的概念

AS自治系统,指在同一个组织管理下,使用相同策略设备的集合,不同AS通过AS号区分,AS取值范围1 ~ 65535,其中64512 ~ 65535是私有AS号

BGP网络中的每给AS都被分配一个唯一的AS号,用于区分不同的AS

BGP使用的协议和端口号

  • 使用TCP协议
  • 端口号179

BGP的路由器号(Router-ID)

Router-ID用于标识BGP设备,通常以IPv4地址的形式,在BGP会话建立时发送的Open报文中携带,每个BGP设备都必须由唯一的Router ID,否则邻居之间不能建立BGP连接

BGP协议路由的特点

  1. 能够承载大批量的路由信息,支撑大规模网络
  2. ★使用TCP作为其传输层协议,提高协议可靠性

因BGP是外部路由协议,用于AS之间传递数据,对稳定性要求非常高,因此用TCP的高可靠性来保证BGP的稳定性

  1. 邻居之间必须逻辑上连通,并进行TCP连接

目的端口号为179,本地端口可以随意

  1. BGP邻居和IGP邻居不同,BGP邻居是指使用TCP建立连接的两端,并非与IGP同概念的直连邻居,只要TCP能够建立连接并不一定需要直连
  2. BGP只负责控制路由,数据转发依靠静态或IGP路由
  3. 支持子网划分
  4. 路由更新时,是发送更新路由,大大减少了BGP传播路由所占用的带宽,适用于在Internet上传播大量的路由信息
  5. BGP是一种增强的距离矢量路由协议,从设计上避免环路的发生
  6. ★AS之间:BGP通过携带AS_Path信息标记途径的AS,带有本地AS号的路由将被丢弃,从而避免域间产生环路
  7. ★AS内部:BGPAS内学到的路由不会再通告给AS内的BGP邻居,避免了AS内产生环路
  8. 提供了丰富的路由策略,能对路由实现灵活的过滤选择
  9. 提供了防止路由振荡的机制(路由衰减),有效提高了Internet网络的稳定性
  10. 易于扩展,能够适应网络新的发展

BGP的分类

BGP由两种运行方式,分为EBGP和IBGP

EBGP

  • 运行在不同AS之间的BGP称为EBGP
  • 为了防止AS间产生环路

当BGP设备接收EBGP邻居发送的路由时,会将带有本地AS号的路由丢弃

IBGP

  • 运行在同一个AS内部的BGP成为IBGP
  • 为了防止AS内部产生环路

BGP设备不讲从IBGP邻居学到的路由通告给其他IBGP邻居,并与所由IBGP邻居建立完全连接

BGP的五种报文

Open报文

  • TCP连接后的第一个报文

Updata报文

  • 交换更新信息

Notification报文

  • 中断连接

Keepalive报文

  • 保持连接[保活]

Router-refresh报文

  • 路由刷新

BGP的六种状态机

  • 空闲(Idle)
    初始状态,拒绝邻居发送的连接请求,只有在收到本设备start事件后,才开始尝试和其他BGP邻居进行TCP连接,并转为Connet状态
  • 连接(Connet)
    TCP连接成功,就向邻居发送Open报文,并转至OpenSent状态;
    TCP连接失败,就转至Active状态,并反复尝试连接
    如连接重传定时器超时。且没有收到邻居的响应,那么将继续尝试和其他邻居进行TCP连接,并停留在Connet
  • 活跃(Active)
    TCP连接成功,就向邻居发送Open报文,关闭连接重传定时器,并转至OpenSent状态
    TCP连接失败,就停留在Active状态
    如连接重传定时器超时。且没有收到邻居的响应,那么将转至Connect状态
  • Open报文发送(OpenSent)
    如收到Open报文正确,就发送Keepalive报文,并转至OpenConfirm状态
    如收到Open报文错误,就发送Notification报文给邻居,并转至Idle状态
  • Open报文已确认(OpenConfirm)
    如收到Keepalive报文,则转至Established状态
    如收到Notification报文,则转至Idle状态
  • 连接已建立(Established)
    如收到正确的Update或Keepalive报文,就会认为对端处于正常的运行状态,将保持连接
    如收到错误的Update或Keepalive报文,就发送Notification报文通知对端,并转至Idle状态
    如收到Notification报文,就转至Idle状态
    如收到TCP拆链通知,就断开连接,转至Idle状态

BGP的九个原则

  • 从IBGP邻居获得的BGP路由,设备只发布给它的EBGP邻居
  • 从EBGP邻居获得的BGP路由,设备发布给它所有EBGP和IBGP邻居
  • 当存在多条到达同一目的地址的有效路由时,设备只将最优路由发布给邻居
  • 路由更新时,设备只发送更新BGP路由
  • 所有邻居发送的路由,设备都会接收
  • 所有EBGP邻居在传递过程中下一跳改变
  • 所有IBGP邻居在传递过程中下一跳不变
  • 默认EBGP传递时TTL值为1
  • 默认IBGP传递时TTL值为255

建立邻居的注意点

  • 直连建立邻居需要注意的点
    建立IBGP邻居时要下一跳可达,处于边界的IBGP邻居需要将下一跳指向自己
  • 用环回口建立邻居需要注意的点
    需要修改更新源,默认更新源为物理接口,需要修改为环回口
  • 为什么要用环回口建立邻居
    环回口稳定
    BGP路径属性
    当一条BGP路由被BGP路由器更新给其对等体时,这条BGP路由路由会携带多个路径属性值(path attributes)一并传递给对等体,BGP的这些路经属性,将影响BGP的路由优选,它们的存在使得BGP的路由策略能力异常强大

BGP的十二条路由优选规则

  1. 优选具有最大preferred-value的路由
  2. 优选具有最大LOCAL PREFERENCE的路由
  3. 优选起源于本地的路由
  4. 优选AS-path最短的路由
  5. origin(IGP>EGP>incomplete)
  6. 优选MED最小的路由
  7. 优选EBGP对等体所有通告的路由
  8. 优选到next-hop的IGP度量值的路由
  9. BGP路由负载分担
  10. 优选CLUSTER-LIST 最短的路由
  11. 优选router-id 最小的BGP对等体发来的路由
  12. 选优peer-ip地址最小的对等体发来的路由

技术背景

  • 当BGP设备学习到去往同一目的网络的多条BGP路由时,设备将这些路由都装载到BGP路由表,并在这些条目中进行路由优选,最终决策出最优的路由,将该路由加载到全局路由表中,作为数据转发的依据
  • 当存在多路径时,BGP只会将其选择出来的最优路由通告给其他对等体
  • BGP定义了一系列路由优选规则,从而使得设备能够在多条路有中选择最优的路由。BGP在选择路由时严格按照先后顺序比较路由的属性,如果通过当前的属性就可以选出最优路由,BGP将不再进行后面比较
  • BGP的选路规则与BGP路径属性与路由策略息息相关,它们使得BGP拥有了强大的路由操控能力

路径属性分类

公认属性
公认必遵属性—所有的BGP实现都必须都能识别,且在update报文中必须携带(AS路径、下一条next-hop、起源origin)
公认自由决定属性—所有的BGP实现都必须都能识别,单不要求必须包含在update报文中(本地优先级local preferent)
可选属性
可选传递的—设备可以不支持该属性,但即使不支持,也应当接受包含该属性的路由并传递给其他对等体(团体属性community)
可选非传递的—设备可以不支持该属性,不识别的BGP进程忽略包含这个属性的路由更新,并且不传递给其他BGP对等体(MED)

BGP选路原则

  1. 如果此路由的下一跳不可达,忽略路由
  2. preferred-value 数值越高越优先,华为私有属性,仅本地有意义
  3. local-preference值最高的路由优先
  4. 聚合路由优先非聚合路由
  5. 本地手动聚合路由的优先级高于本地自动聚合的路由
  6. 本地通过network命令引入的路由的优先级高于本地通过import-router命令引入的路由
  7. AS-path的长度最短的路径优先
  8. 比较origin属性,IGP优先EGP,EGP优先incomplete
  9. 选择MED较小的路由
  10. EBGP路由优先于IBGP
  11. BGP优先选择到BGP下一跳的IGP度量值最低的路径
  12. 当以上全部相同,则为等价路由,可以负载分担(注意:AS-path 必须一致,当负载分担时,以下3条原则无效)
  13. 比较cluster-list长度,短者优先
  14. 比较originator-id (如果没有originator-id,则用router-id比较)
  15. 选择数值较小的路径
  16. 比较对等体的IP地址,选择IP地址数值最小的路径

BGP属性选路配置 local-preference

  1. 根据local-preference控制选路(数值越大越优先)
  2. ★它为公认自由属性,用于告诉AS中 的路由,哪条路径是离开AS的首选路径
  3. ★local-preference属性只能在IBGP对等体间传递,不能在EBGP对等体间传递,如果EBGP对等体间收到的路由的路径属性中携带了local-preference,则会触发notification报文中,造成会话中断
  4. ★但是可以在AS边界路由器上使用import方向的策略来修改local-preference属性值,也就是在收到路由之后,在本地为路由赋予local-preference
【路由器】router-policy lop permit node 10   创建名为LOP 的路由策略 
【路由器】apply local-preference 200        设置本地优先级为200
【路由器】quit 
【路由器】bgp 100
【路由器】peer  x.x.x.x router-policy lop export /import
<用户视图>reset bgp all    重启BGP
<用户视图>refreshi bgp all export/import  刷新BGP

BGP属性选路配置AS-path

★它为公认必遵属性,是前往目标网络的路由经过的AS列表
★作用:确保路由在EBGP对等体之间传递无环,另外也作为路由优选的衡量标准之一
★路由在被通告给EBGP对等体时,路由器会在该路由的AS-path中追加上本地的AS号,路由被通告给EBGP对等体时,AS-path不会发生改变
★使用router-policy修改BGP路由的AS-path

apply as-path xxx additive 在已有AS-path基础上追加xxx
apply as-path xxx overwrite 将已有AS-path值替换成下xxx
apply as-path none overwrite 清空路由 AS-path属性


【路由器】router-policy as permit node 10   创建名为as-path的路由策略 
【路由器】apply as-path 123 123 123 additive     追加
【路由器】quit 
【路由器】bgp 100
【路由器】peer  x.x.x.x router-policy as export /import
<用户视图>reset bgp all    重启BGP
<用户视图>refreshi bgp all export/import  刷新BGP

BGP属性选路配置MED(越小越优先)

★它为可选非传递属性,是一种度量值
★一般情况下,BGP设备只是比较来自同一AS(不同对等体)的路由的MED属性值,可以通过配置命令来允许BGP比较来自不同as路由的MED属性值,执行compare
different as med 命令后,系统将比较来自不同AS中的对等体的路由的MED值

【路由器】router-policy med permit node 10   创建名为as-path的路由策略 
【路由器】apply cost +500     追加
【路由器】quit 
【路由器】bgp 100
【路由器】peer  x.x.x.x router-policy med export /import
<用户视图>reset bgp all    重启BGP
<用户视图>refreshi bgp all export/import  刷新BGP


多网段情况下只匹配某一网段选路
origin属于公有必遵,用来定义路径信息的来源,其作用是标记一条路由时怎么成为BGP路由的,EBGP邻居之间起作用,他有三种属性
**IGP**(i )优先级最高 
**EGP**(e)优先级次之
**Incomplete**(?)优先级最低
【路由器】IP ip-prefix 1 permit 网段 子网掩码
【路由器】router-policy RP permit node 10   
【路由器】if-match ip-pefix 1
【路由器】apply origin incompet
【路由器】router-policy RP permit node 20
【路由器】bgp 100
【路由器】network 网段 子网掩码
【路由器】peer IP地址 as number 345
【路由器】peer  IP地址 route-policy rp export

猜你喜欢

转载自blog.csdn.net/qq_42427971/article/details/112553828