“网络那么大,一锅炖不下”。为了解决“大网”的问题,OSPF 和 IS-IS 都提出了 Area(分区)概念。但是这个 Area 指的是在1个 AS(Autonomous System,自治系统)内分成多个 Area。而多个 AS 之间该如何互通,OSPF、IS-IS 并没有任何解决方案。

我们知道,当前的 IGP(Interior Gateway Protocol,内部网关协议)事实上只包括 OSPF、IS-IS、RIP。前两者不能解决 AS 之间的互通,而RIP 更加无能无力(它连1个 AS 内的“大网”都无力解决,遑论 AS 之间)。

如此看来,如果单靠 IGP,那么世界上将形成一个个孤岛:任意2个 AS 之间都无法互联。

说明:关于 AS,请参见“7.6.1.1 自治系统简介”。

“世界那么空,我与谁相拥”。如果都是一个个孤岛,那么对于每一个 AS 而言,它的外部都是“空空的世界”。这显然是不能接受的,而且也与事实不符——这个世界早已经是互联互通的 Internet。

解决 AS 孤岛问题的方案就是 EGP(Exterior Gateway Protocol,外部网关协议)。

和 IGP 一样,EGP 也是一类协议的统称,它包括 EGP(这个时候,它是一个协议的名称,而不是一类协议的统称)和 BGP(Border Gateway Protocol,边界网关协议)。

由于 EGP(指的是独立一个协议)已经被淘汰,不再使用,所以现在一般来说,就直接以 BGP 来指代 EGP(指的是一类协议),或者说干脆就已经“忘记”了 EGP,就是只有 BGP。

那么 BGP 是如何解决 AS 孤岛的问题呢?这要从 BGP 的基本机制说起。

10.1 BGP 的基本机制

在谈 BGP 基本机制之前,我们首先要明确 BGP 所要解决的本质问题。

“大网”问题,永远都是那句话“网络那么大,一锅炖不下”。这里的网络,指的是“全世界”的3层网络(公网)。

为了解决“大网”问题,网络层提出了1个综合解决方案。

(1)将“全世界”的3层网络,分成不同的 AS

(2)每个 AS 内部的路由计算,相对独立。这样“全世界”1张“巨大”网就被分隔成多个“较大”网(AS),减少了路由的计算量

(3)每个“较大”网(AS)又被分隔成多个“小”网(Area),每个“小”网的路由计算相对独立,这样进一步减少了路由得计算量

(4)BGP 的目标是将多个“较大”网(AS)互联,也就是使得“全世界”这张“巨大”网能够互联

可以看到,BGP 是“全世界”这张“巨大”网互联的综合解决方案的一部分,它所解决的本质问题还是“大网”问题,只不过它的直接目标是“将多个 AS 互联”而已。

为了“互联多个 AS”,BGP 的方案是将一个 AS 内部的路由表项通告给另一个 AS,也就是 BGP 的基本机制:路由通告。

路由通告,形象地说,就是“我们不生产路由,我们只是路由的搬运工”。

BGP 的路由通告分为 eBGP 路由通告、iBGP 路由通告。“eBGP”、“iBGP”又是什么意思呢?这得先从 BGP 的相关概念说起。

10.1.1 BGP 的相关概念

BGP 只是一个协议,协议就是一张“纸”而已(不是有句话吗,叫撕毁协议,撕的就是“纸”啊)!所以说,要想让 BGP 发挥作用,还需要路由器——运行 BGP 协议的路由器。

1个运行 BGP 协议的路由器,叫作 BGP Speaker。这些 BGP Speakers,互相交互,从而达到搬运路由的目的。

不是任意两个 BGP Speaker 都能互相交互,互相搬运路由。两个 BGP Speaker 必须组成一对(BGP peer,BGP 对等体),才能互相交互、搬运路由。

通信世界里,有很多地方涉及到 peer 这个概念,有的对等体是自动发现的,有的对等体是人工配置。BGP 的对等体就是靠人工配置。BGP peer 的两端(两个路由器),互相是彼此的 BGP 邻居。

如果组成 BGP peer 的两个路由器,分属两个 AS,那么它们之间运行的的 BGP 就称作 eBGP(External Border Gateway Protocol);如果两个路由器,同属一个 AS,那么它们之间运行的 BGP 就称作 iBGP(Internal Border Gateway Protocol)。如图10-1所示。

图10-1中,R1 与 R3 之间、R2 与 R4 之间运行的是 iBGP,R1 与 R2 之间运行的是 eBGP。

eBGP 与 iBGP,只是在一些地方有所不同,其他绝大部分是一样的,我们会在本章后续的讲述中,逐步展开它们之间的异同。另外本章如无特别说明,所讲述的 BGP 内容对 eBGP、iBGP 都适用。

