📜  BGP |边界网关协议

📅  最后修改于: 2020-11-10 06:10:58             🧑  作者: Mango

边界网关协议

它是一种域间路由协议,它使用路径向量路由。它是一种网关协议,用于在Internet上的自治系统之间交换路由信息。

我们知道边界网关协议可在不同的自治系统上运行,因此我们应该了解BGP的历史,自治系统的类型等。

BGP的历史

第一个网络是国防部开发的ARPANET,由高级研究计划局设计。在Arpanet中,仅存在一个由单个管理员处理的网络。所有路由器都是单个网络的一部分,路由是在GGP(网关到网关路由协议)的帮助下进行的。 GGP是所有路由协议中的第一个协议。自治系统编号未在GGP协议中使用。

当互联网进入市场时,GGP开始制造问题。由于Internet主干网变大,因此路由表也变大,从而导致了维护问题。为了解决此问题,ARPANET被划分为多个域,称为自治系统。每个自治系统都可以单独处理,每个系统都有自己的路由策略,并且自治系统包含小型路由数据库。实施自治系统概念后,第一个路由协议即RIP,该协议在单个自治系统上运行。为了将一个自治系统与另一个自治系统连接,开发了EGP(外部网关协议)协议。 EGP协议于1984年启动,在RFC 904中定义。该EGP协议使用了五年,但由于存在一定的缺陷,1989年开发了新协议,称为RFC 1105中定义的边界网关协议(BGP)。 。

BGP有许多版本,例如:

  • BGP版本1:此版本于1989年发布,并在RFC 1105中定义。
  • BGP版本2:在RFC 1163中定义。
  • BGP版本3:在RFC 1267中定义。
  • BGP版本4:这是RFC 1771中定义的BGP的当前版本。

BGP自治系统

自治系统是位于单个公共管理域下的网络的集合。或者我们可以说这是单个管理域下的一组路由器。例如,一个组织可以包含多个具有不同位置的路由器,但是单个自治号码系统将识别它们。在同一自治系统或同一组织内,我们通常使用IGP(内部网关协议)协议,例如RIP,IGRP,EIGRP,OSPF。假设我们要在两个自治系统之间进行通信。在这种情况下,我们使用EGP(外部网关协议)。在Internet上运行或用于在两个不同的自治号码系统之间进行通信的协议称为BGP(边界网关协议)。 BGP是唯一在Internet主干网上运行或用于在两个不同的自治号码系统之间交换路由的协议。 Internet服务提供商使用BGP协议来控制所有路由信息。

BGP功能

以下是BGP协议的功能:

  • 开放标准

它是可以在任何窗口设备上运行的标准协议。

  • 外部网关协议

它是一个外部网关协议,用于在两个或多个自治系统编号之间交换路由信息。

  • AS间域路由

它是专为域间路由而设计的,其中域间域间路由意味着在两个或多个自治号码系统之间交换路由信息。

  • 支持互联网

它是唯一在Internet主干上运行的协议。

  • 无阶级

这是一个无类协议。

  • 增量和触发更新

像IGP一样,BGP也支持增量更新和触发器更新。

  • 路径向量通讯协定

BGP是路径矢量协议。在此,路径向量是一种将路由与路由信息一起发送的方法。

  • 配置邻居关系

它发送更新以手动配置邻居关系。假设有两个路由器R1和R2。然后,R1必须发送configure命令,说您是我的邻居。另一方面,R2还必须向R1发送配置命令,说R1是R1的邻居。如果两个configure命令都匹配,则将在这两个路由器之间建立邻居关系。

  • 应用层协议

它是一个应用层协议,并使用TCP协议来提高可靠性。

  • 公制

它具有许多属性,例如权重属性,来源等。BGP支持大量可能影响路径操作过程的属性。

  • 行政距离

如果信息来自外部自治系统,则使用20个管理距离。如果信息来自同一自治系统,则它将使用200个管理距离。

BGP的环路预防机制

有一种可能是,当您连接到Internet时,您可能会将10.0.0.0路由发布到某个自治系统,然后又将其发布到其他自治系统。这样就有可能再次返回相同的路线。这将创建一个循环。但是,在BGP中,有一个规则,例如,当路由器看到自己的AS编号时,如上图所示,网络180.10.0.0/16源自AS 100,并且当它发送到AS 200时,它将携带其路径信息,即180.10.0.0/16和AS100。当AS 200发送到AS 300时,AS 200将发送其路径信息180.10.0.0/16,AS路径为100,然后为200 ,这意味着路由起源于AS 100,然后到达200,最后到达300。当AS 300发送到AS 500时,它将发送网络信息180.10.0.0/16,AS路径为100、200和200。然后是300。如果AS 500发送到AS 100,并且AS 100在更新中看到其自己的自治号码,它将不接受。这样,BGP阻止了环路的创建。

自治系统的类型

