BGP概述
●在考虑是否需要在互联网络设计中使用BGP时,首先应该考虑的就是发明外部路由协议的缘由
●外部路由协议的作用是在自治系统(也就是不同管理机构下的不同互联网络域)之间传递路由。
●如果是单一企业网,即使该网络大到拥有多个不同的路由域且归不同的本地管理机构管理,也完全可以通过内部路由协议提供的路由工具,以集权方式来实施路由策略。
●只有在互连各个独立的自治系统时,才需要使用BGP。
AS自治系统
●OSPF、IS-IS等IGP路由协议在组织机构网络内部广泛应用,随着网络规模扩大,网络中路由数量不断增长,IGP已无法管理大规模网络,AS的概念由此诞生。
●AS指的是在同一个组织管理下,使用统一选路策略的设备集合。
●不同AS通过AS号区分,AS号存在16bit、32bit两种表示方式。IANA负责AS号的分发。在长度为16bit的AS号表示方式中:64512-65534为私有AS号,在长度为32bit的AS号表示方式中:4200000000-4294967294为私有AS号。
使用BGP传递路由
●相较于传统的IGP协议:
○BGP基于TCP,只要能够建立TCP连接即可建立BGP。
○只传递路由信息,不会暴露AS内的拓扑信息。
○触发式更新,而不是进行周期性更新。
基本概念
●BGP也为每个BGP对等体建立一条唯一的、基于单播的连接。
●为了提高对等连接的可靠性,BGP使用TCP(端口179)作为底层传送机制,由于将确认、重传和序列化等工作交由TCP层处理,因而BGP的更新机制也得到了大大简化。
●BGP是一种距离矢量协议,为了与其他传统距离矢量协议相区别,也将BGP称为路径矢量(path vector)路由协议,位于OSI的第7层(应用层),只传递路由信息。
●与BGP路由相关联的AS号列表被称为AS_PATH。BGP根据AS_PATH来确定最短无环路AS间路径。
BGP特征
●无论是IBGP还是EBGP都可以通过直连接口或者是loopback接口建立邻居关系
●BGP使用TCP(端口号179)为传输层协议。路由器间的BGP会话基于TCP连接而建立。
●运行BGP的路由器被称为BGP发言者(BGP Speaker),或BGP路由器。
●两个建立BGP会话的路由器互为对等体(Peer),BGP对等体之间交换BGP路由表。
●BGP路由器只发送增量的BGP路由更新,或进行触发式更新(不会周期性更新)。
●BGP能够承载大批量的路由前缀,同时还拥有丰富的路由策略,可在大规模网络中应用。
BGP对等体关系
●BGP存在两种对等体关系类型:EBGP及IBGP:
○EBGP(External BGP):位于不同自治系统的BGP路由器之间的BGP对等体关系。两台路由器之间要建立EBGP对等体关系,必须满足两个条件:
■两个路由器所属AS不同(即AS号不同)。
■在配置EBGP时,Peer命令所指定的对等体IP地址要求路由可达,并且TCP连接能够正确建立。
●IBGP(Internal BGP):位于相同自治系统的BGP路由器之间的BGP邻接关系。
IBGP与EBGP之间的不同点:
- AS号,IBGP邻居关系之间的AS号相同,EBGP邻居间的AS号必须不同。
- IBGP常使用回环口进行邻居建立,而EBGP常使用物理接口进行邻居建立。为什么IBGP建立邻居关系经常使用回环口,而EBGP使用的是物理接口:
一般EBGP建立关系直接用直连的接口建立即可,因为一般EBGP传递只有一跳,也就是无论用物理接口或者回环口建立当链路一断开,连接始终会断开的,不存在一个冗余环境,只用物理接口建立即可。(多链路下建议用回环口)
而对于IBGP来说,在一个AS中一般是有多条链路互通的,当一条链路断开后,IGP路由重新收敛,但保证建立BGP邻居关系的回环口依然能够传递条目,保证了一个链路的冗余,并且回环口一般除了路由性能Down了,是不会down掉的,除非自己undo掉,很稳定。 - 下一跳是否修改,IBGP不会修改条目下一跳,EBGP传递时会修改下一跳为自己。
- TTL值(下一跳)不同,IBGP为255,EBGP为1。
- 条目转发机制,从IBGP对等体获得的BGP路由,只发给它的EBGP对等体,从EBGP对等体获得的BGP路由,发给他的EBGP和IBGP对等体。
- AS是否会添加,EBGP传递时需要添加自己的AS号,而IBGP之间传不会。
相同点:
- 当存在多条到达同一目的地址的有效路由时,BGP设备只将最优路由发布给对等体。
- 路由更新时,BGP路由设备只发送要更新的BGP路由,而不是发送整个路由表。
- 所有对等体发送的路由,BGP设备都会接收。
BGP5种报文类型
●BGP使用以下5种消息类型:Open(打开)消息,Keepalive(保持激活)消息,Update(更新)消息,Notification(通告)消息,Route-refresh路由刷新
Open(打开)消息
●TCP会话建立之后,两个邻居都要发送Open消息,每个邻居都利用该消息标识自己并指定其BGP操作参数。Open消息包括以下信息:
○BGP版本号(BGP version number)
○自治系统号(Autonomous system number):会话发起路由器的AS号,该消息可以确定该BGP会话是EBGP(与邻居的AS号不同)或IBGP(邻居的AS号相同)。
○保持时间(Hold time):该字段表示路由器在收到Keepalive消息或Update消息之前可以等待的最长时间(以秒为单位)
○BGP标识符(BGP identifier):该字段标识邻居的IP地址。
○可选参数(Optional parameters)
Keepalive(保活)消息
●缺省情况下,发送KeepAlive 的时间间隔为 60 秒,为Hold Time定时器的1/3,用于检测TCP连接是否正常。每次从邻居处接收到KeepAlive 报文将重置Hold Time定时器,如果Hold Time定时器超时,就认为对等体Down掉。
○Keepalive信息是不能够低于1s, 如果保持时间协商为0,那么不会发送Keepalive 消息。
在发送消息的时间间隔内,如果BGP发送过Update消息,就会抑制Keepalive消息的发送。
Update(更新)消息
●Update消息用于宣告可行路由、已撤销路由或两者。Update消息包括以下信息:
○NLRI(Network Layer Reachability Information,网络层可达性信息):该字段是一个或多个宣告IP地址前缀及其长度的(长度,前缀)二元组。
○路径属性(Path Attributes)
○已撤销路由(Withdrawn Routes)
Notification(通告)消息
●路由器只要检测到差错,就会发送Notification消息并关闭BGP连接。
Route-refresh消息
●当路由策略发生变化时,触发请求对等体重新通告路由
BGP6种状态机
Idle(空闲)状态
●BGP总是以Idle状态为起始点,该状态拒绝所有入站连接。
Connect(连接)状态
●该状态下,BGP进程一直等待TCP连接的完成。
●如果TCP连接建立成功,BGP进程将会向邻居发送Open消息并进入OpenSent(打开发送)状态。
●如果TCP连接建立不成功,BGP进程将继续侦听由邻居初始化的连接,重置连接重试定时器,并迁移到Active(激活)状态。
●如果连接重传定时器超时,BGP仍没有收到BGP对等体的响应(例如对端没有本端的路由),那么BGP继续尝试和其它BGP对等体进行TCP连接,停留在Connect状态。
Active(激活)状态
●该状态下,BGP进程会尝试与其邻居初始化TCP连接。
●如果TCP连接建立成功,BGP进程会清除连接重试定时器,完成初始化过程,向其邻居发送Open消息,并迁移到打开发送状态。
●保持定时器被设置为4分钟,如果依旧失败,则回退Connect状态
OpenSent(打开发送)状态
●该状态下,已经发送了Open消息,BGP会一直等待直至侦听到来自邻居的Open消息。
●接收到Open消息后,会检查该消息的每个字段,如果存在差错,则会发送Notification消息并迁移到空闲状态。
●如果接收到的Open消息没有差错,则发送Keepalive消息并设置Keepalive定时器。
OpenConfirm(打开确认)状态
●该状态下,BGP进程将等待Keepalive消息或Notification消息。
●如果接收到的是Keepalive消息,则迁移到Established(建立)状态
●如果接收到的是Notification消息或断开TCP连接请求,则迁移到空闲状态。
Established(建立)状态
●该状态下,BGP对等连接已完全建立,对等体之间可以相互交换Update、Keepalive和Notification消息。
●如果接收到的是Update或Keepalive消息,则重新启动保持定时器(如果协商好的保持时间不为0)
●如果接收到的是Notification消息,则迁移到空闲状态。
BGP对等体
[R3]dis bgp peer
BGP local router ID : 3.3.3.3
Local AS number : 100
Total number of peers : 2 Peers in established state : 2
Peer V AS MsgRcvd MsgSent OutQ Up/Down State Pre
fRcv
1.1.1.1 4 100 3 3 0 00:01:14 Established
0
10.1.34.4 4 200 2 3 0 00:00:05 Established
0
BGP邻居建立失败原因:
- 两边BGP peer地址不可达,一般是底层原因或者缺少可达的路由。
- 对等体AS配置错误。(AS号冲突)
- EBGP的跳数问题。(默认为1)
- 更新源问题。
- BGP的认证错误。
- Open 报文协商失败,Open报文需要协商BGP版本、Holdtime、 Router_ ID以及可选项参数(包括各种能力参数)等。
- BGP的Router_ ID冲突。
- 联盟与非联盟之间的BGP连接配置错误。
- 错误报文导致连接中断,比较少见的如BGP的Marker值出现错误。
BGP的工作原理和路由生成
工作原理:
- 建立邻居
- 传递路由
路由生成:
IBGP/EBGP路由默认优先级都为255
●BGP自身并不会发现并计算产生路由,BGP将IGP路由表(内部网关路由协议)中的路由注入到BGP路由表(外部网关路由协议)中,并通过Update报文传递给BGP对等体。
●BGP注入路由的方式有两种:
○Network
○import-route
●network方式是逐条注入
●import-route方式是批量注入
聚合路由
●BGP支持路由的手工聚合,在BGP配置视图中使用aggregate命令可以执行BGP路由手工聚合
●在BGP已经学习到相应的明细路由情况下,设备会向BGP注入指定的聚合路由。
通告原则
●BGP通过network、import-route、aggregate聚合方式生成BGP路由后,通过Update报文将BGP路由传递给对等体
●BGP通告遵循以下原则:
○只发布最优且有效路由。
○从EBGP对等体获取的路由,会发布给所有对等体。
○IBGP水平分割:从IBGP对等体获取的路由,不会发送给IBGP对等体。(内内不互传,目的:防止出现环路)
○BGP同步规则指的是:同步规则主要用于规避BGP路由黑洞问题。