协议划分
能看到这里的我相信你们都知道我们路由协议的分类
距离矢量动态路由
链路状态动态路由协议
IGP动态路由:同一个自治系统(AS)内的动态路由协议
EGP动态路由 :运行在不同自治系统(AS)之间的动态路由协议
为什么使用BGP
首先我们要说清楚不同协议的优先
IGP: 在同一个AS之内
优点 周期性的更新来确保路由信息正确
快速收敛
采用了共同的度量值进行计算
提供有限的策略控制能力
缺点 可靠性不高容易出现路由环路
频繁的路由抖动
有限的邻居数量和路由数量
优先的路由条目策略控制(过滤 管理地址 Metric)
AS(Autonomous Systems)自治系统
AS: Autonomous System 自治系统 一组设备或一块区域设备的集合,使用一个数字来表示
早期自治系统使用16bit来标识 <1-65535> 私有<64512-65535>
现在的AS使用32bits来表示 <1-4294967295>
在思科系统当中我们可以这样写
R5(config)#router bgp ?
<1-4294967295> Autonomous system number
<1.0-XX.YY> Autonomous system number
我们可以使用点分写法(16位bits为一组数字)就不需要计很长的,但是个人还是倾向写全
BGP的特点:
BGP不再使用组播建立邻居,而是只能够使用单播(TCP)建立邻居,建立在TCP之上的BGP邻居
通过TCP三次握手建立端到端连接在发送BGP邻居
使用TCP179建立邻居管理
可以跟踪指定的路由根据他的震荡历史对路由条目进行衰减惩罚
对等题邻居数量数百个会话
路由数量可以达到70-80w条路由
丰富的路由属性
多种策略的管理出入方向两种管理基于路由的管理
BGP三张表
BGP邻居表
show ip bgp neighbor
show ip bgp summary
BGP数据库表(BGP表)
show ip bgp
BGP的数据包类型
Hello: 用于发现建立维护邻居关系
数据包中包含本设备的动态路由协议信息
hello包周期性发送
超过hold时间收不到hello包就认为邻居故障
Open: 建立邻居关系的时候发送的数据包,包含本路由器的BGP协议信息
Keepalive: 一旦建立好邻居关系
开始每隔60s向邻居发送一次保活包对方通过TCP ACK消息进行确认,Hold时间180s
Update: 通告BGP的路由条目更新(包含属性)
notification:当邻居关系故障或者有异常的时候将会自动发送通告消息
BGP的邻居关系
BGP的邻居关系称之为“BGP peer”(BGP对等体)
EBGP(External BGP):
两个不同AS建立的BGP邻居就称他为EBGP邻居关系
IBGP(Internal BGP):
相同AS之间建立的BGP邻居关系就是IBGP邻居关系
BGP的运行方式
通过直连建立BGP邻居关系
直连建立EBGP邻居关系
#R1
R1(config)#router bgp 100
R1(config-router)#neighbor 1.1.12.2 remote-as 200 //与AS200的邻居1.1.12.2建立BGP邻居关系
#R2
R2(config)#router bgp 200
R2(config-router)#neighbor 1.1.12.1 remote-as 100 //与AS100的邻居1.1.12.1建立BGP邻居关系
激活进程的时候会激活设备的TCP179端口指定邻居之后会向指定IP的179发送 TTL=1 的TCP数据包
我们现在来show ip bgp summary看看
R2(config-router)#do show ip bgp su
BGP router identifier 10.10.2.2, local AS number 200
BGP table version is 1, main routing table version 1
Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd
1.1.12.1 4 100 10 10 1 0 0 00:05:50 0
注意最后的这里只有是数字的时候BGP数字才是正常的(为0因为我们现在没有传递任何条目)当显示为单词时候才会是有问题的
直连建立IBGP邻居关系
很简单的!
#R1
R1(config)#router bgp 100
R1(config-router)#neighbor 1.1.12.2 remote-as 100 //与AS200的邻居1.1.12.2建立BGP邻居关系
#R2
R2(config)#router bgp 100
R2(config-router)#neighbor 1.1.12.1 remote-as 100 //与AS100的邻居1.1.12.1建立BGP邻居关系
激活进程的时候会激活设备的TCP179端口指定邻居之后会向指定IP的179发送 TTL=255 的TCP数据包
通过非直连建立BGP邻居关系
在Cisco IOS当中
建立过程中 默认路由 会被认为是可以发送TCP的条目
必须存在明细路由才可以主动建立BGP邻居关系,只能被动回复TCP连接消息
在HUAWEI VRP当中
相反,可以使用默认发送TCP消息建立邻居关系
非直连建立IBGP邻居
很简单就是在同AS范围内使用loopback或者其他直连地址建立BGP邻居,但需要注意需要保持线路联通状态(有IGP路由指向目的)
需要注意的是 BGP 采用TCP源认证 ,所以配置的时候需要加上
neighbor 1.2.3.4 update-source <interface>
并且这里只需要有一方认证成功就可以通过认证
非直连建立EBGP邻居
如果我们按当初一样建立EBGP邻居,你会发现一个问题,问题就是你查看邻居信息会变成IDLE
注意我们前面的一句话
激活进程的时候会激活设备的TCP179端口指定邻居之后会向指定IP的179发送 TTL=1 的TCP数据包
建立IBGP邻居关系的时候默认的关系为TTL=255
建立EBGP邻居关系建立时候的TTL=1
但是99%的情况都是直连建立EBGP邻居
当非直连EBGP关系的是很好,neighbor指定的地址如果不是路由器的直连地址,路由器会认为TTL=1不一定可以访问到neighbor指定的目标地址。直接不发送我们的TCP连接请求
我们有两种解决方法
1.关闭EBGP直连检测
neighbor 1.2.3.4 disable-connected-check
2.更改EBGP的TTL值
neighbor 1.2.3.4 ebgp-multihop <1-255>
如果后面空着将会默认最大值255
BGP router-id的选举方法
BGP router-id 的选举和OSPF相同:
有loopback选最大的loopback
没有的话选最大的物理接口地址
NetworkCLI
在bgp当中network命令行
network Specify a network to announce via BGP
网络:指定要通过 BGP 通告的网络
其他路由协议
network Enable routing on an IP network
网络 启用 IP 网络路由
这里是不同的,其他协议是激活运行bgp是只通告,这点需要分清楚
BGP邻居关系建立的过程
IDLE:一旦BGP在进程当中指定了BGP的IPv4地址邻居,就会开始向对方发起TCP连接请求,如果BGP连接过程当中任意一个步骤出现错误则都会回到IDLE状态
Connect:路由器在发送TCP连接,希望建立起端到端的连接如果TCP连接建立建立成功就会进入Active
Active:路由器是主动发起BGP连接请求的设备,如果TCP连接建立失败则卡在Active之后重试
OpenSent: 双方开始互相发送Open消息 包含AS hold时间 Router-id以及BGP所支持的功能有哪些
OpenConfirm: 相互之间确认对方的Open信息 如果确认无误就进入这个状态 然后开始发送第一个KeppAlive
Established: 当互相都受到了对方的KeppAlive,开始通过Update交换BGP条目交换之后进入Establish状态邻居关系建立成功

