Author basilguo@163.com

Date Sep. 13, 2023

Description BGP协议基础知识

AS(Autonomous System, 自治系统,自治域)

一般BGP交换路由信息的网络是指AS之间交换路由信息,一个AS就是指运行同样路由策略的网络。BGP协议属于是路径矢量协议(path vector procol),实际上BGP一条路由就对应着一条路径。路径有AS号有序列表组成,只要自己的AS不在路径上,那么就没有路由环路。

AS之间的商业关系有两种:Peer-Peer以及Customer-Provider。

  • Transit是指转运流量的网络,也就是源地址不属于该网络,目的地址也不是该网络,只是根据转发规则,把数据包从入口转到出口。当然了,经过这种网络的流量是需要付费的,一般是Provider网络。

  • Peering是指互相交换路由信息和流量的网络,两个网络是对等关系,流量size相差不大,网络规模也差不多,互相免费放行对方过来的流量。

AS号(AS Number,ASN;AS Identity,ASID)是一个AS的标识,早期是16位的,但是和IPv4一样也不够用了,所以现在是32位的。不过并不是都可以使用的,有些是做了保留,专供文档使用,专供AS内部使用等。参考如下:

image.png

ASN的分发由IANA管理,由RIR分发。具体的IANA分配给各个RIR的可以参考:Autonomous System (AS) Numbers,而RIR分配的则需要参考各个RIR的网站了。应该记录在IRR的数据库中了。

各个厂商实现的BGP协议配置命令可能不同,当然这有可能是故意如此的,就是为了避免知识产权问题吧。具体就参考各个路由器系统软件版本吧。此处不做过多介绍了。

BGP

BGP(Border Gateway Protocol)协议是一种外部网关协议(Exterior Gateway Protocol,EGP),也是现在唯一在使用的EGP协议。它用于在不同的网络之间交换路由信息。BGP协议最新标准是RFC4271。RFC4276给出了BGP协议实现报告,RFC4277描述了使用BGP运维经验。当然这些都比较老旧了,学习这些可能比较过时。但是不失为一种全面了解BGP的途径。

BGP协议监听TCP 179端口。在更新路由时是增量更新,如果没有就不更新了。BGP又分为了Internal BGP和External BGP,也就是iBGP和eBGP,同时支持了IPv4和IPv6。

BGP speaker路由器互相之间学习路由,收到路由更新报文时进行路由优选。路由信息中包含path信息,然后将学习到的路由install到RIB(路由表)中,并且以best path路由生成FIB(转发表),将best path发送给BGP邻居。路由优选的过程受到路由策略的影响。BGP处理过程简略描述如下:

image.png

BGP目前携带的信息已经不仅仅局限于IP路由信息了,包括IPv4、IPv6、MPLS、SR、SRv6等所需的很多信息。这种多协议的支持可以参见RFC2545以及RFC4760的描述。IPv4和IPv6都有各自的RIB,每种协议也都有各自的策略。NEXTHOP地址需要使用和本路由器相同地址族的IP地址。

现在开始可以介绍EBGP和IBGP了。IBGP用于携带IP前缀以穿越ISP内部骨干网络或者携带ISP的customer的地址前缀。EBGP则用于和外部AS交换地址前缀并执行路由策略。所以实际上一个AS可以只运行IBGP和EBGP,用IBGP替代IGP,大概也是可行的。

运行EBGP路由器之间应该是直连的,而不应该在EBGP peer之间运行IGP。但是实际上这个只是推荐,因为BGP协议使用TCP,而且可以设置Multihop,这就有可能导致越过一些AS和不直接相连的AS进行建立邻居关系。

运行IBGP的路由器则是位于一个AS内部,不需要彼此直连,由IGP负责iBGP之间的通信连接。IBGP之间是一种full-mesh连接,也就是两两互联。IBGP的配置和EBGP的配置类似,只是localASN和remoteASN是相同的。

后面大概还是需要实操才行,但是不同的vendor提供的路由器命令不同,需要额外学习了。不过我一般使用的是FRR的bgpd实现,和Cisco类似,略有不同,搞几个虚拟机就能运行起来了。Cisco之类的,他们也有自己的模拟器,需要额外的下载安装。

参考