前言:学思科技术我想说,浅尝辄止,不是天才千万别深钻。和我研究高等数学一样,越深入就会发现越多的问题与不合理之处。尤其对于IT界,算法的最终解释权还是掌握在老外手中,所以对于有些细节,我们"记住就好"。

本文主要关于BGP的逻辑而不是具体实验,所以我就随便配了几幅图,大多还是文字哈。由于BGP太过复杂,本文只是第一部介绍作品,以后会有更新!

BGP边界网关协议(Border Gateway Protocol)是互联网上很重要的一个高层协议,被广泛应用于运营商网络的自制系统之间,以及与园区网络之间,实现不同网络之间的"兼容"。

网关(gateway)英文译作"门口",就像海关一样,是整个系统通往外界的唯一出路(除非你是走私~)。在园区网中"网关"有不同的概念,网络也有不同层次之分。企业内部路由器可以作为本地介入网络(网段)的网关,而企业边界路由器可以作为整个自制网络的网关。

BGP边界网关协议就是这么一个凌驾于园区网络之上,实现与外部交流的机制。

正因为BGP工作在IGP之上,本质的不同导致一些细节上的重要区别:

1.IGP路由器邻居之间必须是直连网络;BGP邻居不一定。

2.IGP邻居自动发现;BGP邻居手动指定。

3.同一个进程号的IGP(如eigrp)网络是连续的,即任意两个eigrp路由器之间至少有一条拓扑路径上全是eigrp路由器;而BGP只用在边界路由器上。

4.未启动eigrp的路由器不会转发eigrp消息(阻断eigrp网络);而非BGP路由器被要求转发IGP的消息(正是这一点导致了路由黑洞,稍后说)。

5.IGP可以实现负载均衡;BGP默认不会。

除此之外,BGP与IGP之间是可以类比的!就像二维函数与三维函数之间的类比关系,这种不同网络层次的类比可以这样理解:

1.扩散能力:路由条目都能扩散到整个网络

2.一个BPG网络(联邦或互联网)是由若干个IGP网络组成。

3.IGP路由器身后是一个交换网络,BGP路由器身后是整个企业网(园区网),而企业网是由若干个交换网组成。

4.IGP网络中认为下一跳(或组成单元)是另一个路由器,BGP网络认为下一跳是下一个自制系统(正是这一点衍生出命令next-hop-self,稍后讲)。

由于国家管控严格,规定企业网络必须依赖互联网服务提供商(运营商ISP)接入互联网(世界各国都如此),运营商是互联网的骨干网之一,也是最为我们所熟知的电信、移动和联通。因此BGP与ISP密切相关。

当企业网只连接了一家运营商时,不需要启用BGP,CE端(client
edge)只要做一个缺省路由并推向内部路由器,PE端(provider
edge)做一个静态路由指向企业就好了。这种方案称为单宿(single homed)或双宿(dual
homed)。但大型公司总是采用多宿方案(multihomed),即连接到两家以上的运营商来提高冗余性。多宿解决方案中可以有多种内网配置方案,但大多数公司会采用这种方案:

在每个CE之间的中转路径上全启动BGP,相互指定ibgp
peer关系(并不是两两关联)。此时企业网(或者说每一个BGP路由器)成为互联网的一部分(连通性),然后任选一个BGP路由器通过底层动态路由协议将默认路由推向企业内部路由器,即default
information
originate这条命令。然后这个BGP路由器就会根据数据包的目的ip判断发给哪一个CE。(BGP也有默认信息源这条命令,旨在告诉其他AS,默认流量从我的AS走,但不实用)

这时会出现一个问题,即BGP的防环机制阻隔路由跟新的转发。因为BGP没有DUAL算法的防环性,也没有SPF算法的上帝视角,只采用了最原始的水平分割(split
horizon),即从一个ibgp peer收到的更新包不许转发给另一个ibgp
peer(与rip的水平分割不太一样)。为解决水平分割带来的问题,一个叫路由反射器(Route
Reflector,RR)的东西开发出来。

AS内BGP路径上可以将某个或某几个路由器设置成RR,剩下的成为RR的客户机(但并不知道自己是客户机)。说白了就是手动设置哪些路由器能转发从ibgp
peer发来的更新包。

