1.BGP的概念
BGP:边界网关路由协议 -
典型的EGP协议,用于AS和AS之间;
协议更新中是否携带网络掩码:携带网络掩码
协议算法:无算法 ,规则 ,路径矢量型
协议封装:基于TCP封装 ,端口号 179
2.BGP的特性
特性:
1、可靠性--不能周期更新,增量更新;-TCP
2、可控性--该协议的真正意义,
在于AS间共享路由条目时更加方便快捷的干涉选路
3、AS-BY-AS 以一个AS为单位进行计数
IGP -hop-by-hop 一个路由器为一个单位
3.BGP特点
1.BGP版本 V1 V2 V3 V4 V4+ --MP-BGP(支持多种协议) |
2.BGP一般被用于大型网络,无类别路径矢量 -----距离矢量的升级版—AS-BY–AS |
3.BGP更新方式:触发更新 |
4.具有丰富的属性来取代IGP中度量进行选路----多个参数控制协议 |
5.默认不被用于负载均衡-----通过各种选路规则仅仅产生一条最佳路径 |
6.可以在进项和出项对流量实施强大的策略–可控性 |
7.BGP使用open报文建立邻居,使用keepalive 报文维持邻居关系 |
8.keepalive 周期间隔60s hold 时间为180s |
9.BGP支持路由聚合(汇总),支持VLSM CIDR |
10.BGP支持路由认证 |
11.BGP非常消耗路由器资源(一个路由器只能运行1个BGP进程) |
4.BGP AS号、邻居关系
AS自治系统--as编号
0-65535 1-64511公有
64512-65535私有
IBGP:内部BGP邻居关系,同一个AS之内建立BGP邻居
EBGP:外部BGP邻居关系,在不同AS之间建立BGP邻居
IBGP邻居学习到路由的AD: 200
EBGP邻居学习到路由的AD:20
Local BGP 路由=本地BGP路由值 200
5.BGP的数据包
open | Open包中存在hold time 和 RID;用于邻居关系建立;默认仅收发一次即可 |
keeplive | Keeplive 保活 周期60s 保活 TCP会话 hold time 180s |
update | 更新包 路由条目:目标网络号+属性 路由更新,用于通告路由;用于撤销路由路由通告,使用TCP 中的ACK进行确认 |
notification | Notification 报错包 错误信息出现时发送 |
BGP邻居关系建立的条件:1.AS号 2. BGP router-ID必须不一致3.认证一致
6.BGP的工作过程
1、启动配置完成后,本地和对端先单播进行TCP的三次握手,建立TCP的会话;
2、会话建立后,使用open报文进行邻居关系的建立,正常收发一次open报文即可;建立关系后生成邻居表;
3、邻居关系建立后,用户进行路由宣告;宣告配置完成后,BGP使用update包进行路由条目的传递---目标网络号+属性
4、本地接收到的所有路由条目均存储在BGP表中;--装载本地发出和接收到的所有路由
5、默认仅从BGP表中挑选一条最优路径到路由表内;
6、收敛完成,仅keeplive包继续周期保活TCP会话即可;
注:所有BGP协议的数据包均基于TCP的会话传递;TCP会保证这些数据包的可靠性-确认、重传、排序、流控(窗口机制)
7.结构突变
1、新增网段--BGP路由上出现了新的宣告路由,使用更新包更新即可
2、断开网段--BGP路由上出现断开路由,若本地给邻居发送的是汇总路由;那么只要所有明细没有全部断开,将不进行BGP更新;若明细全部消失,使用更新包告知即可;对端删除该信息即可;
3、无法沟通---hold time到时时,断开邻居关系,删除所有通过该邻居学习到的信息;
8.BGP的路由黑洞问题
黑洞产生的原因 :BGP可以非直连建邻,非直连传递路由信息;导致所有运行了BGP协议的路由器均学习到路由条目;但是数据层面流量在传输时所需要经过没有运行BGP协议的路由器时,将出现不可达现象;
解决方案:
1、物理链路全连或者vpn
2、邻居关系全连—所有设备运行BGP
3、将BGP的路由重发布IGP(LAB)
4、最佳解决方案---MPLS多协议标签交换
9.BGP的防环机制(水平分割机制)
1、ebgp邻居间的水平分割–防止ebgp邻居关系间的环路
AS-PASH 属性 ----记录所有经过的AS的编号;接收的条目中若存在本地的AS号,拒绝接收;2、IBGP水平分割
从一个IBGP邻居处学习到的路由条目,不得传递另一台IBGP邻居;
影响:该规则迫使同一个as内所有的BGP设备间建立邻居关系,关系建立数量成指数上升;
解决办法:故使用联邦、路由反射器来传递路由打破该规则;
10.BGP的基础配置
r1(config)#router bgp 1 | 启动时携带真实的as号,无多进程概念 |
r1(config-router)#bgp router-id 1.1.1.1 | 顺序:手工—环回接口最大地址—物理接口最大地址 |
BGP协议需要宣告的路由,不仅仅是本地的直连路由,而是本地路由表中通过所有方式产生的信息;
故在BGP协议中,邻居关系的建立与路由条目的宣告是分开进行;
【1】建立BGP的邻居关系
1)建立普通的EBGP邻居关系
2)建立IBGP邻居关系
由于IBGP邻居处于同一个as内,存在大量的可达路径;建议使用环回接口地址作为会话的源和目标地址,启用设备间所有可达链路;
r2(config-router)#neighbor 4.4.4.4 remote-as 2
切记环回建邻时,需要将更新源地址也修改为环回接口;
r2(config-router)#neighbor 4.4.4.4 update-source loopback 0
3)ebgp邻居间,存在多条链路
{1}先处理IP可达问题
r4(config)#ip route 5.5.5.0 255.255.255.0 45.1.1.2
r4(config)#ip route 5.5.5.0 255.255.255.0 54.1.1.2
{2}使用环回建立关系
r4(config)#router bgp 2
r4(config-router)#neighbor 5.5.5.5 remote-as 3
r4(config-router)#neighbor 5.5.5.5 update-source loopback 0
{3}修改TTL值
默认EBGP邻居间数据包的TTL值为1,ibgp间为255; 故若使用环回来建立ebgp邻居关系,必须修改TTL值
r4(config-router)#neighbor 5.5.5.5 ebgp-multihop ?
<1-255> maximum hop count
255
r4(config-router)#neighbor 5.5.5.5 ebgp-multihop
【2】查看BGP的邻居关系
建邻配置完成后,两端进行TCP的三次握手行为;建立TCP的会话
r1#show tcp brief
如果后边端口号黄标为179 则表示另一个IP向这个IP主动发起TCP会话
当TCP会话建立后,邻居间使用open报文来进行邻居关系;生成邻居表:
r1#show ip bgp neighbors 查看BGP的邻居关系–该表过大,不易查看
r1#show ip bgp summary 查看信息简报
State/PfxRcd状态处显示阿拉伯数字标识邻居关系已经建立,该数值标识通过该邻居学习到的路由条目数量;
【3】宣告路由
BGP协议不计算产生路由条目,而是将本地路由表中的路由条目共享到BGP来;这些路由是通过什么方式获取的不关注;
规则:宣告时所填写的条目内容必须和路由表中的记录完全一致
r1(config)#router bgp 1
r1(config-router)#network 1.1.1.0 mask 255.255.255.0
宣告条目后,本地将生成BGP表—本地收发的所有路由信息;
r1#show ip bgp 查看BGP表
状态注解:
* 标识条目可用--可以加载到路由表
不可用的情况:
1、*被r取代 ---不装载--本地路由表中通过其他更好的方法已经拥有了该路由
2、*被s取代 ---被抑制--被管理员策略了,该条目不得传输给邻居;
>标识条目是优秀的---可以加载路由表,可以传输给邻居
优的条件:1、同步问题---本地必须通过igp也学习到该条目,BGP才能优
该规则在高版本设备默认关闭
2、下一跳可达问题;AS-BY-AS--规定条目在一个AS内部传递,其属性不变化;
将路由条目传递给IBGP邻居时,下一跳默认不修改的;可能导致下一跳不可达
解决方法:
r2(config)#router bgp 2
r2(config-router)#neighbor 4.4.4.4 next-hop-self
将路由传递给邻居4.4.4.4时修改下一跳地址为本地
当条目传输给EBGP邻居时,进入下一个AS了,过程中修改属性(包括下一跳)
注:一条条目必须优且可用才能加表;只有优同时没有被抑制(人为)就可以传递;
i标识该条目通过IBGP邻居学习