BGP 总结

BGP 总结

一、基础知识

1. BGP

边界网关协议

2. 使用范围

AS与AS之间使用的路由协议

3. AS(自治系统)

自治系统范围:0-65535,
公有 AS(1-64511),
私有 AS(64512-65535)

4. 协议特点(算法)

路径矢量型,没有算法

5. 协议是否传递网络掩码

传递网络掩码,支持VLSM CIDR

6. 协议消息数据包封装

基于TCP封装; 端口号:179

二、BGP特点:

1. 无类别路径矢量

距离矢量的升级版—AS–BY–AS

2. 工作方式
  1. 使用单播更新来发送所有信息
  2. 基于TCP 179端口工作
3. 增量更新

仅触发无周期

4. 具有丰富的属性来取代IGP中度量进行选路

多个参数控制协议

5. 可控性

可以在进项和出项对流量实施强大的策略可控性

6. 默认不被用于负载均衡

通过各种选路规则仅仅产生一条最佳路径

7. BGP支持认证和聚合(汇总)

三、BGP数据包

1. 基于TCP的179端口工作,BGP协议中所有的数据包均需要在tcp会话建立后,基于TCP的会话来进行传输及可靠性的保障;
2. 首先通过TCP的三次握手来寻找到邻居;
3. 消息数据包
1)open(建立BGP邻居关系,只发送一次)

仅负责邻居关系的建立,正常进收发一次即可
携带route-id
hold time 默认为 3min

BGP邻居关系建立条件:
a. router-id 必须不同
b. BGP 认证一致
c. 指定正确的AS号
d. 建立TCP三次握手的两段路由可达
在这里插入图片描述

2)Keeplive

保活,维持BGP邻居关系
周期1min查询邻居关系是否存在
实际保活TCP会话
keepalive时间默认为60s
Hold时间,保持默认为180s在这里插入图片描述

3)Update

携带路由条目
目标网络号+各种属性

通告路由:在这里插入图片描述
撤销路由:
在这里插入图片描述

4)Notification

出现错误数据时收发
在这里插入图片描述

四、BGP的工作过程

1、IP可达
2、TCP三次握手,建立端到端虚链路,之后所有BGP数据包基于TCP的会话进行通信
3、OPEN报文进行邻居关系的建立,OPEN报文中携带AS号,RID等参数;正常情况open报文收发一次即可;邻居关系建立后生成邻居表;
4、邻居关系建立后,管理员手工选择传递的路由,通过更新包共享到邻居处;生成BGP表(装载本地发出),接收到的所有路由信息;
5、之后BGP协议,将BGP表中最优路由仅选择一条加载于路由表中;
6、收敛完成后正常仅keeplive包周期(1min)保活即可;若有路由变化,使用更新包,触发更新即可;
7、在一些错误的参数出现时,使用Notification 进行报错;比如AS配置错误,IP地址填写错误等;

五、名词注解

1. BGP

协议邻居被称为对等体

2.IBGP

内部BGP邻居关系,在同一个AS内部建立的BGP邻居

3.EBGP

外部BGP邻居关系,在不同AS种的BGP设备建立的邻居关系

六、BGP的路由黑洞

1.由于运行BGP协议的设备需要存储大量的路由条目
2.故硬件成本极高;
3.故为控制层面有效管理,一个AS中仅部分设备运行BGP协议,基于TCP会话来跳过未运行BGP协议的设备传递路由;
4.最终导致控制层面正常学习路由,但数据层面流量再经过未运行BGP协议的路由时,无法传递;
5.控制层面显示可达,实际数据层面不可达–路由黑洞
6.解决方案:
1)物理或逻辑全连
2)邻居关系全连
3)BGP路由重发布到IGP协议中
4)MPLS(最佳方案)多协议标签技术

七、BGP的防环机制–BGP水平分割

1、EBGP水平分割 在BGP的路由条中存在一个属性AS-path;该属性将记录所有经过的AS的编号

故若接收到的路由条目中,若存在本地的AS编号,将拒绝接收该条目

2、IBGP水平分割 --因为AS-BY-AS规则,BGP路由条目在一个AS内部传递时,其属性默认不发送变化; 可能导致IBGP环路;
3、IBGP水平分割规定,本地从一个IBGP邻居处学习到的路由条目,不得传递给本地的下一个IBGP邻居;

将导致AS内部的IBGP邻居关系数量,成指数上升—后期使用路由反射器、联邦来打破该规则

