BGP协议

版权声明:本文为博主学习笔记。 https://blog.csdn.net/qq_41804366/article/details/89359789

BGP:边界网关路由协议

一. 定义
二. 特点
三. BGP数据包
四. BGP工作过程
五. BGP名词
六. BGP路由黑洞问题
七. BGP的破环机制
八、配置
九、BGP的宣告问题
十、关闭BGP自动汇总问题
十一、BGP的聚合
十二、BGP在MA网络中的下一跳问题

一、定义
BGP:边界网关路由协议,又称为无类别路径矢量路由协议,是典型的EGP协议,作用于AS与AS之间。
自治系统(AS):由同一个技术管理机构管理,使用同一管理控制和选路策略的一些路由器的集合。AS编号由英特网注册机构统一管理分配,范围是1-65535,其中1-64511是注册的英特网编号,64512-65535是私有的网络编号。
IGP协议工作追求:
1:、收敛快
2、占用资源少
3、选路佳(无环)
EGP协议工作追求:
1、可靠性
2、可控性
3、AS-BY-AS

二、BGP特点
1、无类别路径协议,是距离矢量的升级版(路径矢量和距离矢量均选择共享路由表来收敛,但距离矢量基于一台路由器为一跳,路径矢量基于一个AS为一跳)
2、使用单播更新来发送所有信息,基于TCP 179端口工作
3、增量更新–仅触发无周期
4、具有丰富的属性来取代IGP中度量进行选路----多个参数控制协议
5、可以在进项和出项对流量实施强大的策略–可控性
6、默认不被用于负载均衡-----通过各种选路规则仅仅产生一条最佳路径
7、BGP支持认证和聚合(汇总,一般是往超网汇总所以称为聚合)
8、BGP协议不生产路由,只是路由的搬运工

三、BGP的数据包
BGP所有的数据均基于TCP会话传递,由TCP来进行邻居的发现及所有数据包的ACK
open:存在hold time 和 RID(生成方式和OSPF一致);用于邻居关系建立;默认仅收发一次即可;邻居发现是由TCP三次握手完成的,包活不用open包
Keeplive :保活包 ,周期1min保活 TCP会话,hold time 180s;实际是包活TCP的会话
update:更新包—增量更新;路由信息==目标网络号+属性
notificatio:报错包,检测到BGP路由出现错误时发送,发出该消息后BGP连接被立即关闭

四、BGP的工作过程
1、启动配置完成后,本地和对端先单播进行TCP的三次握手,建立TCP的会话。
2、会话建立后,使用open报文进行邻居关系的建立,正常收发一次open报文即可;建立关系后生成邻居表
3、邻居关系建立后,用户进行路由宣告;宣告配置完成后,BGP使用update包进行路由条目的传递—目标网络号+属性
4、本地接收到的所有路由条目均存储在BGP表中;–装载本地发出和接收到的所有路由。
5、默认仅从BGP表中挑选一条最优路径到路由表内。
6、收敛完成,仅keeplive包继续周期保活TCP会话即可。
注:所有BGP协议的数据包均基于TCP的会话传递;TCP会保证这些数据包的可靠性-确认、重传、排序、流控(窗口机制)
若结构突变:
1、新增网段–BGP路由上出现了新的宣告路由,使用更新包更新即可
2、断开网段–BGP路由上出现断开路由,若本地给邻居发送的是汇总路由;那么只要所有明细没有全部断开,将不进行BGP更新;若明细全部消失,使用更新包告知即可;对端删除该信息即可;
3、无法沟通—hold time到时时,断开邻居关系,删除所有通过该邻居学习到的信息;

五、BGP名词注解
1、对等体(peer),邻居是直连建立关系,对等体非直连建立邻居关系,故把邻居称为对等体peer
2、EBGP邻居关系,不同AS间设备建立的邻居关系,通过EBGP邻居学习的路由,管理距离为20(别人传的不用算路)
3、IBGP邻居关系,同一AS内设备的邻居关系 ,通过IBGP邻居学习到的路由,管理距离200(IBGP邻居学习的所以要算路)

六、BGP的路由黑洞
因为考虑成本和实用性,正常在一个AS内部不是所有的设备都运行BGP协议,故将出现路由可达,但实际数据在传输时,经过中间未运行BGP协议的路由器后被丢弃。
路由黑洞:控制层面可达,数据层面不可达(此概念出于MPLS时代)

  • 控制层面:传路由表的方向
  • 数据层面:访问目标的方向
    1、BGP协议是基于TCP单播沟通,可以穿越中间设备来传递路由
    2、BGP的路由正常均需要递归多次到直连路由,运行BGP协议的路由基本都可以完成递归,认为可达,不关注下一跳设备是否由路由,只要本地能到下一跳即可
    3、BGP生成的路由是唯一路径,但递归可以多条路径传输

