一、bgp介绍
1.概念
边界网关协议BGP(Border Gateway Protocol)是一种实现自治系统AS之间的路由可达,并选择最佳路由的路径矢量路由协议。目前在IPV4环境下主要使用BGPV4,目前市场上也存BGPV4+,BGPV4+在BGPV4的基础上支持多个地址族,如IPv6。
BGP协议本身不产生路由,而是转发本地路由表中来自其他协议生成的路由条目;AS之间正常存在大量的BGP邻居关系,且BGP协议不会计算最佳路径;因此在BGP协议中管理员需要进行策略来干涉选路。
2.BGP和重发布的区别
重发布要求AS间需要有ASBR,ASBR同时具有两个AS的路由信息,通过ASBR实现路由共享;而BGP是没有ASBR的,由于AS是自治系统,如果有ASBR,那这个ASBR归谁管理?如果只归一方管理,那他可以通过路由策略提高自己AS的流量的转发速度,所以BGP是AS间各出一个或多个运行BGP的路由器,让这些运行BGP的路由器建立邻居关系后交换路由信息。
重发布在导入路由时会洗掉开销值,会造成选路不佳的问题,而BGP具备强大的路由策略,BGP为路由信息设计了路径属性,通过属性进行选路,是的选路过程更加灵活,可控性更高。
3.BGP特点总结
- 无类别路径矢量 -----距离矢量的升级版—AS–BY–AS
- 使用单播更新来发送所有信息;基于TCP 179端口工作
- 增量更新,仅触发更新,无周期更新
- 具有丰富的属性来取代IGP中度量进行选路,有多个参数控制协议
- 可以在进项和出项对流量实施强大的策略,可控性非常强大
- 默认不被用于负载均衡-----通过各种选路规则仅仅产生一条最佳路径
- BGP支持认证和聚合(将现有的IP地址合并成较大的、具有更多主机地址的路由域)
4.BGP的数据包
BGP协议中所有的数据包均需要在tcp会话建立后,基于TCP的会话来进行传输及可靠性的保障。
5.BGP的工作过程
- 配置完成后,邻居间单播TCP三次握手,目标端口179,建立TCP的会话;之后所有的BGP协议数据包基于该会话进行传输
- 会话建立后,邻居间正常收发一次open报文,并互发keeplive包进行确认建立BGP的邻居关系,并生成邻居表
- 邻居关系建立后,默认每1min,使用keeplive周期保活邻居关系,周期保活TCP会话
- 邻居关系建立后,管理员选择性将本地路由表中通过任意来源获取的路由条目,向BGP协议中进行宣告;使用updata数据包进行邻居间路由共享;之后生成BGP表;
- 本地对BGP表中的路由进行选择,默认将最优路径加载于路由表中(最优-仅仅基于BGP的选路规则,不一定为最佳路径;BGP默认不支持负载均衡)
- 若出现错误信息,邻居间将使用Notification报文进行报错操作
- 收敛完成,仅keeplive周期保活即可,默认保活时间为180S,周期发送时间为60S。
- 若发生结构突变,则将直接发送UPdate报文进行触发更新。
6.BGP中的关系
- 邻居---直连 因为BGP协议中存在非直连邻居的需求,故BGP邻居称为毗邻关系;
- EBGP邻居关系 ---- 外部BGP邻居关系,建邻的两台设备处于不同的AS中
- IBGP邻居关系 ---- 内部BGP邻居关系,建邻的两台设备处于相同的AS中
7.BGP基本配置
EBGP对等体直连建邻
启动BGP进程,1 指的时该路由器所在的AS号;因为一个路由只能属于一个AS中,所以一个路由器只能启动一个BGP进程
[r1]bgp 1
[r1-bgp]
配置RID,BGP要求邻居间的RID不能相同,可以手工配置,也可以自动获取
[r1-bgp]router-id 1.1.1.1
指定建邻的IP地址和邻居所在的AS的编号,指定邻居IP后,如果该邻居可达,则尝试建立TCP会话。
[r1-bgp]peer 12.0.0.2 as-number 2 -- #邻居关系指定是双向的
IBGP对等体环回建邻
由于,IBGP邻居处于同一个AS中,正常一个AS中存在大量的备份路径,若使用物理接口建立邻居关系,将浪费这些备份或者负载均衡的路径;故建议使用环回接口来进行IBGP对等体关系的建立。
[r2-bgp]peer 3.3.3.3 as-number 2 --- #指定建邻的IP地址和邻居所在的AS的编号
[r2-bgp]peer 3.3.3.3 connect-interface LoopBack 0 ---- #指定发送给邻居的数据包的源IP为该接口的IP
由于邻居在收到数据包时,会检测该包的源IP和本地指定的邻居IP是否相同,不同则无法建邻。所以一旦使用环回地址作为建邻地址,同时需要修改源IP地址未本地环回地址。
EBGP对等体环回建邻
- EBGP间使用环回建邻首先要有一条路由可以去往邻居的环回,一般我们使用静态路由’
[r1]ip route-static 2.2.2.2 32 12.1.1.2
- 因为EBGP对等体之间一般采用直连建邻的方法,所以,EBGP对等体之间的数据包中的TTL值设置为1,这意味着R1只能与R2的g 0/0/0口通信而不能与R2的环回通信,所以使用EBGP对等体环回建邻时需要修改数据报的TTL值。
[r1-bgp]peer 2.2.2.2 ebgp-max-hop 2 --- #将发往该邻居的数据包的ttl值修改为2
[r1-bgp]peer 2.2.2.2 ebgp-max-hop ---- #后面不加数字,相当于将TTL值改为最大值,255。
总结:再建立对等体关系时,建议EBGP对等体间直连建邻;IBGP对等体间建议使用环回接口进行建邻。