八、BGP配置

1、建立BGP的邻居关系

BGP建立邻居时的源、目标ip地址必须可达

1)直连的EBGP邻居关系建立
[r1]bgp 1                                启动时需要定义本地的AS号,BGP不存在多进程概念
[r1-bgp]router-id 1.1.1.1                建议配置RID,若不配置;自动生成,规则同OSPF一致;
[r1-bgp]peer 12.1.1.2 as-number 2        对端ip地址,以及对端所在AS
2)AS内部的IBGP邻居关系建立

由于AS内部环境一般较为复杂,两台BGP设备间存在大量的备份路径;
故若使用物理接口地址来作为TCP会话的源ip、目标ip,将失去备份和负载均衡链路;
因此建议IBGP邻居使用环回接口作为源、目标ip地址;
前提是环回接口地址需要ip可达

[r2]bgp 2 
[r2-bgp]peer 3.3.3.3 as-number 2 

此时,源ip地址设备依然会使用物理接口,故两端源、目ip无法固定,必须同时修改源ip地址为环回

[r2-bgp]peer 3.3.3.3 connect-interface LoopBack 0     修改源地址为本地的环回接口
3)EBGP邻居间存在多条物理链路时,也建议使用环回接口作为源/目IP

1、IP必须可达 — 一般使用静态路由
2、邻居建立配置

[r5]bgp 3 
[r5-bgp]peer 4.4.4.4 as-number 2 
[r5-bgp]peer 4.4.4.4 connect-interface LoopBack 0

3、BGP协议的数据包在IBGP邻居间TTL=255,在EBGP邻居TTL=1
故使用环回作为EBGP邻居建立地址,将无法到达,必须修改TTL值

[r4-bgp]peer  5.5.5.5 ebgp-max-hop 2

两端配置完成后,将进行TCP的三次握手来建立端到端的会话

[r1]display tcp status                  查看设备上的TCP会话状态
TCPCB    Tid/Soid Local Add:port        Foreign Add:port      VPNID 
State
b4d13778 164/5    12.1.1.1:179          12.1.1.2:49646        0     
Established

正常两端均会进行会话请求,故建立两条会话,之后断开其中一条
TCP 会话建立后,BGP协议基于会话正常收发一次open报文,建立BGP的邻居关系;生成邻居表

[r1]display  bgp peer 
BGP local router ID : 1.1.1.1
Local AS number : 1
Total number of peers : 1                Peers in established state : 1
 Peer       V     AS    MsgRcvd  MsgSent  OutQ    Up/Down       State    PrefRcv
12.1.1.2    4      2      7        8       0      00:05:14    Established    0
2、BGP的路由宣告

一台运行了BGP协议的路由器,可以将本地路由表中无论何种方法获取到的路由条目,任意宣告到BGP协议中;
逐条宣告:宣告本地路由表中的任意路由条目;宣告时网络号必须和路由表中的记录完全一致;

[r1] bgp 1 
[r1-bgp]network 1.1.1.0 24

宣告配置完成后,本地生成BGP表,表中记录本地发出以及接收到的所有BGP路由信息;
同时该路由被BGP使用更新包共享给本地的邻居,邻居也将其加载到它的BGP表中;

条目优秀的条件
1、同步问题 --早期BGP协议为解决路由黑洞问题,要求一台BGP通过BGP协议学习到一条路由时,本地的IGP协议也要同时需要到该条目,才能满足同步需求;但将导致IGP协议负载过大;因此当前各厂家设备中均默认关闭同步规则;
2、下一跳可达问题
基于 AS-BY-AS规则,路由条目在一个AS内部传递时,其属性默认不变化;
可能导致内部BGP设备学习到的路由信息中,下一跳地址不可达

[r2]bgp 2 
[r2-bgp]peer 3.3.3.3 next-hop-local    将路由通过BGP协议传递给邻居3.3.3.3时,修改下一跳地址为本地

IBGP水平分割规则,AS-BY-AS规则均在一个AS内部存在;EBGP邻居间传递路由将没有IBGP水平分割限制,EBGP邻居间传递路由时将自动修改下一跳为本地;

切记:在BGP协议中,BGP邻居传递过来的BGP路由,在本地路由表中已经通过其他协议存在,那么将不在本地加表而是继续传递给本地的其他邻居;
在BGP协议中,BGP邻居传递过来的BGP路由,在本地路由表中已经通过其他协议存在,同时该路由还被用于本地该传递路由的设备,建立邻居时作为底层路由;那么该条目在本地不优,将无法继续传递;

