BGP(Border Gateway Protocol,边界网关协议)是现代网络架构中几乎所有高级技术的基础,任何一项现代网络体系下的高级技术都离不开它。在学习BGP之前,需要具备一定的基础知识。
基础准备:
-
CCNA基础——至少需要一半的CCNA基础;推荐阅读《CCNA学习指南:路由和交换认证》(作者:Todd Lammle)。
-
OSPF——如果具备基本的多区域OSPF或其他IGP等理论和配置能力,将为学习BGP打下良好基础。尽管BGP相对复杂一些,但掌握路由基础知识(特别是OSPF和EIGRP)将有助于理解BGP的工作原理。
最优前置条件——在学习BGP之前,建议掌握以下前置课程和基础知识:
-
计算机网络基础:了解网络的基本概念,如OSI模型、TCP/IP模型、数据包的传输过程等。
-
路由基础:掌握静态路由和动态路由的基本原理,了解路由选择算法和常见的动态路由协议(如RIP、OSPF、EIGRP、IS-IS)。
-
IP 地址与子网划分:熟悉IPv4和IPv6地址的结构,掌握子网掩码的计算和子网划分技术。
-
TCP/IP协议:了解TCP、UDP、IP和ARP等协议的工作原理,理解它们在网络中的作用。
-
基本的网络设备配置:会使用命令行界面(CLI)配置路由器和交换机的基本功能。
-
网络安全基础:了解网络安全的基本概念,掌握防火墙和访问控制的基本配置。
在掌握这些基础知识后,可以深入学习BGP,包括其工作原理、路径选择算法、策略控制、路由聚合和故障排除等内容。建议参考一些权威的教材或在线课程,以帮助加深理解。
BGP的背景与重要性
在考虑是否需要BGP之前,了解其诞生的背景很重要。
外部路由协议主要用于在AS(Autonomous-System,自治系统)之间传递路由信息。单一企业网络即使规模较大,也可以通过IGP提供的路由工具来管理。只有在需要互连各个独立的AS时,才需使用BGP。比如,各个云服务商之间、云内部的不同组织、一个办公大楼内的不同公司之间等,都会使用BGP来实现互联互通。
BGP版本与特性
-
BGP:BGP4于1995年在RFC 1771中规定。BGP4的重要特性是无类路由协议,支持CIDR(无类域间路由)。(BGP4之前的版本可以不用再关注了,也不会用到)
-
BGP4+:通常是指对BGP4的一些增强和扩展,在设计上是向后兼容BGP4并支持BGP4的所有基本功能。它可以被视为对BGP4的一个自然演变,主要用于解决BGP4中的一些局限性。主要关注于BGP的基础功能的增强,例如更灵活的路由选择和属性。保留了BGP4的路径选择、邻居关系等基本功能。支持使用扩展的路由属性,这些在BGP4中可能未定义。支持32位AS号码,而BGP4只支持16位AS号码。
-
当前使用的BGP实际上是BGP4+/MBGP。
MP-BGP(多协议BGP,也叫MBGP)
-
定义:MP-BGP是对BGP4的扩展,旨在支持多种协议类型和地址族,如IPv4、IPv6、L2VPN、VPNv4和v6等。允许在同一个BGP会话中传输多种类型的路由信息。
-
兼容性:MP-BGP兼容BGP4和BGP4+,可以与支持这些版本的设备进行交互。
ASN(Autonomous-System Number,自治系统号码)
-
定义:不同的AS通过 ASN区分,存在16位和32位两种表示方法。
-
16位私有ASN使用范围:64512 ~ 65535;
-
32位私有ASN使用范围:4200000000 ~ 4294967295。
-
-
发放:ASN由IANA机构负责分配,必须使用IANA分配的ASN、服务提供商分配的ASN或专用ASN。
注意:未经允许使用其他组织的ASN可能会导致流量丢失,并可能对互联网造成严重影响。
BGP是应用层协议,基于TCP 179。TCP支持通信数据包的分段、排序和可靠性(确认和重传)。最新的BGP实现都会设置DF(Do-not-Fragment,不分段)比特以防止分段,且依赖路径MTU发现机制。它只传递路由信息,不暴露AS内的拓扑信息,并且采用触发式更新,而不是周期性更新。借用乾颐堂王珏清老师一句话:“BGP不生产路由,BGP只是IGP路由的搬运工。” BGP是路径矢量路由协议,不包含完整的网络拓扑结构。BGP的对端Peer之间只能控制传递自己路由表中已有的路由,不能传递没有的路由。
PS//
连接到同一网络上的BGP邻居使用ARP表查找对等体的IP地址;多跳BGP会话需要使用路由表信息来查找对等体的IP地址。iBGP邻居之间通常运行静态路由或IGP以提供拓扑路径信息来建立BGP的TCP会话。默认路由不足以建立多跳BGP会话。
BGP会话类型:
-
iBGP(内部 BGP):与位于相同AS或参与同一BGP联盟的路由器建立的会话。
-
eBGP(外部 BGP):与其他AS中的BGP路由建立的会话。
BGP的路径属性
BGP为每条网络路径关联路径属性(Path Attribute, PA),这些属性提供了精细化的路由策略控制能力。BGP前缀的路径属性可分为以下几种类型:
-
周知强制(Well-known Mandatory)
-
周知自选(Well-known Discretionary)
-
可选传递(Optional Transitive)
-
可选非传递(Optional Nontransitive)
所有BGP实现都必须支持周知属性。每条前缀声明必须包含周知强制属性,可能包含周知自选属性,但可选属性的支持则并非强制。设置为可选并具有传递性的属性可在AS(自治系统)之间传递,而某些属性则不具备传递性,无法在AS之间共享。
BGP中的NLRI(Network Layer Reachability Information,网络层可达性信息)由网络前缀、前缀长度及相关的BGP路径属性组成。
AS_PATH属性
AS_PATH是一个周知强制属性,包含了前缀声明从源AS开始经过的所有AS的完整ASN列表。BGP利用AS_PATH来防止环路。如果路由器收到前缀声明并发现自己的AS在AS_PATH列表中,则会丢弃该前缀,认为该声明产生了环路。
MP-BGP扩展
最初的BGP主要负责在组织之间路由IPv4前缀,但RFC 2858通过AFI(Address-Family Identifier,地址簇标识符)扩展增加了MP-BGP功能。地址簇与特定网络协议(如IPv4、IPv6等)相关,可以通过SAFI(Subsequent Address-Family Identifier,子地址簇标识符)提供更精细的标识能力(如单播和多播)。
MP-BGP利用路径属性中的MP_REACH_NLRI和MP_UNREACH_NLRI实现不同地址簇的网络可达性信息隔离。
每个地址簇在BGP中都有独立的数据库和配置,这可以为不同地址簇配置不同的路由策略。BGP的每条路由声明都会包含AFI和SAFI,以便区分数据库。
BGP消息类型
BGP通信使用四类消息:
-
OPEN消息:用于建立BGP邻接关系,包含BGP版本号、发端路由器的ASN、保持时间、BGP标识符及其他可选参数。
-
保持时间:为每个BGP邻居设置的保持定时器(秒为单位)。收到UPDATE或KEEPALIVE消息后,保持定时器重置。如果达到0,则会拆除该BGP会话。保持时间值设置最少不要低于3秒,若将保持时间值设置为0则禁用KEEPALIVE消息;思科路由器的默认保持定时器的保持时间为180s。
-
BGP标识符(BGP Router-ID):32位唯一数字,标识BGP路由器。必须设置非零值以确保路由器能成为邻居。
-
-
KEEPALIVE消息:确保邻居的激活性,按照保持时间的1/3进行交换。思科路由器默认间隔为60秒。
-
UPDATE消息:用于宣告可选路由、撤销以前的路由或两者兼具。包含NLRI和BGP路径属性。为了减少不必要的流量也可以使用UPDATE消息来充当KEEPALIVE消息。
-
NOTIFICATION消息:当检测到会话出现错误(如保持定时器到期或邻居能力变更)时发送,导致BGP连接关闭。
BGP状态机
BGP使用有限状态机(Finite State Machine,FSM)维护所有对等体的TCP连接及其运行状态。BGP会话可能会报告以下状态:
-
Idle(空闲);
-
Connect(连接);
-
Active(激活);
-
OpenSent(打开发送);
-
OpenConfirm(打开确认);
-
Established(建立)。
各状态说明
-
Idle状态:BGP FSM的第一阶段,检测到启动事件后尝试初始化TCP连接。如果因错误再次返回Idle状态,连接重试定时器(ConnectRetryTimer)将设置为60秒,并在此后递增。
-
Connect状态:启动TCP连接。三次握手完成后,发送OPEN消息并进入OpenSent状态。超时则进入Active状态。
-
Active状态:启动新的TCP连接。如果建立成功,发送OPEN消息;失败则返回Connect状态。
-
OpenSent状态:已发送OPEN消息,等待邻居的OPEN消息。检查OPEN消息的各项参数是否匹配,如版本、源IP地址是否匹配邻居的IP地址、ASN是否与邻居对应匹配和RID是否唯一。可选的安全参数是否相匹配。如果无误,则协商保持时间并发送KEEPALIVE消息。
-
OpenConfirm状态:等待KEEPALIVE或NOTIFICATION消息。收到邻居发送过来的KEEPALIVE后,则进入Established状态;超时或接收NOTIFICATION则返回Idle状态。
-
Established状态:建立BGP会话,邻居通过UPDATE消息交换路由。收到UPDATE和KEEPALIVE消息后,重置保持定时器,若超时则返回Idle状态。
建立BGP会话后,通过命令show tcp brief显示了路由器之间的活动TCP会话。


结论
掌握BGP是现代网络架构的核心,理解其基础知识和工作原理,将为从事网络相关工作奠定坚实的基础。
其中用这个示例结点来查看一下全球BGP路由表的规模:
可以通过telnet访问route-views.routeviews.org来展示。

由此可见,BGP就是Internet的基石,没有BGP就没有互联网。