也许错过了IGP,你还不珍惜BGP么?!

 

——通过前面的学习,大家对IGP内部网关路由协议,也就是工作在AS内的路由协议已经有了一定的认识,我们知道大...







通过前面的学习,大家对IGP内部网关路由协议,也就是工作在AS内的路由协议已经有了一定的认识,我们知道大型、高冗余性、多宿主的网络中,IGP的能力就非常有限,尤其是涉及到AS之间交互路由的时候,如果仍然使用IGP,就会非常困难。 那么,针对这种场景,有什么解决方案么?





数通基础系列—BGP协议基础

古人云:温故而知新。前面学了IGP,小编先带大家来回顾一下撒。

前面我们重点学习了距离矢量路由协议-RIP,以及链路状态路由协议-OSPF。这是两个常见的IGP内部网关路由协议,也就是工作在AS内的路由协议。IGP有如下特点:

  • 尽力完成快速收敛,在网络拓扑变更时能迅速响应
  • 执行拓扑发现(链路状态路由协议)
  • 需要周期性的更新来确保路由选择信息的精确性
  • 受同一个管理机构(如一家公司,或一家大型企业的某个部门)的控制及管理
  • 采取了共同的路由选择策略
  • 提供了优先的策略控制能力
  • 具备路由环路避免能力

然而,IGP工作的“着眼点”在AS(自治系统)内部。

它的主要职责就是负责AS内的路由发现和快速收敛,而且其承载的路由前缀就是本AS内的前缀,数量也不会非常庞大。但是如果在一个大型、高冗余性、多宿主的网络中,IGP的能力就非常有限了,尤其是涉及到AS之间交互路由的时候,如果仍然使用IGP,就会非常困难。



这里先介绍一下AS的概念,Autonomous system 自治系统,指的是在同一个组织管理下使用相同策略的设备的集合。我们可以简单的将AS理解为一个独立的机构或者企业,例如中国联通。另一个AS的例子是一家大型企业的网络,在网络的规划上将全球各个区域划分为一个个AS:中国区是一个AS,南美区是一个AS以此类推。

不同AS通过AS号区分,AS号取值范围1-65535,其中64512-65535是私有AS号,在组织内部可随意使用。IANA负责AS号的分发,如果要使用公有AS号,需要向IANA申请。


BGP,英文为Border Gateway Protocol,边界网关协议,是一种距离矢量路由协议,严格的说应该叫路径矢量路由协议,主要用于在AS之间传递路由信息,适用于大规模的网络环境,Internet的骨干网络正是得益于BGP才能承载如此大批量的路由前缀。总的来说,无论是内部网关路由协议,或者外部网关路由协议,最终的目的都是为了实现路由的互通,从而最终实现数据的互通。

都说BGP是个高富帅,它都有哪些特征,你知道么?

  • BGP使用TCP以确保可靠传输,TCP端口号179。
  • BGP路由器之间建立TCP连接,这些路由器称为BGP对等体也叫BGP邻居。有两种BGP邻居关系:eBGP邻居关系,以及iBGP邻居关系。BGP的邻居关系可以跨路由器建立,而不像OSPF及RIP那样,必须要求直连。
  • BGP对等体在邻居关系建立时交换整个BGP路由表。
  • 在邻居关系建立完成后,BGP路由器只发送增量更新或触发更新(不会周期性更新)。
  • BGP具有丰富的路径属性和强大的策略工具。
  • BGP能够承载大批量的路由前缀,用于大规模的网络中。



下面,我们来具体认识一下BGP的真身,看看报文长啥样。



BGP报文是被承载在TCP报文之上的,使用端口号179。




看过了报文,继续看看BGP的状态机,很关键的哦~~~




路由很关键的一个属性就是邻居关系,BGP的邻居关系怎么样,我们来一探究竟!

运行BGP的路由器被称为BGP speaker。BGP路由器之间要交互BGP路由,前提是要建立正常的BGP邻居关系。要建立正确的BGP邻居关系,首先BGP对等体之间要先建立TCP的连接,正是由于BGP是承载在TCP之上,因此BGP没有“邻居必须直连”的限制。有两种BGP邻居关系:

  • eBGP邻居(External BGP peer):位于不同AS的BGP路由器之间的BGP邻接关系。


在上图中,R1、R2、R3属于一个AS,AS号为100;R4属于另一个AS,AS号为200。由于R3及R4分别属于两个不同的AS,因此他们之间建立的BGP邻居关系就是eBGP邻居关系。

建立eBGP邻接关系,必须至少满足两个条件:

  • 两个eBGP邻居所属AS号不同
  • Peer命令所指定的IP地址要路由可达,并且TCP连接能够建立
  • iBGP邻居关系(Internal BGP peer):位于相同AS的BGP路由器之间的BGP邻接关系。