3、有条件的打破IBGP水平分割

a. 因为BGP协议可以非直连建邻,同时一个AS内部正常应该存在复杂的网络环境;完全可以实现BGP邻居关系的大量备份,理论上不需要一台不链接其他AS的BGP设备来备份内部邻居关系;

b. 故正常在一个AS中运行BGP协议的设备一定连接其他AS;由于IBGP水平分割的限制;导致一个AS内所有BGP协议设备间均建立IBGP邻居关系;IBGP邻居关系的数量成指数上升,配置量和管理量异常巨大;

c. 所以需要打破IBGP水平分割规则;

d. 因为IBGP水平分割用于防止IBGP环路,故打破将可能导致环路出现;因此成为有条件的打破IBGP水平分割;所谓有条件是指在确定打破无环的前提下来进行设计;

e.路由反射器
转发规则:
1、RR从一台EBGP邻居学习到的路由,可以传递给本地客户端、非客户端,其他EBGP邻居;
2、RR从一台客户端学习到的路由,可以传递给本地其他的客户端、非客户端,其他EBGP邻居;
3、RR从一台非客户端学习到路由,可以传递给本地其他的客户端,EBGP邻居;不能传递给本地的其他非客户端;

[r3]bgp 2 
[r3-bgp]peer 2.2.2.2 reflect-client             2.2.2.2成为本地的客户端,同时本地成为RR

f. 联邦
将一个AS,逻辑的划分为多个小AS;小AS使用私有的AS号,小AS间为联邦内的EBGP邻居关系;可以向真实EBGP关系一样传递路由,但默认不修改属性;
1、联邦内的BGP设备,无论启动或者配置或者建立BGP邻居关系,均使用小AS号进行
2、工作小AS中的BGP设备,需要声明自己所在的大AS号
3、小AS需要互相指出对端的小AS号

[r2]bgp 64512  
[r2-bgp]confederation id 2            声明本地的大AS号
[r3-bgp]confederation peer-as 64513   指定对端小AS号    仅需要在小AS间的两台设备互指

切记 华为设备中,小AS间设备,必须先配置声明,再互相小AS,最后进行邻居关系建立配置;否则无法建立邻居关系;

实际工程中,反射器和联邦同时使用,协同工作;

九、BGP的宣告问题

BGP协议可以宣告本地路由表中的任意路由,不关注产生方式

1、BGP设备直接宣告本地直连路由
2、BGP设备宣告本地路由表中通过其他协议产生的路由

a. 本地直连路由的度量值为0,通过其他协议学习的路由大于0;
b. BGP宣告路由时,将携带本地路由表中的度量值到BGP协议中来;
c. 一台运行BGP协议的设备,在宣告了本地路由表中路由后,将本地到达目标的度量值携带于BGP路由表中,传递给本地的EBGP/IBGP邻居;意义在于让本地的EBGP邻居可以选择离目标最近的EBGP设备来路由;
d. 但是,若本地通过IBGP邻居关系学习到的路由中存在度量值,之后本地再将这些路由传递给本地的其他EBGP邻居时将删除该值,度量为0;
建议只要BGP设备存在EBGP邻居,均需要自己宣告一次AS内部的路由,使得其他AS可以对本AS进行路径优选;

十、BGP的自动汇总问题

当下各厂商的BGP协议中,自动自动汇总均被默认关闭

[r2]bgp 64512
[r2-bgp]summary automatic     开启自动汇总,不建议手工开启,保持默认关闭即可
1. 距离矢量协议比如rip、eigrp均存在自动汇总行为;若开启将主类掩码路由,若关闭将传递真实掩码的路由;
2.在BGP协议中,自动汇总行为对正常宣告的BGP路由不影响;
3.对从IGP重发布到BGP的路由有作用,关闭自动汇总 产生的路由携带正常掩码和度量
4.开启自动汇总,携带主类掩码,不携带度量值;

理解:BGP协议中的宣告就是逐条的重发布;将IGP重发布到BGP,就是批量的宣告;
两种操作产生的路由,仅起源属性不同,逐条宣告的起源码优于批量行为;

:因此若使用IGP重发布到BGP行为,关闭自动汇总;每台存在EBGP邻居的BGP均需重发布,来正常携带度量;

十一、BGP的聚合(汇总)

(1)利用了BGP协议的宣告特征,本地路由表中无论来源均可被宣告;

