假设现在你要去某个比较远的地方,你打开地图软件搜索路径,往往会发现有多条路径可选。软件往往会自动按照一定的规则,比如最短时间规则,或者最少费用规则,提示你最优路径。
BGP就是用来干类似的事情的。虽然3层以下网络都是通的,但是究竟该走那条路,将数据从哪个网口发出去,除了需要知道每条路是否可达,还需要各条路的实时路况信息。
比如,一台服务器可能同时连接着电信的网和联通的网。当它需要和一个移动的用户通信的时候,到底走哪边更快更稳定呢?
可以看出这就不是一个局部的路径规划问题,而是互联网级别的全局路径规划,而且是动态的。因为网络上情况随时都在变化,就如同路网一样。不同的出发时间,最优路径都可能不同。
如果没有BGP这类协议的调停,最差的情况,甚至会出现环路。比如在上面那个例子当中,假设服务器是通过电信的网发出数据,但是电信的网(上的路由器)认为联通距离移动更近,就把数据通过电信和联通的边界路由扔给联通。而联通的路由收到之后认为其实电信的更近,就又扔回电信。
这种踢皮球的事情在我们生活当中大家是否有遇到呢?虽然每个部门都有自己的办事流程,很清晰地定义了,但是却因为缺少部门间协调,很多事情被搁置。
这种问题最终是如何解决的呢?就是各个相关部门在老大的监视下派代表协商,定出跨部门的沟通方法。
你可以看到,恰恰是因为“都是通的”,才会在宏观上造成这样的问题。
而BGP就是网络系统上的主机和路由器获知网络整体情况,进行跨AS自治域进行路由协调的一种协议。
(回到路网的比喻,BGP主要管的是跨省(AS自治域)高速公路的路况。省内的则由其它路由间协议调停,但是功能类似,管理的宏观层级不同而已)
大概十五年前,在福建某网络公司做过路由协议相关的东西,主要就是OSPF和BGP,我觉得目前的回答里,没有解释清楚一件事:设计BGP路由协议的目的是什么?
BGP主要用于AS(自治域)之间交换规模比较大的路由表,AS与AS之间相对独立。
划重点:相对独立、大量路由
1. 相对独立的BGP协议是去中心化的。
因为BGP交换的数据是AS之间的路由表,AS通常都是一个国家或者一个大型的运营商,AS之间的地位是对等的。一个AS是否要接入到另外一个AS,不需要更高层次的网络管理者的授权。
而OSPF/ISIS就不行,OSPF/ISIS是中心化的,OSPF需要area0交换数据,ISIS需要骨干区,这些都是中心化的配置,如果国际互联网用OSPF/ISIS,那么就意味着很多数据流量就不得不通过某个中心区域,如果中心区域故障,那么全球互联网就瘫痪了。
同时,OSPF和ISIS在一个area里都需要一个核心路由器,OSPF叫DR,ISIS叫DIS,尤其是在一个广播网络,DR/DIS非常重要,他们负责通告给其它路由器area里的路由表。有了核心路由器,OSPF/ISIS才能计算出当前arae的拓扑结构。
但BGP不行,如果BGP里有类似DR/DIS的角色,那么这个网络就不再是去中心化的了,DR/DIS的选举和变化会导致网络波动,对于BGP这种拥有大规模路由表(上万条)的协议来说,这种波动的影响会非常巨大。
去中心化意味着BGP的每个路由器,只能自己算自己的路由表,如果BGP也负责计算到peer端的路由,那么每个BGP路由器计算出来的结果是没办法统一的(没有DR/DIS),所以BGP为了去中心化,放弃了计算到peer路由的过程,把这个工作交给了IGP来实现。
题主的疑问,用去中心化就可以解释了。
2. IGP协议报文开销太大
BGP的报文格式中,是以属性为单位进行通告的,属性+路由条目*N的这种格式。
OSPF的LSA和ISIS的LSP都是带有一定链接状态的数据,格式相当于(路由条目+属性)*N的格式,如果路由表数量巨大,那么OSPF/ISIS需要非常多的通信才能完成路由交换。如果是外部路由,那么为了描述一条路由信息,OSPF/ISIS需要更长的报文。同时OSPF/ISIS,都存在老化时间,需要周期性的刷新,BGP不需要。
我曾经在十几年前,抓过某高校内部的OSPF路由表,就有500多百条,而一个国家级别的网络,路由表的规模可能是上万条的,全球互联网的路由表可能是几十万甚至上百万条的,这种情况下,使用OSPF/ISIS的话,性能就不太好了。
3. BGP不关注网络内部的可达性
这种设计主要是为了“过境流量”。举例:中国到美国的数据流量,主要走中美海底光缆。但如果这条光缆中断了,那么,还可以走中国-日本-美国;中国-欧洲-美国;中国-新加坡-美国……那么当数据流量在日本、欧洲、新加坡中转时,BGP协议不关注这些过境流量如何通过内部网络,换句话说,中国的路由器上,不需要知道日本、欧洲、新加坡的内部网络的路由,只需要知道边界在哪里,边界是否可达即可。
BGP的这种特性还可以用来做网络调优。购买VPS/虚拟主机服务的时候,肯定听说过BGP机房的说法,所谓的BGP机房,就是在机房的出口处,配置一台运行IBGP的路由器,直接连通到EBGP的出口,那么对于跨AS的访问,只需要一跳就可以进入另外一个AS,不需要在运营商网络内部绕路。
所以,用高速公路、主干道比喻都是不恰当的,主要原因是BGP需要去中心化,去中心化意味着对端不可信,也就无法通过BGP peer去计算AS之间的拓扑了。