在上图中,R1、R2、R3属于同一个AS:100。
在AS100内,R1、R2、R3运行了一个IGP,也就是OSPF,运行OSPF的目的是为了让AS内的路由能够打通。另一方面,R1与R3之间建立一个BGP的邻居关系,由于R1及R3同属一个AS,因此他们俩之间建立的BGP连接是iBGP的邻居关系。值得注意的是,R2并没有运行BGP,R1-R3之间的BGP连接并非直连,这在BGP中是允许的,因为BGP是被承载在TCP之上的。
建立iBGP邻接关系,必须至少满足两个条件:

  • 两个IBGP邻居所属AS号相同
  • Peer命令所指定的IP地址要路由可达,并且TCP连接能够建立

到了这里也许你会问了,BGP是路径矢量协议,具体是什么意思呢?



BGP是一个路径矢量路由协议。在某些层面上,它与RIP非常相似,同样更新的是自己的路由表,同样有距离的概念,只不过这里的距离,与RIP的所谓跳数是完全不同的。BGP在将路由更新给邻居时,会给每条路由粘附许多路径属性(PathAttribute)。BGP定义了丰富的路径属性,使得BGP对路由的操控及策略部署异常的灵活和多样。其中一个非常重要的路径属性就是AS_PATH,称为AS列表,它用于描述一条路由已穿越的AS号。每条BGP路由都必须携带AS_PATH属性。

相比于IGP着眼于AS内,BGP的“心胸”可就开阔得多了,在BGP眼里,一跳,就是一个AS。在上图中,AS500内有条路由10.1.1.0/24,这条路由被AS500的边界路由器(在图中未画出)传递给了eBGP邻居R1及R3。那么在路由传出AS500的时候,边界路由器会给路由粘附上AS_PATH属性,值为500。现在R1收到了这条路由,又将路由更新给了自己的iBGP邻居R2,由于这条路由没有传出AS100,因此AS_PATH没有发生改变,值依然为500。接下去R2将路由传递给了eBGP邻居R5,由于这时路由要传出AS,因此R2为路由的AS_PATH插入一个100的号码(在列表的前面插入),这样一来R2传递给R5的BGP路由10.1.1.0/24其AS_PATH属性值就变成了100,500,这是一个列表。那么R5收到这条路由,它就知道,我要去往10.1.1.0/24,是需要先到AS100,然后再到AS500,只需要经过1跳AS。

另一方面,R5也从R4收到了关于10.1.1.0/24的BGP路由更新,AS_PATH为300200 500,那么R5就知道,从AS300也能到达10.1.1.0/24,不过需要经过2跳AS。

AS_PATH在BGP中是非常重要的路径属性。一方面能够用来作为BGP路由优选的依据,另一方面可用于在AS之间防止路由环路的发生。例如在上图中,R5同时收到两条关于10.1.1.0/24的路由,那么在不考虑其他因素的情况下,R5会优选AS_PATH更短的路由,因为“距离的AS跳数”更少。所以最终优选从R2走。

另外10.1.1.0/24被AS500的边界路由器更新给R1后,完全有可能从R2-R5-R4-R3再更新回来,这就形成了路由环路,庆幸的是有AS_PATH这个路径属性,如果AS500的边界路由器发现,eBGP邻居R3更新给它的路由AS_PATH属性值里出现了自己的AS号,也就是AS500,那么它就认为出现了环路,因此将忽略这个路由更新。


讲到这里,大家对BGP应该有了一定的认识了吧?好啦好啦,今天就先到这里,大家消化一下。小编带大家做个小结:

  • BGP是一个路径矢量路由协议,定义了丰富的路径属性,每条BGP路由都携带者路径属性。
  • AS_PATH是一个非常重要的路径属性,所有的BGP路由都必须携带这个属性。
  • BGP路由器不接受AS_PATH中包含其自身AS号的路由更新,因此AS_PATH可以在AS之间起到环路避免的作用。但是,当路由仅在AS内传递,也就是在iBGP邻居之间传递的时候,AS_PATH是不会发生改变的,因此在AS内部,防止路由环路则需要其他机制来执行:iBGP的水平分割原则(后面的学习课程中,小编会讲解)。
  • 在BGP的眼中,一跳就是一个AS,而不是像RIP那样一跳是一台路由器。AS_PATH也用于BGP进行路由的优选,在不考虑其他因素的情况下,AS_PATH越短的路由越优先。
还有福利哦,大家有关于数通的问题请直接在帖子下面留言吧~~~我们有数通专家团队在向您招手哦~~~别不好意思啦~~~

请允许我略有点自(chui)豪(niu)地概括一下:我们的帖子是多么好,再不点赞,您都看不下去了^_^




    关注 华为产品资料


微信扫一扫关注公众号

0 个评论

要回复文章请先登录注册