BGP — 边界网关协议
AS — 自治系统 — 由单一机构或者组织所管理的一些列IP网络及其设备所构成的集合原因:1,范围大,需要划分;2,自治管理
AS号 — 由16位二进制构成 — 0 – 65535,其中0和65535保留,1 – 65534;其中 64512 – 65534被称为私有AS号 — 目前也存在扩展版的AS号 — 32位二进制构成
目前市场上针对IPV4环境使用的BGP协议版本为BGPV4,目前市场上也已经存在BGPV4
+(MP – BGP — 可以支持多种地址族)协议。
AS之间不使用重发布获取路由信息的原因:1,选路不佳;2,ASBR设备的归属问题
BGP共享AS之间的路由信息的方式应该是直接传递路由信息而不是共享拓扑信息,因为拓扑信息一方面更新量更大,其次将暴露本AS的拓扑情况,所以,传递路由信息更加合理。
BGP被称为 — 无类别的路径矢量型协议无类别 — 传递的路由信息携带子网掩码
路径矢量 | 距离矢量 |
一个AS为一跳 | 一个路由器为一跳 |
不是算法概念,仅将IGP协议算好的路由信息传递出去,仅完成搬运工作。 | 是一个算法的概念,用来计算到达未知网段的路由信息 |
IGP — 选路佳,收敛快,占用资源小
EGP协议的关注点:
1,可控性 — AS之间需要传递大量的路由信息,所谓可控,就是可以方便的干涉选路,更容易做策略。
BGP为了保证可控性,直接舍弃了开销值。取而代之的是BGP定义了很多路径属性。
注意:BGP协议存在触发更新,但是,不存在周期更新,因为BGP需要更新的路由信息量太大,周期更新太浪费资源。
2,可靠性 — BGP协议为了保证可靠性,传输层直接选择使用TCP协议,使用179 号端口。
在IGP当中,没有使用TCP协议,主要是因为TCP协议传输效率较低,占用资源较大,只能实现单播,不能自动发线邻居关系。而在BGP中,为了保证可靠性,选择使用TCP。
在BGP中,是可以实现非直连建邻,BGP的非直连建邻是承载在IGP之上的。
AS内部 — IBGP对等体关系 — 如果建立对等体的路由器位于相同的AS中,则建立的是IBGP对等体关系
AS外部 — EBGP对等体关系 — 如果建立对等体的路由器位于不同的AS中,则建立的是EBGP对等体关系
注意:为了保证EBGP对等体关系之间使用直连建邻,我们将他们之间传递的数据报中TTL值设置为1,若EBGP对等体之间需要非直连建邻,则需要修改TTL 值。IBGP对等体之间,一般使用非直连建邻,所以TTL值设置为255。
3,AS-BY-AS — 将一个AS看作是一个单位。 — bgp不支持负载均衡,如果到达同一个目标网络存在多条路由信息时,则将只选择其中一条。
1,BGP的数据包在BGP中,因为使用TCP协议,需要建立点到点的连接,所以,无法通过组播或者广播来自动发现邻居,只能手工指定邻居关系。
Open报文 — 主要完成BGP对等体关系的建立,协商参数。
AS号 — 在创建邻居关系时,需要指定对等体设备所在的AS号,之后,将该参数通过OPEN报文携带,对端收到后,将该参数和本地所在AS号进行比对,一致,则可以正常建立对等体关系,不一致则对等体关系建立失败。
认证 — BGP也可以做认证,则认证口令将成为邻居关系建立的核查条件。
Router ID — 用于区分和标定不同的路由设备。OPEN报文中将携带本地的RID,之后对等体将核查该参数,需要确保RID不冲突,则需要保证和本地的RID不一致,一致则无法建立邻居关系。
BGP中的RID其生成方法和OSPF中的相同,可以手工配置,也可以自动生成。(自动生成规则 — 先,在本地环回接口的IP地址中取最大的最为RID,如果本地没有环回接口,则在所有物理接口的IP地址中取最大的作为RID。)
在指定邻居关系时,指定的IP地址作为后续的更新源IP,如果对等体发送的数据报中的源IP地址和给定的地址不同,则也将影响邻居关系的建立。
Holdtime — 保活时间 — 周期保活的失效判定时间 — 默认180S — 如果在保活时间内,没有收到Keeplive报文或者Update报文,则判定对方失效,将中断
BGP会话连接。 — 双方在发送OPEN报文中都需要携带保活时间,这个时间可以不同,但执行时必须相同,所以,如果双方的保活时间不同,则按照时间较短的执行。
包括设备是否支持路由刷新功能,也需要在OPEN报文中进行协商。
Keeplive报文 — 仅完成周期保活即可,周期发送时间为保活时间的1/3。默认为
60S。 — 除了保活之外,keeplive报文在收到对方发送的open报文时,将临时充当确认包的作用。 — BGP协议所有数据包传输的可靠性由TCP协议来保障,而此时的确
认,指的是确认对方OPEN报文中的参数,如果认可对方所携带的参数,则将发送 keeplive报文进行确认。
Update报文 — 真正携带路由信息的数据报。主要携带目标网络号及掩码信息和路径属性。 — 在UPDATE报文中,存在一个撤销路由条目的参数,可以将失效的路由信息放置其中,则对端将会删除失效的路由信息,而不需要带毒传输。
Notification报文 — BGP协议设计的一个告警机制。 — 在BGP协议运行的全过程中,如果发生错误导致对等体关系断开,则设备将在断开之前,发送该报文来报告错误原因。 Route-refresh报文 — 用于改变路由策略后请求对等体重新发送路由信息。改报文使用存在前置要求,即对等体双方路由设备必须都支持路由刷新功能。
2,BGP的状态机
BGP的状态机仅描述的是BGP对等体建立过程中的状态变化,而不包含数据收发过程。因为BGP中建立邻居关系和收发数据可以分开完成。
IDLE — 空闲状态 — 所有设备启动BGP进城后将首先进入空闲状态。
当手工指定邻居关系后,将会进入到一个检查环节,需要检查手工指定的IP地址在本地
路由表中是否可达,只有可达,才可以正常建立TCP的会话,如果不可达,则邻居关系建立失败,停留在IDLE状态。
如果检查成功,则将进入到Connect状态 — 连接状态。 —- 建立TCP会话连接的状态。
(注意,对等体关系指定是双向的,双方都将发起TCP会话连接请求,最终将会建立两个双向的TCP会话通道,只需要保留一个即可。所以,在之后发送的open报文中,将比较其中的RID参数,RID大的设备发起的TCP会话连接将被保留,RID小的发起的连接将被关闭。)
如果TCP会话连接失败,则将进入到Active状态 — 尝试重新建立TCP会连接(多次失败后,将超时,回退到空闲状态,如果成功,则进入到opensent状态。)
如果TCP会话连接成功,则将直接进入到opensent状态 — 发送open报文来协商参数,
建立对等体关系。同时,也将收到对方发来的open报文,则将查看其中的参数,如果参数没问题,则将发送keeplive报文进行确认。则将进入到openconfirm状态。 — 等待对方发送keeplive报文,确认本地参数。
如果,收到对方发送的keeplive报文,则代表双方open报文中的参数协商完成,则邻居关系建立成功,将进入到最终状态 — Established状态。
3,BGP的工作过程
1,基于IGP实现IP可达
2,指定邻居关系,邻居之间单播传输,通过三次握手,建立TCP会话通道。BGP之后所有的通信都将基于TCP会话通道来传输。包括提供传输的可靠性。
3,使用OPEN报文和Keeplive报文进行邻居关系的建立。OPEN报文用来携带建邻使用的参数,keeplive报文用于参数的确认。最终完成对等体关系的建立。生成邻居表。
4,使用update报文来共享路由信息。信息中将携带目标网络号,掩码及路径属性;之后,将发送以及收集到的路由信息记录在一张表中 — BGP表。
5,之后,将BGP表中最优的路由信息(通过路由属性选择的结果)加载到路由表中。
6,收敛完成后,将使用keeplive报文进行周期保活,默认的保活时间为180S,发送周期为60S。
7,如果出现错误,将使用notification报文进行告警。
8,若出现结构突变,则将使用update报进行触发更新。
4,BGP的路由黑洞问题
由于BGP协议可以非直连建邻,所以导致BGP协议可能出现跨越未运行BGP协议的设
备,导致BGP路由传递后,控制层面显示可达,但是,数据层面,流量流经未运行BGP协议的设备时,无法通过,形成路由黑洞。
解决方案:
1,让未运行BGP协议的设备运行BGP协议 — 问题,所有设备都需要运行BGP则都将承载大量的路由信息,造成设备成本增加。
2,在IGP协议中,重发布BGP协议的路由信息
3,MPLS
为了避免路由黑洞的情况,BGP提出了同步机制 — 即当一台路由器从自己的
IBGP对等体处学到一条BGP路由时,他将不能将该路由通告给自己的EBGP对等体关系。除非,他从自己IGP协议中也学习到这条路由信息。 — 华为设备默认关闭同步机制。
5,BGP的防环问题
BGP使用的防环手段 — 水平分割机制
EBGP的水平分割 — 针对EBGP对等体之间可能出现的环路问题所提供的解决方案
AS_PATH — 专门记录AS路径信息的一个属性。
所谓EBGP的水平分割,主要用于防止EBGP环境下的环路问题 — BGP协议在路由条目中将经过的AS号进行记录,生成一个属性 — AS_PATH(记载所有经过的AS 的AS号),之后,在接收到的路由条目中的AS_PATH属性中,如果存在本地的AS 号,则将拒绝学习该路由信息,防止路由回传,形成环路。 — AS_PATH属性也可以用于选路,其可以反应经过AS的数量。
IBGP的水平分割 — 针对IBGP对等体之间可能出现的环路问题所提供的解决方案
注意:因为BGP的AS-BY-AS的特性,要求其将一个AS看作是一个整体,所以,在默认情况下,AS内部传递的路由信息的路径属性是不会发生变化的。
所以,IBGP水平分割的做法是 — 要求当路由器从一个IBGP对等体出学习到某条BGP路由时,他将不再把这条路由信息通告给其他的IBGP对等体。
因为IBGP水平分割的限制,导致在IBGP对等体内部,BGP的路由信息只能传递一次,这样将会造成通信障碍。
可以通过建立全联的IBGP对等体关系来解决通信障碍。 — 1,资源占用将变大;2,将降低网络的可拓展性。
1,路由反射器;2,联邦 — 专门用来解决IBGP水平分割机制造成的通信障碍。
6,BGP的基本配置
对等体关系建立
1,启动BGP进程
[R1]bgp 1 — AS号 — 因为BGP设备只能存在在一个AS中,所以,BGP一台设备上只能启动一个进程
[R1-bgp]
2,配置RID
[R1-bgp]router-id 1.1.1.1
3,手动指定邻居关系
[R1-bgp]peer 12.0.0.2 as-number 2 — 注意,手工指定一定是双向的
[R2-bgp]peer 12.0.0.1 as-number 1
[R1]display bgp peer — 查看BGP邻居表
[r2-bgp]peer 3.3.3.3 as-number 2
[r2-bgp]peer 3.3.3.3 connect-interface LoopBack 0 — 给3.3.3.3发消息使用环回接口
的IP地址。 — 使用环回接口建立对等体关系一定需要执行这个命令,否则邻居关系将建立失败。
[r4-bgp]peer 5.5.5.5 ebgp-max-hop 2 — 修改EBGP对等体之间发送数据报中的TTL值
[r5-bgp]peer 4.4.4.4 ebgp-max-hop — 直接将ttl值修改为255
路由发布 — 对于BGP而言,只要是路由表中存在的路由信息,都可以发布 1)通过network命令发布路由
[R1-bgp]network 1.1.1.0 24 — 后面跟目标网络号及掩码信息
[R1]display bgp routing-table — 查看BGP表
NextHop — 谁发送的路由信息,则下一跳就写谁;如果是自己始发的,则下一跳写0.0.0.0
状态码
*– 代表可用。 — 所有设备收到路由条目后,首先会根据下一跳属性中的参数来查询本地路由表,查看该地址的可达性。如果,本地路由表中可达,则代表该路由信息可用;如果不可达,则该路由信息将不可用。 —- 如果该路由条目不可用,则将不会参与路由信息的优选。
>–代表优选。 —- 当收到多条到达相同网段的路由信息时,并且都可用,则将依据属性在其中选择最优的进行加表及传递。
1.1.1.0/24 EBGP 255 0 D 12.0.0.1 GigabitEthernet0/0/0 — 下一跳字段将直接使用下一跳属性中的地址,我们将BGP的路由信息的优先级设置为255。
i– 状态码为I,代表该路由信息是通过IBGP对等体学到的。
[r2-bgp]peer 3.3.3.3 next-hop-local — 将下一跳属性修改为自身
[r2-bgp]import-route ospf 1
Ogn — 起源码
一共存在三种 — I — 代表这条路由信息起源于AS内部使用network通告出来的。
— e — 代表来自于EGP协议。
— ? — 除了以上两种方式,其他方式获取的路由信息都是?
- 通过汇总发布 — 在BGP中我们将这样的操作成为路由聚合
- 重发布
- EBGP对等体之间的非直连建邻前提条件:建邻的IP之间必须可达,可以使用静态路由来保证。
- IBGP对等体之间环回接口建邻由于IBGP对等体之间处于同一个AS中,正常一个AS内部将存在大量的备份路径,若使用物理接口建立邻居关系,将浪费备份资源,所以建议使用环回接口来建立IBGP 对等体关系。
- EBGP直连邻居建立