解决BGP路由黑洞
1)物理链路全连(IBGP中运行BGP协议的路由器太远不能实现)
2)邻居关系全连(所有设备均运行BGP)
3)将BGP重发布到IGP(LAB实验环境下应用,慎用)
4)MPLS,多协议标签交换(最佳)

七、BGP的防环机制—水平分割
EBGP水平分割:防止EBGP邻居关系下的环路,路由条目在BGP协议中传递时,存在一个AS path属性。该属性记录经过的每一个AS编号,BGP拒绝接受存在本地AS编号的路由。

IBGP水平分割:防止IBGP邻居关系下的环路,因为AS-BY-AS规则,一条条目在一个AS内部传递时,默认没有任何属性的变化,故很容易在IGBP邻居关系产生环路。

  • IBGP水平分割规则:从一台IBGP邻居学习到的路由条目不得传递给下一台IBGP邻居的路由器,该设计为实现路由的正常传递,必须进行两两间建立IBGP邻居关系配置量几何式增长-----联邦,路由反射器解决此问题

八、配置
IBGP之间运行协议,处于IBGP边界的设备和EBGP的接口不宣告
【1】建立BGP的邻居关系
在BGP协议中邻居关系的建立与路由条目的宣告是分开进行的

  1. 建立普通的EBGP邻居关系
    r1(config-router)#neighbor 12.1.1.2 remote-as 2
    ------------------------------ 对端接口ip —对端的AS号

  2. 建立IBGP邻居关系,正常一个AS内部网络拓扑不会是直线型:因此IBGP邻居关系间实际存在多条可达路径(物理接口建立),建议环回建立TCP会话的源,目标IP地址(好处1.存在备份路径 2.同时基于多条路径通讯)邻居关系
    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} 默认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
    建邻配置完成后,两端进行TCP的三次握手行为;建立TCP的会话
    在这里插入图片描述
    当TCP会话建立后,邻居间使用open报文来进行邻居关系;生成邻居表
    在这里插入图片描述
    【2】宣告路由
    BGP协议不计算产生路由条目,而是将本地路由表中的路由条目共享到BGP来;这些路由是通过什么方式获取的不关注;
    规则:宣告时所填写的条目内容必须和路由表中的记录完全一致 可控性的体现
    r1(config)#router bgp 1
    r1(config-router)#network 1.1.1.0 mask 255.255.255.0
    宣告条目后,本地将生成BGP表—本地收发的所有路由信息;
    在这里插入图片描述
    在这里插入图片描述
    不可用的条件(不满足不可用就可用了,可用条件不好写):
    1.*号被r取代 r标示不装载—本地路由表中已存在更好的路由
    2.*被s取代 s标示抑制—是管理用手工限制该条目的传输
    优秀的条件:1.同步问题—本地路由表中必须先通过IGP学习到该路由,为了避免路由黑洞
    在IOS版本11.2(8)T以上设备直接默认关闭该限制
    在这里插入图片描述
    2.下一跳可达----AS-BY-AS导致的,条目在传递给IGBP时下一跳属性默认不修改
    可以让设备从EBGP邻居处学习到的路由传递给IBGP时,修改下一跳为自己
    r2(config)#router bgp 2
    r2(config-router)#neighbor 4.4.4.4 next-hop-self
    将路由传递给邻居4.4.4.4时修改下一跳地址为本地
    当条目传输给EBGP邻居时,进入下一个AS了,过程中修改属性(包括下一跳)

注:一条条目必须优且可用才能加表;只有优同时没有被抑制(人为)就可以传递;

九、BGP的宣告问题
一台运行BGP协议的设备在宣告本地路由表中非本地直连路由时,将携带本地到达这些路由的度量和下一跳地址;

度量问题:AS2中假设R2/R3同时连接着AS1;那么它们在宣告了本AS的路由后,将在路由信息中携带本地到达这些网段的度量值,便于AS1判定R2/R3谁离目标最近;
同时这些路由也会被同一AS内的R4/5学习到,R4/5连接着AS3,它们在将路由传递给AS3时,会将度量清0;可以通过在R4/5上宣告AS2的路由,来向AS3导入R4/5的度量;

总结:所有存在EBGP邻居的路由器均宣告本地AS的路由;

十、关闭BGP自动汇总问题
no auto-summary 对BGP的正常的宣告路由没有影响;正常宣告路由及时设备在auto-summary条件下也携带路由表中的实际掩码;
12.2(8)T以上IOS默认no auto-summary;
自动汇总针对的是从IGP重发布到BGP的路由;
r2(config)#router bgp 2
r2(config-router)#redistribute ospf 1
批量重发布的路由 auto-summary 不携带原有掩码、度量、下一跳
------------------------no auto-summary携带原有掩码、度量、下一跳

总结:所有存在EBGP邻居的路由器均重发布本地AS的路由;同时为 no auto-summary;