一旦确认本设备是主动建立邻居的一方,则Active建立BGP邻居关系 直接转入Active状态 并进行三次握手,如果连接成功则从Active转入Opensent
如果失败则从Active回到IDLE重新尝试主动建立BGP关系还是被动连接BGP关系重头开始建立邻居
本设备是被动的一方 收到了别的路由器向自己发送的TCP连接则静茹Connect状态一旦三次握手成功则直接转入Opensent握手失败则回到IDLE重头开始
Active timer(Active倒计时)
哪个设备先结束延时哪个设备主动发出TCP连接请求
Open active delayed 8192ms (35000ms max ,60% jitter)
//一旦指定了neighbor邻居关系进入IDLE马上开启Active Delay
show tcp brief //查看本机TCP连接状态
这个数值我们一般不手动更改
BGP的路由条目宣告
BGP可以将路由表中存在的路由通过network命令宣告进入数据库
关闭自动汇总
通过network命令行宣告匹配的路由条目,如果想要进入BGP数据库,宣告的需要和路由表中的明细路由网络号和子网掩码完全一致
开启自动汇总
通过network命令行宣告匹配的路由条目,如果想要进入BGP数据库,宣告的需要和路由表中的明细路由网络号和子网掩码完全一致
同时有一点不同的,我们可以宣告我们明细路由的主类路由进入我们的BGP数据库
BGP针对于最优路由的行为
1.BGP仅会向邻居通告最优路由(默认情况)
2.BGP仅会提交数据库中最优路由进入路由表(默认情况)
BGP满足最优路由的条件
1.路由器的入方向策略允许的路由
2.下一跳可达的BGP路由
3.满足BGP选路十三条的
4.满足BGP同步条件的BGP路由
BGP传递路由条目时下一跳是否改变
EBGP之间传递路由,默认下一跳改变
EBGP之间传递路由,默认下一跳不变
所以我们在边界机器上会设置
R2(config-router)#neighbor <x.x.x.x> next-hop-self
EBGP管理距离20
IBGP管理距离200
BGP路由黑洞
控制层面上没有运行某协议导致的条目确实,但是转发数据层面上,无法到达
然后解决路由黑洞
1.边界设备之间拉物理链路
2.tunnel
3.Full Mesh(IBGP)
4.重分布
5.联邦
6.路由反射器
7.MPLS
BGP的路由防环
EBGP的路由防环
AS-Path属性:记录了BGP路由从哪个路由器起源,经过了哪些AS传递
BGP的路由条目在AS离开的时候会加上所经过的as号
Network Next Hop Metric LocPrf Weight Path
*> 1.1.1.0/24 192.168.45.4 0 243 100 i
*> 5.5.5.0/24 0.0.0.0 0 32768 i
当收到了带有自己as的条目路由器会将其丢弃
IBGP的路由防环
IBGP水平分割:路由器从一个IBGP邻居学习到的条目不会通告给另一个IBGP邻居
已经通告IGP内部的IBGP逐级建立BGP邻居关系,解决了路由黑洞但是由于IBGP的水平分割导致BGP路由条目无法在IBGP之间传递
联邦:
第一个方法 绕
联邦 = 在大的AS中创建小的AS 在各个小的AS之间建立小的AS之间的EBGP邻居
R2(config-router)#bgp confederation identifier 243 //指定自己属于的联邦
bgp confederation peers 64544 //指定联邦的邻居as
联邦中的路由器建立EBGP邻居关系的时候将会使用大的AS号
联邦中的路由器建立IBGP邻居关系的时候将会使用小的AS号
路由反射器:
从路由反射器(RR)的一个客户端传递过来的一条路由
RR会传递给我的另一个反射簇的客户端
RR会传递给我的另一个EBGP邻居
RR不会传递给我的另外一个非客户端
如果路由器成为了路由反射器则关闭了IBGP的水平分割从IBGP邻居收到的路由可以通告给IBGP邻居(配置路由器成为路由反射器必须至少指定一个IBGP邻居作为客户端)从非客户端传递的IBGP条目不会传递给非客户端
neighbor 10.10.2.2 route-reflector-client //指定邻居为路由反射器的客户端,自己就会变为路由反射器
关闭水平分割后的防环措施
Originator ID : 反射之前的路由条目来源router-id
Client list : 记录下该路由已经经过了哪些路由反射器反射过了
BGP的路由属性
BGP路由属性的分类:
公认强制属性
传递路由条目的时候100%会携带的属性
AS-path,Next-hop…
公认自觉属性
在EBGP之间传递不包含该路由条目属性,在IBGP之间传递包含该路由条目的属性
Local Preference(本地优先级)
可选可传递属性
可选非传递属性
BGP的团体属性
可以限制BGP的路由条目传递范围
团体属性默认向邻居通告的时候不带属性 如果需要携带需要
neighbor x.x.x.x send-community
公有团体属性
Internet 该条目可以被任意的传递
no-advertise 该路由条目不会传递给任何的邻居传递
no-export 该条目不会传递出本AS(不会传递出联邦大的)
local-as 该条目不会传递出本AS(仅限当前AS号的范围)
gshut Graceful Shutdown 告知对方路由器自己要挂了
私有团体属性
BGP当中没有类似OSPF的Tag值,所有我们用私有的团体属性
set community {<1-4294967295>/<aa:nn>}
如果需要用community做策略 你可以用community list 列表
AS-Path
EBGP路由防环
经过自身的路由条目被重新丢到自己身上会被直接丢弃
通过AS-Path EBGP可以选出最优的路由