这里有一个疑问:我们一直说 BGP 是为了互联不同的 AS,那么 AS 内部为什么还要运行 BGP 协议,为什么还要有所谓的 iBGP 呢?这就与 BGP 的路由通告及场景有关。

10.1.2 BGP 的路由通告

BGP 路由通告,简单地说,就是“BGP peer,互相把自己知道的路由表信息,告诉对方”,如图10-2所示。

图10-2是以 eBGP 为例,示意了1个 BGP 的路由通告。R1 将自己路由表中的表项(分别是到达“11.1.1.0/24, 12.1.1.0/24, 13.1.1.0/24”网段的路由表项)通告给 R2。R2 也将自己路由表中的表项(分别是到达“21.1.1.0/24, 22.1.1.0/24, 23.1.1.0/24”网段的路由表项)通告给 R1。

那么,R1 和 R2 的“路由表”具体指的是什么呢?R1 和 R2 又是在什么时机向对端通告路由呢?

10.1.2.1 BGP 的路由表和路由通告时机

路由器中,每个协议都有自己的路由表,BGP 也不例外。BGP 通告的就是 BGP 路由表中的内容。

我们知道 IGP 的目标就是动态构建路由,也就是说 IGP 可以自动地将其路由表从“0”变成“1”,但是 BGP 该如何构建其路由表呢?

这是一个非常严峻的问题。因为 BGP 路由表的初始化是一张空表,如果 BGP 没有机制构建其路由表,那么 BGP 路由表将永远为空。这也就意味着 BGP 的路由通告毫无意义。

BGP 路由表的来源,并没有 IGP 那样“轰轰烈烈”的过程(比如 OSPF:邻居发现、邻接关系建立、链路状态泛洪,路由计算),它的来源有如下几种。

(1)人工输入:人工直接添加 BGP 路由表

(2)从 IGP 路由表引入:通过命令行配置了相关引入规则后,IGP 路由表中相应的路由表项会自动进入 BGP 路由表,以后 IGP 路由表发生变化,相应的表项也会自动进入 BGP 路由表

(3)从 EGP 路由导入(因为 EGP 路由协议已经废弃,所以这个可以忽略)

(4)IGP 路由重分布(redistribute)进入 BGP 路由

(5)BGP peer 的路由通告

以上的几种来源,如图10-3所示。

图10-3 BGP 路由表的构建

BGP 路由表有了内容以后,它就可以通告出去(图10-3的“输出”)。那么它何时向它的邻居(BGP peer 的另一端)通告路由呢?

有1个题目:在 BGP 协议中,每隔()时间向邻居发送路由通告

A. 30 秒

B. 60 秒

C. 120 秒

D. 无固定周期

这个题目的潜台词是:BGP 是在什么时机向邻居发送路由通告?

答案是:只要 BGP 路由表一变化,就向邻居发送路由通告!所以选 D!

以上所说的内容,对于 eBGP 和 iBGP 来说,两者都是一样的。但是涉及到具体通告的细节,两者又有所不同。

10.1.2.2 eBGP 的路由通告

BGP 路由表里有内容以后,BGP peer 就可以互相通告了。BGP 路由器收到邻居发过来的路由通告,会做2件事情(我们这里先忽略具体细节)。

(1)填入自己的路由表中

(2)再通告给它的另外的邻居

可以看到,BGP 路由器收到其邻居发送过来的路由通告,再通告给它的其它邻居,这其实就是相当于“泛洪”过程,如图10-4所示。

图10-4 eBGP 路由通告示意

图10-4表达的是1个 eBGP 通告示意。R1/R2、R3/R4、R4/R1 互相组成eBGP peer。R1 通告给 R2 的路由,R2 会继续通告给 R3,R3 也会继续通告给 R4,R4 也会通告给 R1。

需要说明的是,R1->R2->R3->R4,这样的通告链,是没有问题的。但是,R1->R2->R3->R4->R1 这个通告链,即 R1 的路由,绕了一圈,又通告给自己,这会形成路由环路。eBGP 解决“路由通告环路”的问题,我们放到10.3.2.4节讲述,这里暂且忽略。

全世界的 AS,就是通过 eBGP 的路由通告泛洪,从而知道了每一个 AS 内的路由,避免了一个个 AS 孤岛。

10.1.2.3 iBGP 的路由通告

eBGP 路由通告泛洪,连接了每一个 AS,但是还是无法做到让每个 AS 内的路由器都能连接“全世界”,如图10-5所示。

图10-5 如果没有 iBGP

图10-5中,R1 与 R2 是 BGP Speaker,互相组成 BGP peer,通过 eBGP 路由通告,都具有到达两个 AS 域的路由信息。但是,图10-5中的 R3、R4,假设没有运行 BGP 协议,那么它们只能知道各自域内的路由信息,也就是说,R3 与 R4 之间的路由其实是不通的。

