BGP

BGP简介

  • 为方便管理规模不断扩大的网络,网络被分成了不同的AS(Autonomous System,自治系统)。早期,EGP(Exterior Gateway Protocol,外部网关协议)被用于实现在AS之间动态交换路由信息。但是EGP设计得比较简单,只发布网络可达的路由信息,而不对路由信息进行优选,同时也没有考虑环路避免等问题,很快就无法满足网络管理的要求。

  • BGP是为取代最初的EGP而设计的另一种外部网关协议。不同于最初的EGP,BGP能够进行路由优选、避免路由环路、更高效率的传递路由和维护大量的路由信息。

  • BGP是一种实现自治系统AS之间的路由可达,并选择最佳路由的矢量性协议。早期发布的三个版本分别是BGP-1(RFC1105)、BGP-2(RFC1163)和BGP-3(RFC1267),1994年开始使用BGP-4(RFC1771),2006年之后单播IPv4网络使用的版本是BGP-4(RFC4271),其他网络(如IPv6等)使用的版本是MP-BGP(RFC4760)。

AS

  • AS指的是在同一个组织管理下,使用统一选路策略的设备集合。

  • 不同AS通过AS号区分,AS号存在16bit、32bit两种表示方式。IANA负责AS号的分发。

    IANA(Internet Assigned Numbers Authority,因特网地址分配组织):IAB(Internet Architecture Board,因特网体系委员会)的下设组织。IANA授权NIC( Network Information Center,网络信息中心)和其他组织负责IP地址和域名分配,同时,IANA负责维护TCP/IP协议族所采用的协议标识符数据库,包括自治系统号。

    在长度为16bit的AS号表示方式中:64512-65534为私有AS号,在长度为32bit的AS号表示方式中:4200000000-4294967294为私有AS号。

  • 一般电信、移动、联通这些用的AS都是共有AS,企业内部用AS,用的一般为私有AS

使用BGP传递路由

使用IGP传递路由的问题:

  • AS之间可能是不同的机构、公司,相互之间无法完全信任,使用IGP可能存在暴露AS内部的网络信息的风险。
  • •整个网络规模扩大,路由数量进一步增加,路由表规模变大,路由收敛变慢,设备性能消耗加大。

使用BGP传递路由:

  • BGP基于TCP,TCP端口号为179,只要能够建立TCP连接,即可建立BGP

    TCP的优点:即可靠又快

  • 只传递路由信息,不会保留AS内的拓扑信息

    BGP是距离矢量协议,不怎么占资源,不会传递拓扑信息,

  • 触发式更新,而不是进行周期性更新。节约资源

为什么当初设计OSPF的人不用TCP作为网络协议?

  • TCP是面向连接的,如果已经有TCP了,就不需要OSPF邻居自动发现
  • 能够建立TCP连接,就说明已经知道邻居IP地址了,那么就不需要OSPF自动发现邻居关系

BGP邻居建立

BGP的会话是基于TCP建立的,建立BGP对等体关系的两台路由器并不要求必须直连

对等体:类比与OSPF的邻居

​ 两个建立BGP会话的路由器互为对等体(Peer),BGP对等体之间交换BGP路由表

对等体(邻居)关系类型:

  • IBGP:内部BGP邻居,相同AS之间建立
  • EBGP:外部BGP邻居,不同AS之间建立

BGP对等体关系建立:

  • BGP对等体都会发起TCP三次握手

  • 三次握手建立完成后,会相互发送Open报文,携带参数用于对等体建立、参数协商

  • 协商成功后,会相互发送Keepalive报文,收到对端发送的Keepalive报文之后对等体建立成功,同时双方定期发送Keepalive报文用于保持连接

    BGP对等体发起TCP三次握手,会建立两个TCP连接,但是实际BGP只会保留其中一个TCP连接,从Open报文中获取对端BGP Identifier之后BGP对等体会比较本端的Router ID和对端的Router ID大小,如果本端Router ID小于对端Router ID,则会关闭本地建立的TCP连接,使用由对端主动发起创建的TCP连接进行后续的BGP报文交互。

  • BGP对等体关系建立之后,BGP路由器发送BGP Update(更新)报文通告路由到对等体

BGP报文类型

BGP存在5中类型的报文,不同类型的报文拥有相同的头部

报文类型

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

BGP报文头部基本格式

image

  • Marker:占16字节,用于检查BGP对等体的同步信息是否完整,以及用于BGP验证的计算。不使用验证时所有比特均为1(十六进制则全“FF”)。
  • Length:占2个字节(无符号位)BGP消息总长度(包括报文头在内)。以字节为单位。长度范围是19~4096
  • Type:占一个字节(无符号位),BGP消息的类型。Type有5个可选值,表示BGP报文头后面所接的5类报文。从1到5分别表示Open、Update、Notification、Keepalive、Route-refresh报文

Open报文

image

  • Version:BGP的协议号,对于BGP 4来说,其值为4
  • My AS:发送者自己的AS号。通过比较两端AS号可以判断对端是否和本端处于相同AS
  • Hold Time:保持时间,单位为秒。用于协商BGP对等体间保持建立连接关系,发送Keepalive或Update等报文的时间间隔。选择较小的时间作为协商结果。Hold Time的值可为零(不发Keepalive报文)或大于等于3,系统默认为180秒
  • BGP Identifier:BGP标识符即发送者的route id,以IP地址的形式表示,用来识别BGP路由器
  • Opt Parm Len:表示Optional Parameters(可选参数)的长度。如果此值为0,表示没有可选参数
  • Optional Parameters:可选参数,主要用于宣告自身对于一些可选功能的支持。比如认证、多协议支持