另一种解决方案是不在CE的中转路径上启动BGP,只CE间指定邻居。这种方案也会带来一个问题,即路由黑洞。路由黑洞指ping不通路由表里的目标网络的现象。通常当路由表中的某一个条目在非邻居AS中时,往往ping不通。原因如下:

AS 200的中转路由器R3(无BGP)转发AS 100的某个路由条目给AS
300的BGP路由表,但自身路由表中却没有这个条目(不可达),因此R7 ping AS 100中的网段会失败。

可以用MPLS来解决这个问题,由于mpls技术很复杂需要另作文章,这里讲主要逻辑:标签匹配路由与标签交换,在AS
200中共享路由条目的标签(插入数据包),这样R3寻路时不用看路由表了。

然而BGP最主要是用在ISP分站之间,或者说是互联网的骨干协议。每一个AS或者联邦可以看成是互联网的结点。

每家ISP的BGP路由器都存有数十万条互联网的路由条目。通过类比IGP发现也是通过结点间交换路由更新信息而来。首先BGP需要知道所属AS的内部网段信息,这有两种途径:

1.宣告网络。不一定要宣告直连网络,只要IGP路由表中有的都可以宣告。

2.重分发。直接将IGP分发进BGP,一键到底比较方便。

然后与邻居AS交换路由信息表即可。

返回来谈谈BGP邻居的建立过程。命令行指定邻居地址后,路由器会查询路由表,找到这个地址后向它发送TCP连接,三次握手之后才开始发送与接收open消息(跨网段),之后完成建立。Open消息主要包括:router-id、认证口令、目的与源地址、跳数与AS号。

因为程序员逻辑,对ebgp peer发送hello包的TTL值为1,因为ebgp
peer一般都是直连,如果用直连接口地址的话没有问题;但如果想用对方的环回口作为peer地址则会出现问题:对方收到包后将其ttl值减1变成0后丢弃,不在转向自己的环回口,关系无法建立。Ebgp多跳命令由此产生,用于强制修改数据包ttl值(一般改为2)。

又因为程序员逻辑,前面也说过,BGP认为下一跳是下一个AS,路由更新起源于AS外的话,跟新包的源地址保持为AS外的地址,当此CE发给他的ibgp
peer后,peer认为下一跳在AS外不可达,又导致了中断。Ibgp下一跳命令由此产生:总是做在ibgp
peer之间。

BGP同步机制是一个无用的鸡肋(而且也默认关闭),旨在将BGP更新同步给内网所有路由器。但这样一来相当于所有路由器都启用了BGP,BGP还有什么意义呢?要知道企业内部路由器的性能是无法承受几十万条路由的。

BGP的选路机制。BGP
11条选路策略中最常用的是第四条:选择穿越自治系统数量最少的路径,也就是AS的"跳数"……

——第一部完

【★】深入BGP原理和思想【第一部】的更多相关文章

  1. 【★】深入BGP原理和思想【第…

    前言:学思科技术我想说,浅尝辄止,不是天才千万别深钻.和我研究高等数学一样,越深入就会发现越多的问题与不合理之处.尤其对于IT界,算法的最终解释权还是掌握在老外手中,所以对于有些细节,我们" ...

  2. 【★】深入BGP原理和思想【第…

    前言:学思科技术我想说,浅尝辄止,不是天才千万别深钻.和我研究高等数学一样,越深入就会发现越多的问题与不合理之处.尤其对于IT界,算法的最终解释权还是掌握在老外手中,所以对于有些细节,我们" ...

  3. 使用Cookie实现跨域单点登录的原理

    对于构建分布式系统来说业务功能的物理部署会随着新业务模块的增加而增加或改变物理部署的位置.而每个用户都有统一的帐号作为我们登录系统时的一个认证.当新业务或子系统部署在不同的物理机上,我们去访问不同的业 ...

  4. Orchard工作原理

    概述 本文翻译仅供学习之用,了解Orchard工作原理设计思想.技术点及关键词,如有缺漏请不吝指正.鉴于能力有限定有诸多曲解或不完整的地方,请海涵.不定时完善整理. CMS不像常规的web程序,它更像 ...

  5. Terracotta设计原理分析--(部分内容来自官方描述)

    因为工作中历史产品采用了terracotta作为分布式缓存线性扩展平台,因此不得不提前对其原理做了相关了解,当然其中很多的设计思想和oracle.memcached的设计相似,但也有自己的亮点,那就是 ...

  6. 如何用快排思想在O(n)内查找第K大元素--极客时间王争《数据结构和算法之美》

    前言 半年前在极客时间订阅了王争的<数据结构和算法之美>,现在决定认真去看看.看到如何用快排思想在O(n)内查找第K大元素这一章节时发现王争对归并和快排的理解非常透彻,讲得也非常好,所以想 ...

  7. skiplist(跳表)的原理及JAVA实现

    前记 最近在看Redis,之间就尝试用sortedSet用在实现排行榜的项目,那么sortedSet底层是什么结构呢? "Redis sorted set的内部使用HashMap和跳跃表(S ...

  8. 锐速与BBR的原理简单解析

    锐速与BBR的原理简单解析  4 前言 昨天,有一位朋友在我的文章下留言说,锐速和BBR不都是一样,是拥塞算法嘛.因为这方面需要讲的东西比较多,所以我还是专门水一篇文章吧. 锐速 参考资料: http ...

  9. 深入浅出 Java Concurrency (35): 线程池 part 8 线程池的实现及原理 (3)[转]

    线程池任务执行结果 这一节来探讨下线程池中任务执行的结果以及如何阻塞线程.取消任务等等. 1 package info.imxylz.study.concurrency.future;2 3 publ ...