如此一来,我们说“通过 eBGP 路由通告就能把一个个 AS 孤岛连起来”,还是远远不够的,这个“世界”并没有完全连通。

解决这个问题的方案有不少,其中对于 BGP 来说,就是 iBGP,其基本思路如下。

(1)AS 内的路由器也运行 BGP协议

(2)AS 内的 BGP Speaker 互相组成 BGP peer

(3)BGP peer 之间,互相进行路由通告

如此一来,对于 AS 内部的每一个路由器,它也能“感知”到“外面的世界”。

然而 ...... “理想很丰满,现实很骨感”,与 eBGP 相比,iBGP 的路由通告却有一个“要命”的特性。

eBGP 的路由通告规则是:一个路由器接到其邻居的路由通告后,可以再通告给它的另一个邻居,它的邻居可以再通告给它的邻居,这也就是所谓的“一传十十传百”的路由通告泛洪。

但是 iBGP 的路由通告只能是1跳,如图10-6所示。

图10-6 iBGP 路由通告只能通告1跳

图12中,R1/R6,R4/R5 是 eBGP peer,R1/R2,R2/R3,R3/R4,R4/R1 是 iBGP peer。

R6 通告给 R1 的路由,R1 可以通告给 R2(1跳),但是 R2 不会再通告给 R3(超过1跳)。

R6 通告给 R1 的路由,R1 可以通告给 R4(1跳),R4 可以通告给 R5(是 eBGP,不受 iBGP 1跳的限制),但是 R4 不会再通告给 R3(超过1跳)。

R5 通告给 R4 的路由,同理。

如此可以看到,R3 并没有 AS3 的路由,也没有 AS1 的路由,这也意味着 AS1 “外部”的世界,对于 R3 来说,还是“遥不可及”。这一切都是因为“iBGP 路由通告只能有1跳”这个“要命”的特性所造成的。

为了“理想的丰满”,必须解决“现实的骨感”,为此 BGP 提出了“路由反射器”和“BGP 联邦”等两个方案。这两个方案我们放到10.4节再讲述。这里暂且认为 iBGP 解决了它的问题,最终使得 AS 内的路由器都“知晓”了其他 AS 的路由。

“世界那么大,我想去看看”。BGP 通过 eBGP 的路由通告、iBGP 的路由通告(以及相应的附属解决方案),使得全世界的3层网络达到了互联互通。

说明:

(1)“iBGP 路由通告只能有1跳”,可以得出1个推论:1个 BGP 路由器从 iBGP 邻居收到的路由,不能再通告给它的其它 iBGP 邻居,只能再通告传给它的 eBGP 邻居。

(2)除了 iBGP 路由通告,还有一种方法可以将 AS 外部的路由“导入”到 AS 域内的路由器,那就是路由重分布(redistribute,笔者觉得这个应该翻译为“重发布”更好),即域内其他路由器还是只运行IGP 协议,eBGP Speaker 使用路由重分布的方法,将其自身的路由信息,告知 AS 域内的其他路由器。

10.1.3 BGP 机制小结

由于路由器“算力”的局限,全世界这么一张“巨大”的3层网络若想互联互通,必须要有一系列的综合解决方案。而这个综合解决方案的基本思路就是“分而治之”。

于是这张“巨大”的3层网络被分割成多个 AS,每个 AS 内部做相对独立的路由计算。但是“分而治之”解决了路由器的“算力”问题的同时,又引发了另一个问题:不同的 AS 之间如何“互联互通”?

BGP 的目标就是为了解决不同 AS 之间的互通问题,它的解决方案就是 BGP 路由通告。AS 域间的路由通告称为 eBGP 路由通告,AS 域内的路由通告称为 iBGP 路由通告。

eBGP 路由通告具有“一传十十传百”的泛洪特质,而 iBGP 的路由通告只能通告1跳。“泛洪”可以传遍“全”网络(AS 域间),但是却会引发通告环路;“1跳”不会引发通告环路,却无法传遍“全”网络(AS 域内)。为了解决这些问题,BGP 又推出了对应的解决方案。

如果抛开细节,我们可以看到:BGP 的基本机制就是“路由通告”。

那么 BGP 的路由通告具体通告的是什么内容呢?我们来看看 BGP 的报文格式。