将IGP重发布到BGP–批量的将IGP路由宣告到BGP;在BGP协议中逐条宣告IGP路由–逐一的将IGP路由重发布到bgp;这两种的路由区别仅仅在于起源属性不同;
逐一的起源属性优于批量的属性;

十一、BGP的聚合
【1】利用BGP的宣告特点—本地路由表中无论条目的来源均可宣告;
不需要宣告明细路由,而是在准备汇总设备上,先配置一条到达汇总地址的空接口防环路由,然后将其再宣告到BGP协议中
r5(config)#ip route 10.1.0.0 255.255.252.0 null 0
r5(config)#router bgp 3
r5(config-router)#network 10.1.0.0 mask 255.255.252.0
基于优选路径要求,BGP协议常常需要在传递汇总路由给EBGP邻居后,再传递部分的明细路由;这种聚合配置,只需要在宣告了汇总条目后,再逐一宣告需要的明细路由即可

【2】BGP的聚合配置
先逐一宣告所有的明细路由;再在汇总源路由上,进行聚合配置
r5(config)#router bgp 3
r5(config-router)#aggregate-address 10.1.0.0 255.255.252.0
聚合配置完成后,本地自动生成空接口防环路由
注:以上配置完成后,明细和聚合条目,同时发送;
r5(config-router)#aggregate-address 10.1.0.0 255.255.252.0 summary-only
仅传递聚合条目,所有明细路由被抑制;标记S

【3】控制明细的收发
1)抑制列表–在汇总时,设定一张抑制列表,未被抑制的明细路由和汇总路由同时发出
在汇总配置时,先不抑制明细路由;再定义定义一张抑制列表
r5(config)#ip prefix-list ss permit 10.1.2.0/24
r5(config)#route-map ss permit 10
r5(config-route-map)#match ip address prefix-list ss
r5(config-route-map)#exit
r5(config)#router bgp 3
r5(config-router)#aggregate-address 10.1.0.0 255.255.252.0 suppress-map ss
注:以上被允许流量,实际最终被抑制传输;

注:以下三种方式,即便不在汇总时,也可以正常和邻居间使用;
2)分发列表
r5(config)#access-list 1 deny 10.1.2.0
r5(config)#access-list 1 permit any
r5(config)#router bgp 3
r5(config-router)#neighbor 4.4.4.4 distribute-list 1 out 控制层面方向的邻居
r5#clear ip bgp * soft

3)Route-map
r5(config)#ip prefix-list r permit 10.1.2.0/24
r5(config)#route-map r deny 10
r5(config-route-map)#match ip address prefix-list r
r5(config-route-map)#exit
r5(config)#route-map r permit 20
r5(config-route-map)#exit
r5(config)#router bgp 3
r5(config-router)#neighbor 4.4.4.4 route-map r out 控制层面方向
r5(config-router)#end
r5#clear ip bgp * soft
关注实际状态设备,in、out方向均可;若拒绝的条目多,建议编写允许,然后自动拒绝所有;拒绝的少,那么仅关注拒绝流量,添加允许所有;

4)前缀列表
r5(config)#ip prefix-list qq deny 10.1.2.0/24
r5(config)#ip prefix-list qq permit 0.0.0.0/0 le 32
r5(config)#router bgp 3
r5(config-router)#neighbor 4.4.4.4 prefix-list qq out 控制层面方向调用
r5(config-router)#end
r5#clear ip bgp * soft
关注实际状态设备,in、out方向均可;若拒绝的条目多,建议编写允许,然后自动拒绝所有;拒绝的少,那么仅关注拒绝流量,添加允许所有;

十二、BGP在MA网络中的下一跳问题
基于ICMP重定向规则,在MA网段中传递路由时,将定义为最佳下一跳
r1# debug ip bgp updates
r1#clear ip bgp * 硬重启 断开本地所有邻居间的TCP会话然后重建
r1#clear ip bgp 123.1.1.2 和某个特定的邻居进行硬重启
r1#clear ip bgp * soft 软重启,仅和所有邻居重新收发路由信息,不断开邻居关系
r1#clear ip bgp 123.1.1.2 soft 和某个特定的邻居进行软重启

r1#clear ip bgp 123.1.1.2 soft ? 还可以定义方向,区分本地发出和接收流量
in Soft reconfig inbound update
out Soft reconfig outbound update

查看本地发送给该邻居的BGP表内容
r1#show ip bgp neighbors 123.1.1.2 advertised-routes
查看本地从某个邻居接收的BGP表内容
r1#show ip bgp neighbors 123.1.1.2 received-routes
% Inbound soft reconfiguration not enabled on 123.1.1.2 默认没有空间来进行区分
创建专用空间,建议查看完空间内容后,删除该空间
r1(config)#router bgp 1
r1(config-router)#neighbor 123.1.1.2 soft-reconfiguration inbound

猜你喜欢

转载自blog.csdn.net/qq_41804366/article/details/89359789