神秘的一天,文档君穿越到某忍者世界,发现硝烟四起,文档君四处打听原因。
原来起因是雨之国没有为“中兴文档”点亮星标⭐,错过了文档君的抽奖活动,一气之下雨之国在全国范围内屏蔽了“中兴文档”公众号,但没想到竟导致土之国、火之国、雷之国也无法看到文档君的新推文,忍界大战一触即发……
所以还不给文档君点亮星标⭐?
这听起来有点不可思议,为什么雨之国自己的屏蔽行为会影响到其它国家?
为了知道这其中的原理,我们就不得不提到边界网关协议——BGP了。
但是想好好聊聊BGP,就必须先简单回顾一下互联网是怎么诞生的~
一开始,电脑之间互相访问靠的是网线连接。这样,电脑能收到在网线上传输的所有数据。
但不是每台电脑都希望收到与自己无关的数据,所以需要“路由器”来将电脑们统一管理和分发,传送数据到指定的地方。
就像无形之中电脑被分了很多个“组”一样,这些“组”都使用相同的技术协议进行管理,我们将这样的“组”称之为“自治系统(AS)”。
自治系统,顾名思义,就是自己管理自己,一般来说就是由机构或者组织来统一管理自己内部的网络。现实当中,常见的自治系统有一所大学,一个企业或者一个公司个体。
为了便于理解,我们把自治系统这个概念放大到“忍者世界”的国家层面。
比如中兴文档的数据想要从兴之国送去土之国、雷之国、火之国。很明显要经过其它中间国家。
若数据想经过雨之国,那么雨之国可能会想:“凭什么让你的数据从我这里通过,我怎么知道你的数据里是不是藏着爆炸符呢?”
而且在实际中,每个自治系统都可能采用不同的数据传输手段,这样通信肯定会受到阻碍,又怎么会发展为现在的互联网呢?
为调节这种纷争,IANA这个机构就出现主持公道了!(IANA就是负责分配IP地址的那个源头机构)
IANA给每个国家(自治系统)都分配不重复的编号,这些编号可以理解为大家都遵守的和平协议的标识,而这个和平协议,就是BGP(Border Gateway Protocol,边界网关协议)。
如果每一个国家(自治系统)都使用BGP这个规则来进行数据的传输,那么路由器也再不需要把全世界的设备都记下来,只需要把国家(自治系统)的编号记录下来就可以啦!
那数据是如何在不同自治系统的路由器之间进行传输的呢?
那就要说到BGP的两个分类了:IBGP(Interior Border Gateway Protocol,内部边界网关协议)和EBGP(External Border Gateway Protocol,外部边界网关协议),那么他们分别是什么呢?文档君慢慢跟你道来~
IBGP(Internal BGP)和EBGP(External BGP)从字面意思来看Internal表示向内,External表示向外。
可能粉丝们有疑问BGP本来就是边界网关协议啊?不就是一种外部网关协议吗?为什么还要再区分内部和外部呢?
文档君继续举例子,这个问题可以理解为分工合作,EBGP就好比每个国家的外交部,外交部专门和其他国家打交道,获取信息后传送给国内的媒体再公布给社会。
相对地,IBGP就可以理解为国内大媒体,将外交部获得的消息传递到国内。
结合上面的例子,继续来说说EBGP和IBGP有哪些区别呢?
EBGP仅处理自治系统之间的数据传输,IBGP仅处理自治系统之中的数据传输,就像外交部和国内媒体分工非常明确。
IBGP从EBGP获得的自治系统路径,是不会进行更新或者修改的,如果要更新也得由EBGP去更新或者修改,IBGP内部不会独自修改。
正如国内媒体在得到外交部发布的国际新闻以后,不能自行编造新闻,必须如实传递,不然会使得国内民众的信息不对称。
EBGP是不需要进行全互联的。比如兴之国要和火之国通信,中间相隔其他国家,如果通过另外架设网络来绕过中间国家,显然是不划算的,也是不现实的。但是如果中间国家也有使用EBGP的话,就可以透过中间国家来传递数据了,这样就不需要进行全互联了。
这个时候可能又有同学疑惑,有了IBGP,是不是不需要IGP了呢?
当然不是!
IBGP与IGP重点不同,我们在学习IGP时,我们了解它有鼎鼎有名的几员大将,如OSPF、IS-IS、RIP……。IGP的重点在于自治网络中发现和计算路由,而IBGP在于控制整体路由的传播。
延用上文的例子。
IBGP负责国际新闻在国内的整体流通,就好比国内非常有话语权的大媒体,但是具体如何传递给民众并不负责。
而IGP就负责消息在国内各个小媒体上的传播,并尽力于如何让这些消息传播的更快更准确,所以IBGP和IGP缺一不可。
读到这里,大家已经可以分清了BGP家族中的EBGP,IBGP,IGP了吧!那我们再详细说说BGP是如何工作的?
这两个BGP建立会话的时候会有四种基本报文类型。
建立连接——Open报文:Open报文是TCP建立连接后发送的第一个报文,用来与其他设备或自治系统建立连接。
交换信息——Update报文:Update报文用于在设备或自治系统之间交换路由信息。
检测状态——Notifiaction报文:当BGP检测到错误状态时,就向对等体发出Notifiaction报文,之后BGP连接会自动中断。
保持连接——Keepalive报文:BGP会周期性地向设备或自治系统发出Keepalive消息,用来保持连接的有效性。
为方便执行会话,BGP将交互过程分为以下六种状态:
Idle(空闲):为初始状态,复位TCP连接的重连计时器(通常为60 s),准备发起TCP连接。路由器查找路由表,是否有到达邻居的路由。
Connect(连接):BGP发送第一个TCP连接,若收不到邻居发来的TCP应答报文,收不到应答的时间超过重连计时器规定的时间,就会重新发起TCP连接,并继续保持在Connect状态。
如果TCP连接成功,就转到Open sent状态。
如果TCP连接失败,就转为Active状态。
Active(行动):当可以发送TCP连接,也可以收到邻居的应答报文,但是依然无法建立起TCP三次握手,就会进入到此状态(TCP三次握手参见往期推文三次握手,四次挥手,原来TCP这么有礼貌!)。在此状态,BGP总是试图建立TCP连接。
如果TCP连接建立成功,就转到Open sent状态。
如果TCP连接建立失败,不停重新发起TCP连接,就退回到Connect状态,并在计时器结束后,转回Active状态。
Open sent(Open发送):TCP连接成功,发送第一个Open报文,并等待接收邻居的Open报文。
OPEN confirm(Open证实):表示收到邻居的Open报文,等待Keepalive报文或者Notifiaction报文,如果没有收到又会进入Active状态。
Established(已建立):最后BGP会话连接的时候就是Established状态了。之后可以通过Keepalive报文进行邻居保活。
其实说了这么多,BGP这个协议的核心也是让数据在跨域传输的时候选择最优的路径,要选择最优的路径,就必须考虑非常多的属性、时间等因素。
这里提及BGP最重要的6个属性:
本地偏好(local Perference)——越大越优
这个属性会发送给自治系统里所有的IBGP路由器,也就是这个属性在自治系统里使用,并且提供离开自治系统的最优路径,这个属性值同样是越大路径越优。
举个例子,选择市内交通工具的场景就类似于比较本地优先级~
MED——越小越优
说的属性就是MED( Multiple Exit Discriminator ,多出口鉴别器),如果你的相邻自治系统有两个或者多个BGP,路由和你的自治系统相连,这个时候MED属性就可以定义哪条路径更优,使用MED属性值来标识这些属性值越低,表示为更优的路径。
MED属性特点如下:
用于向外部对等体指出进入AS的首选路径。
仅在相邻两个AS之间传递。
与local Perference分别指引进、出AS的路径。
同理,选择市间交通工具的场景就类似于比较MED属性~
自治系统路径(AS path)——越少越优
AS path就是路由经过的所有AS的集合喔!
当前我们需要跨越AS进行通信的时候,将本地AS号添加到列表的最前面就可以啦!
AS path属性可以避免形成路由环路,还可以用于路由的选择和过滤。那么AS path属性是如何进行路由选择和过滤的呢?
优先级属性(origin):
IGP>EGP>INCOMPLETE
源属性是有优先级的喔!IGP优先级最高,EGP次之,Incomplete优先级最低。
NEXT HOP属性
下一跳属性定义了到达目的地下一跳的设备IP地址,是告诉别人去往目的地的下一个“坐标”。比如:当我们跳格子的时候,首先要看到下一个格子的位置。对于路由器来说,要首先确认下一个格子(设备)的IP地址,才可以发送数据到这个设备。
具体还可以分为以下情况:
COMMUNITY属性
团体属性根据某些特征对路由信息进行分类,与AS无关。常被用来简化路由策略的应用和降低维护管理的难度。
有了这些属性以后,我们就可以使用算法配合这些属性,算出最佳的路径。
当然BGP并不是一个自动配置的协议,而是需要手动配置的啊!
接下来我们就把话筒递给BGP,让他来介绍一下BGP有哪些新发展?
信息搜集有途径——BGP Link State
经过认真的深造学习,BGP不仅扩展上文提到的属性,还定义了新的link-state NLRI,一致通过了地址族信息AFI/SAFI为163888/71的封装标准,实现了网络拓扑收集的一种新方式——BGP-LS!使得拓扑的收集更为高效!
大型组网有对策——Segment Routing
网络安全有保障——BGP Flow Specification
DoS(Denial of Service)/DDos(Distributed Denail of Service)攻击对网络安全是一个重大威胁,它就像堵车一样会导致网络拥塞或者服务器CPU占用过高而无法为用户提供服务。而传统的流分类、重定向技术都有一定的缺陷。
BGP为了解决传统预防方法的缺陷,通过NLRI(Network Layer Reachability Information,网络层可达信息)属性携带流量匹配信息,AFI/SAFI为1/133,扩展了团体属性来携带数据流处理动作,比如对流量进行限速、引流、丢弃等。
极简演进有方向——EVPN
互联网业务高速发展,数据中心内服务器数量的大量增加,虚拟机的产生使得二层域内MAC数量剧增,传统二层以太网VPN技术VPLS不能满足建立超大型数据中心的需要。
想知道是哪五种新RT吗?在评论区留言喔~
回到文章开头的故事,雨之国为了屏蔽本国访问“中兴文档”,手动进行了BGP配置,使得经过雨之国访问“中兴文档”的流量都发送到一个无效的目的地。
但因为手滑,把通过雨之国可以访问“中兴文档”的路径信息发送给了相邻的自治系统,也就是别的国家还以为经过雨之国这可以访问“中兴文档”,结果不行,这才导致土之国、火之国、雷之国无法看到文档君的新推文……
在文档君的协调下,四国不仅理清了BGP、EBGP、IBGP、IGP的原理与关系,还了解了BGP的新发展,忍不住纷纷给文档君点亮星标⭐,表示再也不错过文档君的新推文啦~
想第一时间收到我们的更新吗?
只需两步,为文档君加上“爱你一万年”星标⭐!
没有星标,你爱的文档君就要跟你失联啦~
我们是一群平均从业年限5+的通信专业工程师。 关注我们,带你了解通信世界的精彩!