以下是自治系统的类型:

  • 存根自治系统

它是一个仅包含从一个自治系统到另一个自治系统的连接的系统。数据流量无法通过存根自治系统传递。存根AS可以是源,也可以是宿。如果我们有一个自治系统,即AS1,那么它将与另一个自治系统AS2具有单一连接。 AS1既可以充当源也可以充当宿。如果它充当源,那么数据将从AS1移动到AS2。如果AS1充当接收器,则意味着来自AS2的数据已在AS1中使用,但数据不会从AS1向前移动。

  • 多宿主自治系统

它是一个自治系统,可以与另一个自治系统建立多个连接,但仍然可以是数据流量的源或宿。没有瞬时数据流量,这意味着可以从一个自治系统传递数据。

  • 暂态自治系统

临时自治系统是一个多宿主自治系统,但它也提供了临时交通流。

路径属性

BGP根据路径的属性选择最佳路由。

众所周知,边界网关路由协议中使用了路径矢量路由,该协议包含显示路径信息的路由表。路径属性提供路径信息。显示或存储路径信息的属性称为路径属性。此属性列表可帮助接收路由器在应用任何策略时做出更好的决策。让我们看看不同类型的属性。路径属性大致分为两类:

1.众所周知的属性:每个BGP路由器都应识别的属性。

众所周知的属性进一步分为两类:

  • 众所周知的强制性:当BGP要通告任何网络时,它还会通告额外的信息,并且该信息带有路径属性信息。该信息包括AS路径信息,起点信息,下一跳信息。在此,强制性意味着它必须存在于所有BGP路由更新中。
  • 众所周知的自由裁量权:所有BGP路由器都可以识别它,并将其传递给其他BGP路由器,但是在更新中并不一定要包含此属性。

2.可选属性:此属性不必一定要被每个BGP路由器识别。简而言之,我们可以说它不是强制属性。

可选属性进一步分为两类:

  • 可选的传递: BGP可能会或可能不会识别此属性,但会将其传递给其他BGP邻居。在此,传递表示意味着如果属性未被识别,则将其标记为部分属性。
  • 可选的非传递性:如果BGP无法识别该属性,则它将忽略更新,并且不通告给其他BGP路由器。

BGP邻居

BGP邻居与OSPF邻居相似,但差异不大。 BGP在端口号179上的TCP连接的帮助下形成邻居关系,然后交换BGP更新。他们在形成邻居关系后交换更新。在BGP中,邻居关系是手动配置的。 BGP邻居也称为BGP对等体或BGP发言人。

邻居关系有两种类型:

  • IBGP(内部BGP):如果所有路由器都是彼此的邻居,并且属于同一自治编号系统,则这些路由器称为IBGP。

  • EBGP(外部BGP):如果所有路由器都是彼此的邻居,并且它们属于不同的自治编号系统,则这些路由器称为EBGP。

BGP表

BGP表有三种类型:

  • 邻居表:它包含管理员手动配置的邻居。必须使用邻居命令手动配置邻居关系。

为了进行验证,使用了以下命令:

#show ip bgp summary
# show ip bgp neighbors

上面的命令对于验证邻居关系是否正常非常有用。

  • BGP转发表:包含所有在BGP中发布的路由,可以使用以下命令进行验证:
# show ip bgp
  • IP路由表: IP路由表包含到达目的地所需的最佳路径路由。以下命令显示最佳路由路径:
#SH ip route

BGP会话

当我们谈论BGP时,意味着自治系统之间的通信。让我们考虑两个分别具有五个节点的自治系统。

BGP会话分为两类:

1.内部BGP会话

内部BGP会话用于在自治系统内的路由器之间交换信息。简而言之,可以说路由信息是在同一自治系统的路由器之间交换的。

2.外部BGP会话

外部BGP会话是不同自治系统的节点或路由器相互通信的会话。

数据包类型

BGP中存在四种不同类型的数据包:

  • 开放:路由器要与另一台路由器建立邻居关系时,会发送开放数据包。
  • 更新:两种情况下均可使用更新数据包:
  • 它可用于撤消先前已通告的目的地。
  • 它也可以用来宣告到达新目的地的路线。
  • 保持活动状态:定期交换保持活动数据包,以告知其他路由器是否处于活动状态。例如,有两个路由器,即R1和R2。 R1将保持活动数据包发送到R2,而R2将保持活动数据包发送到R1,以便R1可以知道R2处于活动状态,而R2可以知道R1处于活动状态。
  • 通知:当路由器检测到错误情况或关闭连接时,将发送通知数据包。

BGP报文格式

现在我们将看到数据包传输的格式。以下是BGP数据包格式的字段:

  • 标记:这是一个32位字段,用于身份验证。
  • 长度:这是一个16位字段,用于定义消息的总长度,包括标题。
  • 类型:这是一个8位字段,用于定义数据包的类型。