一.BGP:边界网关路由协议
属于无类别的路径矢量协议;EGP协议中最流行的技术,工作在AS之间;
EGP—外部网关路由协议-BGP IGP内部网关路由协议-RIP OSPF EIGRP
AS—自治系统 全球网络—范围、管理域
AS号 – 标准 16位二进制构成 0-65535 其中1-64511公有 64512-65535私有
扩展 32位二进制构成
注意:BGP协议本身不产生路由,而是转发本地路由表中来自其他协议生成的路由条目;
AS之间正常存在大量的BGP邻居关系,且BGP协议不会计算最佳路径;因此在BGP协议中管理员需要进行策略来干涉选路;
IGP协议追求:1、无环(选路佳) 2、收敛快 3、占用资源少
EGP协议的追求1:可控性强(管理员可以方便进行策略干涉选路)
2、可靠性(BGP协议设备间需要交互大量的路由条目,但又不能选择周期更新来占用链路资源,故只能进行触发更新;且BGP协议工作环境中为节约成本,必然出现非直连需要建立邻居关系—单播邻居)--- 基于TCP工作 -三次握手四次断开 4种可靠传输机制 -- TCP只能基于单播工作
单播—需要IP可达—依赖IGP BGP承载于IGP之上
3、AS-BY-AS 以一个AS为一跳;
二.BGP特点
·无类别路径矢量 ,AS–BY–AS,路径矢量(一个AS为一跳)— 距离矢量(一个路由器为一跳)
·使用单播更新来发送所有信息;基于TCP 179端口工作
·增量更新–仅触发无周期
·具有丰富的属性来取代IGP中度量进行选路----多个参数控制协议
·可以在进项和出项对流量实施强大的策略–可控性
·默认不被用于负载均衡-----通过各种选路规则仅仅产生一条最佳路径
·BGP支持认证和聚合(汇总)
三.BGP的数据包
基于TCP的179端口工作;故BGP协议中所有的数据包均在TCP会话建立后基于TCP会话来传递及保障可靠性。BGP协议首先是通过TCP的三次握手来寻找邻居。BGP的运行是通过消息驱动的,共有Open、Update、Notification、Keepalive和Route-Refresh等5种消息类型。
Open消息:是TCP连接建立后发送的第一个消息,用于建立BGP邻居间的连接关系。正常仅收发一次,携带Route-id,hold time(默认3min)。
Update消息:用于在对等体之间交换路由器信息,携带路由条目(目标网络号+各种属性)。一条Update消息可以发布多条属性相同的可达路由信息,也可撤销多条不可达路由信息。
Keepalive消息:周期1min查询邻居关系是否存在;实际保活TCP会话。
Notification消息:当BGP检测到错误状态时,就向邻居发出Notification消息之后,之后BGP连接会立即终端。
Route-Refresh消息∶通过OPEN消息告知BGP Peer本地支持路由刷新能力。在所有BGP路由器使能Route-Refresh的情况下,如果BGP的入口路由策略发生了变化,本地BGP路由器会向对等体发布Route-Refresh消息,收到此消息的对等体会将其路由信息重新发给本地BGP路由器。这样,可以在不中断BGP连接的情况下,对BGP路由表进行动态刷新,并应用新的路由策略。
四、BGP的工作过程
1、配置完成后,邻居间单播TCP三次握手,目标端口179,建立TCP的会话;之后所有的BGP协议数据包基于该会话进行传输;
会话建立后,邻居间正常收发一次open报文建立BGP的邻居关系,生成邻居表;
BGP协议的open报文中将携带本地的RID—生成方式和OSPF一致;仅需要本地及本地所有邻居唯一即可;
邻居关系建立后,默认每1min,使用keeplive周期保活邻居关系(周期保活TCP会话)
2、邻居关系建立后,管理员选择性将本地路由表中通过任意来源获取的路由条目,向BGP协议中进行宣告;使用updata数据包进行邻居间路由共享;之后生成BGP表;--- 装载本地发出及接收到的所有路由条目;
默认将最优路径加载于路由表中(最优-仅仅基于BGP的选路规则,不一定为最佳路径;BGP默认不支持负载均衡)
3、收敛完成,仅keeplive周期保活即可;
4、若出现错误信息,邻居间将使用Notification报文进行报错操作
5、结构突变
1)新增 --- 本地使用updata向本地所有邻居告知,前提该路由不被已经发出的聚合路由包含
2)断开 --- 本地使用updata向本地所有邻居告知,前提该路由不被已经发出的聚合路由包含
只有到聚合条目中包含的所有明细路由均在本地失效,才告知邻居删除聚合条目
3)无法沟通 --- hold time为3min,连续3次未收到邻居的keeplive;断开邻居关系、TCP会话,删除从该邻居处学习到的所有路由;
五.BGP的宣告问题
- 在BGP协议中每台运行BGP的设备上,宣告本地直连路由
- 在BGP协议中运行BGP协议的设备来宣告,通过IGP学习到的,未运行BGP协议设备产生的路由;
在BGP协议中宣告本地路由表中路由条目时,将携带本地到达这些目标的IGP度量值;传递到BGP邻居处;其他AS设备便于选择离目标最近的EBGP邻居;
若一台BGP设备,通过IBGP邻居学习到一条路由,存在度量值;同时本地需要将这些路由传输给本地其他的EBGP邻居时,只能将度量取消,按0进行传输;导致选路参考值不优;
故,建议在一个AS中若需要BGP设备宣告某条路由,那么该AS内所有运行BGP协议的设备均宣告;--便于其他AS的BGP设备判断自己的EBGP邻居,那台离目标更近;
六.BGP的自动汇总问题
当代的路由器设备,默认就关闭了BGP的自动汇总功能;
自动汇总规则与正常BGP协议邻居共享的路由,或在BGP协议通过network宣告命令产生的路由条目无关;
仅针对从IGP重发布到BGP的路由条目;
BGP中的宣告可以理解为是逐条的重发布IGP路由到BGP;
BGP中中将IGP重发布到BGP,可以理解为是批量的将IGP路由宣告到BGP 协议;
但两种操作产生的路由条目其起源属性不同,宣告优于重发布;
在开启了自动汇总的前提下,重发布进入的路由将不携带子网掩码,按主类掩码进入;不携带本地到达目标的度量值,度量为0;若关闭自动汇总,进入路由将正常携带掩码,且携带度量;此时和宣告路由仅起源属性不同;故建议不要开启自动汇总;
既然在一个AS中建议所有运行BGP协议的设备均宣告相同路由,那么若进行重发布配置,也建议所有运行BGP协议的设备均进行重发布;
- BGP的认证 ---邻居间进行身份核实的方法;
[r1-bgp]peer 12.1.1.2 password cipher cisco123 邻居间需要秘钥一致,传递出去的秘钥必然被加密
七.BGP的聚合(汇总)
- 不是BGP的标准汇总思路,而是利用了BGP的宣告的特征来简化了汇总配置量;
宣告特征—本地路由表中任何方式产生的路由均可被BGP宣告;
不逐条宣告明细路由,仅在更新源BGP设备上配置一条到达聚合地址的空接口防环路由,然后将其宣告到BGP协议中;
在实际工程中,由于AS之间一定存在大量的EBGP邻居关系;因此仅汇总不能做到优选路径,必须在传递聚合条目的同时,再传递部分的明细路由来进行选路控制;
以上的汇总配置完成后,若还需要同时传输部分明细路由,再逐一宣告需要传递的明细路由即可; 2.标准的BGP聚合配置
3.路由传递干涉策略
八.有条件的打破IBGP水平分割
在一个AS中一台设备运行了BGP协议,那么正常应该都连接了其他的AS,存在EBGP邻居关系;又由于IBGP的水平分割规则,导致从外部学习到的路由传递给本地AS时,需要和本AS中所有运行BGP协议的设备逐一建立IBGP邻居关系;----两两间均为IBGP邻居关系,建立数量成指数上升;
所谓有条件的打破,是指在保障无环的前提下消除IBGP水平分割机制;--AS-BY-AY
【1】路由反射器 角色:RR反射器 客户端 非客户端
无论客户端还是非客户端都必须是RR的IBGP邻居; 由RR作为中心点与多个客户端、非客户端构成一个簇(组);在一个簇内存在一台RR和至少一台客户端;也可以一台RR和多个客户端、多个非客户端;或者一个RR与多个客户端,没有非客户端;
反射规则:不优路由不能被传递,自然也不能被反射;
- RR从一个EBGP邻居处学习到的路由,可以传输给客户端、非客户端,已经本地的其他EBGP邻居;
- RR从一个客户端学习到的路由,可以传递给本地其他的客户端、非客户端、其他的EBGP邻居;
- RR从一个非客户端学习到的路由,可以传递给本地的其他客户端、EBGP邻居;不能传递给其他的非客户端;
[r3-bgp]peer 2.2.2.2 reflect-client 邻居2.2.2.2成为本地的客户端,同时本地成为RR
【2】联邦-将一个AS,逻辑的分为多个小AS;对外依然遵循大AS号传递规则;
但小AS间为联邦内的EBGP邻居关系,可以像EBGP关系一样传递路由,但默认不对属性进行修改;
- 所有操作基于小AS号进行;
- AS内所有设备需要定义自己所在的大AS号
- 小AS间的BGP设备需要告知对端的小AS号