简介
我们将网络世界的物理设备抽象为三种:计算节点,交换节点和路由节点,路由节点之间也有数据通信,本文主要讲下路由协议BGP。
主要内容 基于 BGP漫谈 整理。
写文本的初衷是为了熟悉calico,因此会带有calico 相关内容。
路由协议划分
- AS(Autonomous system):自治系统,指在一个(有时是多个)组织管辖下的所有IP网络和路由器的全体(破除偏见:AS 不只有一个路由器)。对于互联网来说,一个AS是一个独立的整体网络。每个AS有自己唯一的编号,联通的AS号是9800。
- 内部网关协议IGP,在一个AS内部所使用的一种路由协议,代表的实现有RIP和OSPF(主要是OSPF)
- 外部网关协议EGP,在多个AS之间使用的一种路由协议,现在已经淘汰,被BGP取而代之。
- 但是BGP也可以应用在一个AS内部。因此BGP又可以分为IBGP(Interior BGP :同一个AS之间的连接)和EBGP(Exterior BGP:不同AS之间的BGP连接)。IGP的协议是针对同一个AS网络来设计的,一个自治网络的规模一般都不大,所以设计的时候就没有考虑大规模网络的情况。而当一个自治网络足够大时,OSPF存在性能瓶颈。BGP本身就是为了在Internet工作,其设计就是为了满足大型网络的要求,所以大型私有IP网络内部可以使用IBGP。
- 总的来说,这几类路由协议,小规模私有网络IGP,大规模私有网络IBGP,互联网EBGP。
BGP 的产生
- 背景:自己有一个局域网(命名为LAN—A)/云环境,一个路由器(命名为router-A)
-
若LAN—A里的主机想上外网/对外提供服务,向ISP(比如联通)申请一个公网ip,局域网主机可以通过router-A的NAT/PAT(Network / Port address translation)将自己的私网IP转换成这个公网IP,router-A上 将ISP router的地址设为默认路由。这样地址转换之后的IP包都发送到了ISP,进而发送到了互联网(这也是我们家用路由器能让家里的设备上网的原理),就可以上网了。粗略的说,此时的LAN-A只是 联通网络的一部分
- 原来公司的服务就是这么上网的
- NAT 最初是 路由器的功能,docker 只是借用
- 若提供的对外服务非常多,同时既想访问联通、又想访问电信网络,但联通没那么多公网ip,那么向IANA 申请自己的公网ip池,组建自己的AS。此时,联通或者电信怎么知道申请的公网IP是什么?router-A的默认路由该设置到联通的ISP路由器,还是电信的?
-
通过BGP,可以将router-A的路由信息发送到联通,电信,这样ISP就知道了改如何访问自己的公网ip,也就是说我们普通的使用者通过ISP,能访问到LAN-A的主机。另一方面,通过在LAN-A运行BGP服务,可以管理router-A的默认路由。此时的LAN-A已经是 跟联通电信平起平坐的大网络了 。当然,这只是理论上,国内公有云也是要租公网ip的。
tips
calico Router reflection(RR) 模式介绍及部署
同一个AS内,设备之间的邻居叫做IBGP(Interior BGP)邻居,不同AS间,设备之间的邻居叫做EBGP(Exterior BGP)邻居。运行BGP的设备叫做BGP发言者(BGP Speaker),相互之间称作BGP对等体(BGP peer)。AS 内部可以有多个 BGP speaker
AS 内部的 BGP Speaker 之间有两种互联方式(也就是ibgp):
- 全互联模式模式
- Router reflection(RR) 模式
BGP的邻居关系(或称通信对端/对等实体)是通过人工配置实现的,对等实体之间通过TCP(端口179)会话交互数据
网络中有一堆的bgp speaker
- a bgp speaker 需手动配置 与b speaker 配对,两者以bgp 协议沟通,不配置则不连通
- 当bgp 协议应用到AS 内的多个路由器/speaker 时,ebgp speaker 默认通告所有 路由 给 peer speaker 的规则就有问题。 在ibgp内,speaker a 连通b,但a不会 把知道的所有路由(主要是AS 内部的路由)都跟b 讲。
- route reflector 可以无条件转发路由,它 和 bgp peer 不是一个东西,甚至可以部署在一个完全独立的机器上,不跑任何服务,只跑route reflector。route reflector 以 bgp 协议与 speaker 沟通,可以视为一个特别的“bgp speaker”。
- 小结:无论情况多么复杂,本质都是一堆bgp speaker 在沟通路由,连通关系手动配置或通过route reflector,是否是同一个AS 影响了speaker 之间的通告规则。
-
现实世界的AS 划分一般人没机会操作,对于虚拟环境的AS 划分
- 一个主机(及其连接的所有虚拟机)一个AS,还是一个tor 一个AS,亦或整个数据中心都是一个AS。考量的点包括 物理环境是否支持,比如有的tor 交换机不支持bgp
- AS 内如何 bgp speaker 通过何种方式 通信
BGP在进行路由通告的时候,需要遵循以下原则:
- 多条路径时,BGP Speaker只选最优的给自己使用(负载均衡和FRR除外)。
- BGP Speaker只把自己使用的路由(最优路由)通告给相邻体。
- BGP Speaker从EBGP获得的路由会向自己所有BGP相邻体通告(包括EBGP和IBGP)。
- BGP Speaker从IBGP获得的路由不向自己的IBGP相邻体通告(反射器除外)。
- BGP Speaker从IBGP获得的路由是否通告给自己的EBGP相邻体要根据IGP和BGP同步的情况来决定。
- 当收到对端的refresh报文并且本端邻居支持refresh能力,BGP Speaker将把自己所 有BGP路由通告给对等体。
- GR过程中,主备倒换方在GR结束时BGP Speaker会把自己所有BGP路由通告给对等体。
这些规则的来龙去脉 参见 BGP Basics: Internal And External BGP
BGP 协议特点
- 应用层协议,基于tcp。其它路由协议还到不了传输层,传输机制及单次数据量都赶不上tcp。这是BGP 适合大规模网络环境的重要原因。
- BGP: 一个更像应用程序的路由协议BGP工作于TCP 179号端口,与其说是路由协议,不如说是一个应用程序,一个用来互相分发路由信息的应用程序。tcp 是两个主机的通信,我们将运行 BGP 服务的主机/路由器成为 BGP router,与之相对的tcp 对端称为bgp peer(可以看到,peer是一个相对概念)。每个BGP router在收到了peer传来的路由信息,会根据policy 丢弃或存储在自己的数据库。
- BGP 协议有点像http2协议,有Open、Update、Notification和Keepalive几种类型,每种类型有自己的格式。BGP Open 数据,由于是发送的第一个包,因此就是一些配置信息。包括自身的AS号,BGP连接的超时时间(hold time),BGP id。
- BGP连接后的首次Update会交换整个BGP route table,之后的Update只会发送变化了的路由信息。
- RIP 路由信息中的路径是路由器地址链 (router1 -> router3 -> router2),BGP 路由信息中的路径是AS 地址链(AS2 -> AS1)