随机推荐

  1. 解决 apache poi 转换 word(docx) 文件到 html 文件表格没边框的问题

    一.起因 这几天在做电子签章问题,要通过替换docx文件中的占位符生成包含业务数据的合同数据,再转换成html文件,转换成pdf文件.遇到的问题是:通过apache poi转换docx到html时,原 ...

  2. X-NUCA 2017 web专题赛训练题 阳光总在风雨后和default wp

     0X0.前言 X-NUCA 2017来了,想起2016 web专题赛,题目都打不开,希望这次主办方能够搞好点吧!还没开赛,依照惯例会有赛前指导,放一些训练题让CTFer们好感受一下题目. 题目有一大 ...

  3. 175. Combine Two Tables【LeetCode】-LEFT JON 和RIGHT JOIN,两张表关联查询-java -sql入门

    Table: Person +-------------+---------+ | Column Name | Type | +-------------+---------+ | PersonId ...

  4. mybatis 详解(十一)------ mybatis和spring整合

    想要整合mybatis和spring,那么我们首先要知道这两个框架是干嘛的,对于mybatis我们前面几篇博客已经有了很详细的介绍,我们通过加载mybatis-configuration.xml 文件 ...

  5. VS2013 C++代码运行问题

    VS2013(工具集V120)下编译的C++代码,在win7运行错误,提示缺少msvcr230.dll,但是添加dll之后无效. 解决办法: 官方下载VS2013的C++运行库: vcredist_x ...

  6. 一步一步学多线程-ThreadLocal源码解析

    上网查看了很多篇ThreadLocal的原理的博客,上来都是文字一大堆,费劲看了半天,大脑中也没有一个模型,想着要是能够有一张图明确表示出来ThreadLocal的设计该多好,所以就自己看了源码,画了 ...

  7. 利用angular打造管理系统页面

    1 创建一个新的angular应用 ng new adminSystem 2 利用WebStorm打开adminSystem应用 3 借助AdminLTE这个开源项目来辅助开发 AdminLTE项目: ...

  8. 第10天:CSS初始化操作

    在写页面过程中,每个浏览器都会有默认样式,为了避免浏览器的样式兼容问题,我们会在样式开始部分对常用标签进行重置样式.这样我们在写样式时,就不会有误差.常用的CSS标签初始化如下: @charset & ...

  9. 如何改变Myeclipse编辑区背景色(转)

    编辑窗口右键单击-->Preferences-->General加号-->Editors加号-->点Text Editors字样-->右下窗口选Backgroud col ...

  10. Vim入门基础

    公司新员工学习有用到,Vim官网的手册又太大而全,而网上各方资料要么不全面,要么不够基础.在网上搜集各方资料,按照自己的框架整理一份Vim入门基础教程,分享出来.特点是偏向基础,但对入门者来说足够全面 ...