即使该条目为手写的空接口路由,依然可以宣告,将网络号传递给邻居;
不宣告明细路由,而是直接在准备进行汇总配置的设备上,手写一条到达汇总网段的空接口路由;
然后将该空接口路由宣告到BGP协议中即可; 该操作的优势在于不用逐条宣告明细了;
:因为BGP协议工作于AS之间,而AS间正常存在多条互联路径,故为了选路较佳,还需要管理员在传递聚合路由条目的同时,传递部分的明细路由;起到干涉选路的效果;
使用该种汇总配置方式,仅需要宣告汇总路由的同时,该设备再宣告部分明细路由即可实现;

(2)先逐条宣告所有的明细路由,宣告完成后,由BGP再进行汇总配置

BGP的聚合配置完成后,进行配置的设备将自动生成到达空接口的防环路由;

[r2] bgp 64512
[r2-bgp]aggregate 3.3.0.0 21    此时,明细和聚合条目同时传输
[r2-bgp]aggregate 3.3.0.0 21 detail-suppressed    所有的明细路由被抑制,将无法传递给邻居,仅传递一条聚合条目
在

第二种汇总配置的前提下,若需要在传递聚合条目的同时,再传递部分的明细路由的方法:

1、抑制列表
[r2]ip ip-prefix s permit 3.3.3.3 32
[r2]route-policy s permit node 10
[r2-route-policy]if-match ip-prefix s
[r2-route-policy]q
[r2]bgp 64512
[r2-bgp]aggregate 3.3.0.0 21 suppress-policy s    注意调用时,为抑制列表;

因为调用时使用的是抑制行为,因此策略表被允许的路由条目,最终反而被抑制传输;

2、路由策略(route-map)

先让BGP将所有的明细和聚合同时传输出去,之后使用策略逐条管理

3、路由过滤(分发列表)

先让BGP将所有的明细和聚合同时传输出去,之后使用分发策略逐条管理

[r2]acl 2000
[r2-acl-basic-2000]rule deny  sou 3.3.3.3 0.0.0.0
[r2-acl-basic-2000]rule permit source any
[r2-bgp]peer  12.1.1.1 filter-policy 2000 export   

控制层面方向,只能使用acl

4、前缀列表

在BGP中可以直接将前缀列表作为分发列表使用

[r2]ip ip-prefix ee deny 3.3.3.3 32
[r2]ip ip-prefix ee permit 0.0.0.0 0 le 32
[r2]bgp 64512
[r2-bgp]peer  12.1.1.1 ip-prefix ee export

十二、BGP认证

BGP使用密文传输认证秘钥

[r1]bgp 1 
[r1-bgp]peer  12.1.1.2 password cipher cisco123

十三、BGP的属性

BGP协议存在多种属性,用于选路的比较参数;
人为修改任何一个参数都可能影响到选路;
存在6种基本属性,和多种社团属性;

属性:华为和cisco均存在6种基本属性
第一种均为私有属性

1.Preference_Value 华为设备的私有属性
                           传播范围                 默认值             大优或小优 
 Preference_Value           不传播                    0                  大

全局操作:

[r3-bgp]pe 2.2.2.2  preferred-value   1

本地从邻居2.2.2.2处学习到的所有路由优先值修改为1;

负载分担
访问不同的目标网段时,让流量进入不同链路来进行通讯;将所有链路利用起来,而不是仅只用唯一链路通讯;

使用前缀抓取需要修改属性的网段

[r3]ip ip-prefix w permit 1.1.1.0 24

定制策略来进行修改,一定关注是否需要空表来允许其他路由通过

[r3]route-policy w permit node 10
[r3-route-policy]if-match ip-prefix w
[r3-route-policy]apply preferred-value 1
[r3-route-policy]q
[r3]route-policy w permit node 20
[r3-route-policy]q

再在协议中针对某个邻居调用

[r3]bgp 2 
[r3-bgp]peer 2.2.2.2 route-policy w import    

因为该属性为私有不传递属性,故调用时,只能在控制层面的入向调用,来影响本地的BGP生成;

2、本地优先级
                    传播范围             默认值             大或小优
  本地优先级      IBGP邻居关系间            100                 大

第一个公有属性,也是最常用于干涉IBGP选路,最常使用的属性

全局修改:

[r4-bgp]default local-preference 101

本地所有传输到IBGP的路由条目,其中本地优先级修改为101;

使用本地优先级实现负载分担