Update报文

image

  • withdrawn Routes Length:标明Withdram Routes部分的长度。其值为零时,表示没有撤销的路由

  • Withdrawn Routes:包含要撤销的路由列表,列表中每个单元包含1字节的Length域和可变长度的Prefix域

    • Length:待撤销路由的掩码。其值为零时,表示匹配所有的路由
    • Prefix:传送的IP地址前缀必须用整字节表示。
  • Total Path Attribute Length:标明Path Attributes部分和Network Layer Reachability Information两部分的长度。其值为零时,表示没有路由及其路由属性要通告

  • Path Attributes:包含要更新的路由属性列表。每个路径属性包括属性类型、属性长度、属性值三部分,其编码由一个TLV(Type-Length-Value)三元组构成
    image
    image

  • Network Layer Reachability Information(NLRI):包含要更新的地址前缀列表,每一个地址前缀单元由一个LV二元组(prefix length,the prefix of the reachable route)组成,其编码填写方式与Withdrawn Routes的填写方法相同

Notification报文

image

  • Error Code:占1个字节(无符号位),定义错误的类型,非特定的错误类型用零表示
  • Error Subcode:占1个字节(无符号位),指定错误细节编号,非特定的错误细节编号用零表示
  • Data:指定错误数据内容

Keepalive报文

Keepalive报文用于保持BGP连接,Keepalive报文只有BGP报文头,没有具体内容,故其报文长度应固定为19个字节

Refresh报文

image

  • AFI:Address Family Identifier,地址族标识,如IPv4
  • Res:保留,8个bit必须置0
  • SAFI:Subsequent Address Family Identifier,子地址族标识

BGP状态机

Idle状态:

  • 开始准备TCP的连接,指定完邻居之后,会等待32s,进入下一个阶段

Connect状态:

  • 主动发起TCP连接的过程,认证都是在TCP建立期间完成的。
    • TCP建立成功则进入Opensent状态
    • TCP建立失败则TCP又主动变为被动模式(active状态),由对方发起TCP连接
      • TCP建立成功则进入Opensent状态
      • TCP建立不成功则等待一会,再重新主动发起TCP连接

Active状态:

  • TCP连接没建立成功,反复尝试TCP连接

Opensent状态:

  • TCP连接已经建立成功,开始发送Open包,Open包携带参数协商对等体的建立

OpenConfirm状态:

  • 代表Open包协商成功。当收到邻居的Keepalive报文,进入最终状态Established状态

Established状态:

  • 已经收到对方的Keepalive包,双方能力特性经协商发现一致,开始使用Update通告路由信息

注意:任何一个状态发生错误(收到Notification报文),都会使状态回到Idle。32s后重新进行建立

image

BGP路由传递

BGP路由的生成

  • 不同于IGP路由协议,BGP自身并不会发现并计算产生路由,BGP将IGP路由表中的路由注入到BGP路由表中,并通过Update报文传递给BGP对等体

  • BGP注入路由的方式:

    • Network
    • Import-route
  • BGP支持根据已有的路由条目进行聚合,生成聚合路由

    bgp 100
     aggregate 10.1.0.0 22 detail-suppressed
    
    • 执行聚合后,本地BGP路由表会多出一条聚合的路由条目
    • 指定聚合时,指定detail-suppressed参数,则通告路由时,不通告聚合前的明细路由

通告原则

BGP通告遵循以下原则:

  • 只发布最优且有效路由

  • 从EBGP对等体获取的路由,会发布给所有对等体

  • IBGP水平分割:从IBGP对等体获取的路由,不会发送给IBGP对等体

  • BGP同步规则:当一台路由器从自己的IBGP对等体学习到一条BGP路由时(这类路由被称为IBGP路由),它将不能使用该条路由或把这条路由通告给自己的EBGP对等体,除非它又从IGP协议(例如OSPF等,此处也包含静态路由)学习到这条路由,也就是要求IBGP路由与IGP路由同步。同步规则主要用于规避BGP路由黑洞问题。

    BGP同步功能已经淘汰了,华为设备都是关闭BGP同步的,不支持开启BGP的同步!Cisco设备默认关闭BGP同步。

    undo synchronization:关闭BGP与IGP的同步功能

路由传递问题:只有在路由传递给EBGP邻居时,下一跳会改变。但路由传递给IBGP时,下一跳不变

解决方法: 在BGP配置添加如下配置

bgp 100

peer 10.1.0.1 next-hop-local # 10.1.0.1为 IBGP邻居

BGP基本配置

bgp 100
 router-id 1.1.1.1
 peer 2.2.2.2 as-number 100
 peer 2.2.2.2 connect-interface loopback 0	# 建立对等体使用的源地址
 peer 2.2.2.2 ebgp-max-hop 2	# EBGP对等体最大跳数,缺省情况下,EBGP连接允许的最大跳数为1,即只能在物理直连链路上建立EBGP连接
posted @ 2022-10-19 23:22  未来的你!  阅读(372)  评论(0)    收藏  举报