BGP(1):BGP 的基本机制相关推荐

  1. BGP以及BGP对等体之间的交互原则

    BGP--边界网关协议 BGP概述 边界网关协议:是一种实现自治系统AS之间的路由可达并选择最佳路由矢量性协议.早期发布的三个版本分别是BGP-1(RFC1105).BGP-2(RFC1163)和BG ...

  2. BGP Confederation(BGP联盟)

    BGP Confederation(BGP联盟) 转载地址:http://hi.baidu.com/networkor/item/652e2729f37d50e851fd8724 为了解决由于从iBG ...

  3. BGP Confederation(BGP联邦)

    BGP Confederation(BGP联邦) 为了解决由于从iBGP邻居收到的路由不能转发给其它iBGP邻居的限制问题,除了可以使用在iBGP邻居之间创建全互联的邻居关系和使用BGPReflect ...

  4. 大型企业及运营商国际出口使用的BGP技术,BGP基础配置

    一.BGP基础 BGP属于边界网关协议,用于不同的AS之间,对于不同的运营商或企业可以使用不同的AS号,一般运营商配合MPLS常用的技术. 早些年是EGP属于外部网关协议,而EGP不能进行路由优选环路 ...

  5. 什么是BGP,BGP的优点有哪些?-Vecloud

    什么是BGP? 边界网关协议(BGP)是运行于 TCP 上的一种自治系统(AS)的路由协议,是唯一能够妥善处理不相关路由域间的多路连接的协议. 通俗点讲 中国电信 .中国联通.中国移动和一些拥有AS自 ...

  6. 【计算机网络】网络层 : BGP 协议 ( BGP 协议简介 | BGP 协议信息交换 | BGP 协议报文格式 | BGP-4 常用报文 | RIP 、OSPF、BGP 协议对比 )

    文章目录 一.路由选择协议分类 二.BGP 协议 简介 三.BGP 协议 信息交换过程 三.BGP 协议 报文格式 四.BGP 协议 特点 五.BGP-4 协议的 四种报文 六.RIP .OSPF.B ...

  7. BGP——路由抖动惩罚机制(讲解+配置)

    目录 --简介: --相关参数值: --配置: --简介: 只有从EBGP邻居收到的抖动路由才能执行处罚机制,可针对所有路由,也可以针对具体的路由,IBGP路由没有路由抖动惩罚机制 .为了抑制路由摆动 ...

  8. BGP——路由通告+IBGP水平分割机制+RR路由反射器(讲解+配置命令)

    目录 一.通告BGP路由: (1)BGP路由的产生: (2)需注意点[通过network通告的方式把IGP路由通告进BGP里面] (3)查看BGP数据库+相关属性讲解: (4)BGP下一跳变换解析: ...

  9. BGP 路由反射器详解,RR反射簇与RR的防环机制介绍与实验

    一.什么是RR RR(Route Reflector):路由反射器 由于水平分割的原因,为了保证AS内所有的BGP路由器都能学习到完整的BGP路由,就必须在AS内实现IBGP全互联. 然而实现IBGP ...

  10. 《CCIE路由和交换认证考试指南(第5版) (第2卷)》——1.2节构建BGP邻居关系...

    本节书摘来自异步社区<CCIE路由和交换认证考试指南(第5版) (第2卷)>一书中的第1章,第1.2节构建BGP邻居关系,作者 [美]那比克 科查理安(Narbik Kocharians) ...

最新文章

  1. YOLO系列综述:从V1到V4
  2. 数据库设计三大范式应用实例剖析(转载)
  3. Hadoop(19)-MapReduce框架原理-Combiner合并
  4. mlx rdma网卡指标参数简介
  5. android关于获取摄像头帧数据转成图片
  6. 《从零开始学keras之神经风格迁移
  7. php中中文字符串的截取和获取长度 mb_substr() mb_strlen()
  8. 一元n次多项式--模拟--洛谷P1067
  9. MySQL数据库性能优化方法,一篇给你总结了
  10. Web渗透测试-实战 方法 思路 总结
  11. IDEA项目启动配置
  12. 128、H3C交换机恢复出厂和各种基本配置
  13. python微信公众号开发音乐功能_python利用微信公众号实现报警功能
  14. 学习了罗昭锋的文献管理与信息分析的感受
  15. java递归1加到10,递归1-初识递归
  16. 51单片机wifi物联网的浇花控制系统设计
  17. LAC+CELLID定位手机位置
  18. VMware安装华为存储模拟器
  19. 计算机硬盘更换图解,轻松更换电脑硬盘无需重装系统的方法
  20. C# Roslyn编写脚本数据交互示例

热门文章

  1. http1 http2 http 3 区别
  2. 【MYSQL数据库综合练习】第一部分
  3. 蓝牙模块的配置(HC05):修改密码、修改模块名字、修改波特率。
  4. JSONObject、JSONArray
  5. MATLAB函数——atan(x)和atan2(x)的区别
  6. OpenGL学习笔记(一)绘制点线面及多面体
  7. python布尔类型(bool)
  8. dp与px的转换对照表
  9. Exchange控制台错误:WinRM客户端已将请求发送到HTTP服务器
  10. java调用有参方法_java 带参方法调用