[r2]ip ip-prefix p permit 1.1.1.0 24
[r2]route-policy p permit node 10
[r2-route-policy]if-match ip-prefix p
[r2-route-policy]apply local-preference 101 
[r2-route-policy]q
[r2]route-policy p permit node 20
[r2-route-policy]q
[r2]bgp 2 
[r2-bgp]pe 3.3.3.3 route-policy p export  

调用时在控制层面的出或入向均可,但必须为IBGP邻居关系;

3、 as-path

优选经过AS数量较少路径;
该属性的自动添加是在EBGP邻居关系间进行;

[r4]ip ip-prefix as permit 1.1.1.0 24
[r4]route-policy as permit node 10
[r4-route-policy]if-match ip-prefix as
[r4-route-policy]apply as-path 3 4 5 additive 
[r4-route-policy]q
[r4]route-policy as permit node  20
[r4-route-policy]q
[r4]bgp 2 
[r4-bgp]pe 14.1.1.1 route-policy as import 

:可以在控制层面的入或出方向调用,但只能在ebgp邻居间操作;可干涉ebgp、ibgp关系选路;

出向调用 x 3 4 5
入向调用 3 4 5 x
x为实际经过的AS号;最前端号码为最新经过的AS号;

切记:as-path 属性又用于EBGP的水平分割,若人为添加的as号,在网络后端实际存在,将导致这些路由无法进入这些AS;解决方案:反复添加已经经过的AS编号;- 选路看数量,防环看数字;

4、起源属性 条目的产生方式

network 宣告本地路由表中的任意路由 i

import 将本地通过其他协议学习的路由重发布到BGP协议中 ?

egp 早期的ebg协议学习的路由重发布到BGP协议中 e

该属性的修改可以在整个控制层面流量经过的任意接口修改;

[r4]ip ip-prefix o permit 1.1.1.0 24
[r4]route-policy o permit node 10
[r4-route-policy]if-match ip-prefix o
[r4-route-policy]apply origin egp 2 

此处配置的AS为对端邻居的AS号

[r4]route-policy o permit node 20
[r4-route-policy]q
[r4]bgp 2  
[r4-bgp]pe 3.3.3.3 route-policy o export
5、MED 多出口的鉴别属性
  1. BGP协议默认不存在cost;
    MED就是人为的利用路由器优选路径的规则—先比较管理距离(华为为优先级),若一直再比较度量值(华为为cost)

  2. BGP协议在特定条件下携带本地到达目标的cost值;
    本地宣告(重发布)自己路由表中的路由后,将其传递给本地的ebgp邻居,将携带cost值;
    对于其他AS的设备学习到从同一个as传递过来的路由,优选MED最小的路径;

  3. 管理员可以在控制层面传递路由的过程中,手工修改MDE;最常用于干涉ebgp选路;

  4. 常常用于AS1干涉AS2对AS1的选路;

[r1]ip ip-prefix med permit 1.1.1.0 24
[r1]route-policy med permit node 10
[r1-route-policy]if-match ip-prefix med
[r1-route-policy]apply cost 10
[r1-route-policy]q
[r1]route-policy med permit node 20
[r1-route-policy]q
[r1]bgp 1 
[r1-bgp]pe 14.1.1.2 route-policy med export

由于实际工程中,管理员只能在一个AS中配置,故无法通过查看BGP表来判断选路结果,可以通过扩展ping来解决

[r1]ping -r  -a 1.1.1.1 3.3.3.3

十四、BGP的社团属性

BGP的扩展属性 默认大多数厂商的产品在BGP协议中不携带社团属性

例:控制传播范围的社团属性

[r1]route-policy com permit node 10
[r1-route-policy]apply community no-advertise  

针对所有的流量修改属性

[r1]bgp 1 
[r1-bgp]peer 12.1.1.2 route-policy com export

默认华为设备也不传递社团属性,故使用社团属性时,必须定义传递性

[r1-bgp]peer 12.1.1.2 advertise-community  

逐跳行为,每台设备均需开启传递性

no-advertise 接收到的条目中若存在该社团属性,将不再传递该路由
no-export 接收到的条目若存在该社团属性,将不传递给下一个AS
no-export-subconfed 接收到的条目若存在该社团属性,将不传递给下一个小AS

若网络没有小AS,仅存在大AS时no-export和no-export-subconfed作用一致

猜你喜欢

转载自blog.csdn.net/weixin_45756724/article/details/107327549
BGP