BGP:边界网关协议,无类别的路径矢量EGP协议
EGP—用于AS与AS之间的路由协议
AS:自治系统,标准编号0-6635,其中0-64511公有AS号,64512-65535私有AS号
扩展编号-32位二进制构建的编号
http://www.cidr-report.org/as2.0/
IGP协议追求:1、收敛速度快 2、选路佳 3、占用资源少–全网可达 hop-by-hop
EGP协议追求:1、可靠性 2、可控性 AS-by-AS
设计特点:
1、可控性:BGP协议自身不会产生任何路由,仅仅是路由的搬运者;且AS之间往往存在大量的线路来保证稳定性,所以BGP
在搬运路由条目时很难选择出最佳路径—需要管理员对路由进行大量的策略来干涉选路
2、可靠性:基于TCP协议进行路由共享,BGP协议需要共享不同AS之间的路由,所以更新量很大,为了避免对设备资源的占用,
选用了仅触发更新、无周期更新的工作方式,所以需要保障所有的路由更新能够到位–必须可靠–TCP
TCP是单播工作的,所以BGP的邻居建立需要手工指定,同时BGP可以非直连建邻
BGP协议需要基于IGP之上,先使用IGP协议实现设备之间IP可达,然后BGP基于TCP建立邻居关系
一、BGP协议的特点
1、无类别的路径矢量协议—距离矢量协议的升级版–AS BY AS
**2、使用单播的方式更新发送所有信息,基于TCP 179端口工作
3、增量更新—仅触发,无周期
**4、具有丰富的属性代替IGP中的度量进行选路—多个参数控制
5、可以在进向和出向实施强大的策略—可控性
**6、默认不被用于负载均衡—通过各种各样的规则仅仅产生一条最佳路径
7、BGP支持认证和聚合(汇总)
二、BGP数据包–基于TCP179端口工作,所以BGP协议中的所有数据包均需要在TCP三次握手建立会话之后,再基于TCP对的
会话进行传输以及可靠性的保障。
首先通过TCP三次握手来寻找邻居关系:
Open:仅负责邻居关系的建立,正常仅收发一次即可。携带Router-ID,
Keepalive:保活,周期1min查询邻居关系是否存在,hold time 3分钟;实际保活的是TCP会话
Update:携带路由条目的数据包—目标网络号+各种属性
**Notification:正常不会出现,只有出现错误的时候才收到此报文。
三、BGP的工作过程
首先保证到达要建邻的邻居处IP可达,然后管理员手工指定邻居的IP地址
启动BGP协议之后,基于TCP 179端口进行TCP的三次握手来建立TCP的会话
会话建立成功后,收发open报文建立BGP的邻居关系,生成/邻居表/;
邻居关系建立之后,邻居间使用Update数据包共享路由条目,在学习完路由信息之后,本地生成/BGP表/,表中包含本地发出的
和所有接收到的路由条目。
之后路由器将BGP表中去往目标的最优路径(不一定是去往目标的最佳路径,仅BGP认为最佳)加载到/路由表中/
整个收敛完成,仅使用Keepalive数据包周期保活TCP会话即可。
网络结构发生突变:
1、新增:BGP更新源设备将使用Update数据包来告知本地的所有邻居
2、断开:BGP更新源设备将使用Update数据包来告知本地的所有邻居
3、设备无法通信:3 min holdtime,计时结束后断开邻居关系和TCP会话,删除所有学习到的路由条目
BGP更新源设备并不一定是直连断开或者新增的设备,而是第一台将此路由条目发布到BGP协议中的路由器。
四、专业名词
EBGP:外部BGP邻居关系—两台处于不同的AS的BGP路由器之间建立的邻居关系
IBGP:内部BGP邻居关系—两台处于同一个AS之内的BGP路由器之间建立的邻居关系
五、BGP的路由黑洞
由于BGP协议可以非直连建立邻居关系,所以两台BGP邻居间如果存在未运行BGP协议的路由器时,可能出现路由条目在
控制层面可达,但是数据层面的流量经过未运行BGP协议的设备时,无法通信—控制层面可达,数据层面不可达
解决方案:
1、物理或者逻辑链路全连
2、BGP邻居关系全连–所有的设备均运行BGP协议
3、将BGP路由条目重发布进IGP协议中(LAB)
4、最佳方案—MPLS:多协议标签交换
六、BGP的防环机制—水平分割
1、EBGP水平分割—防止EBGP邻居间的环路
利用BGP路由条目中的AS-PATH属性解决,该属性会记录所有经过的AS编号,接收到的路由条目中若AS-PATH属性中
存在本地的AS号,则拒绝接收。
2、IBGP水平分割—防止IBGP邻居间的环路
基于AS-BY-AS特性,BGP的路由条目在同一个AS内部传递时,属性是不会发生变化的。
IBGP水平分割:从一个IBGP邻居处学到的路由条目不再会传递给本地其他的IBGP邻居;
因为BGP协议可以非直连建立邻居关系,所以在一个AS内部只要设备运行BGP协议,那么必然存在EBGP邻居关系,即一定接了
其他的AS;IBGP水平分割规则将导致在一个AS内部所有运行了BGP协议的路由器之间,均需要建立IBGP老邻居关系,才可以
正常传递路由条目,那么建立邻居关系的配置成指数上升。
可以使用反射器或者联邦解决!
七、BGP基本配置
建立邻居关系–BGP基于单播进行邻居建立和沟通,所以需要管理员手工指定邻居的IP地址
[1]使用直连接口的IP地址建立EBGP邻居关系
[r1]bgp 1 //启动BGP协议,需要定义真实的AS号,并没有多进程的概念
[r1-bgp]router-id 1.1.1.1 //指定RID,如果不指定,则环回接口IP最大>物理接口IP最大
[r1-bgp]peer 12.1.1.2 as-number 2
对端的IP地址 对端所在的AS号
[2]实际网络环境中,在一个AS内一般情况下会具有比较夫咋的拓扑结构,设备之间存在大量的备份和负载的路径,因此,
此时在建立IBGP邻居关系的时候,为了实现IBGP邻居关系有备份路径可达,建议使用双方的环回接口作为源/目IP地址
[r2]bgp 2
[r2-bgp]peer 3.3.3.3 as-number 2
若使用环回接口作为源/目IP地址建立IBGP邻居关系,必须修改本地环回接口为源
[r2-bgp]peer 3.3.3.3 connect-interface LoopBack 1 //修改本地环回接口为源
[3]若EBGP邻居间存在多条链路时,也建议使用环回接口建立邻居关系。
1)先实现IP可达
[r4]ip route-static 5.5.5.0 24 45.1.1.2
[r4]ip route-static 5.5.5.0 24 54.1.1.2
2)指定BGP邻居
[r4-bgp]peer 5.5.5.5 as-number 3
[r4-bgp]peer 5.5.5.5 connect-interface LoopBack 1
3)BGP规定EBGP邻居间默认所有的BGP数据包TTL为1,导致使用环回建立邻居关系时不正常,TTL不可达
[r4-bgp]peer 5.5.5.5 ebgp-max-hop 2 //修改EBGP邻居间的TTL值
查询邻居关系的状态:
[r1]display tcp status //查看TCP会话连接状态
[r1]display tcp status
TCPCB Tid/Soid Local Add:port Foreign Add:port VPNID State
b4aeb8f4 164/8 12.1.1.1:179 12.1.1.2:50824 0 Established
display bgp peer //查看BGP邻居表
BGP local router ID : 1.1.1.1
Local AS number : 1
Total number of peers : 1 Peers in established state : 1
邻居 版本 邻居的AS号 收到的路由数量
Peer V AS MsgRcvd MsgSent OutQ Up/Down State PrefRcv
12.1.1.2 4 2 38 39 0 00:36:42 Established 0
八、BGP的路由宣告
BGP协议本身不会自己计算路由,只是负责转发从其他BGP邻居传递过来的路由条目,
同时可以将本地路由表中任意的路由宣告到BGP协议中,
BGP协议配置时,只能宣告本地路由表中的任意条目,且宣告配置中网络号和掩码必须和路由表中一致。
[r1]bgp 1
[r1-bgp]network 1.1.1.0 24 //宣告路由
当完成BGP的宣告配置之后,本地会生成BGP表,此表装在着本地发出的以及接收到的所有BGP路由
[r1]display bgp routing-table //查看BGP表
BGP Local router ID is 1.1.1.1
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Total Number of Routes: 1
Network NextHop MED LocPrf PrefVal Path/Ogn
> 1.1.1.0/24 0.0.0.0 0 0 i
网络号/掩码 属性
BGP表中的号表示,此路由条目可用。
BGP表中的>号表示,此路由条目优秀–可以加载到路由表,可以传递给其他BGP邻居
BGP表中的i表示,此路由条目是从IBGP邻居处学习到的
路由条目不优秀的原因:
1、下一跳不可达–若BGP表中的条目信息下一跳本地不可达,则此条目不优秀(因为AS by AS)
[r2]bgp 2
[r2-bgp]peer 3.3.3.3 next-hop-local //修改下一跳属性为本地-2.2.2.2
注意:路由条目传递给本地的EBGP邻居时,自动修改属性,包括下一跳修改为本地。联邦内的EBGP邻居关系是不修改下一跳属性。
若本地路由表中有去往目标网段更好的路由,则在华为设备中BGP途径过来的路由不优秀,可以修改一下。
九、有条件的打破IBGP水平分割
1)反射器
三个角色:RR 客户端 非客户端
此三种角色构建成为一个簇,可以理解为RR是中心,客户端和非客户端是分支
要求所有的分支与中心为IBGP邻居关系,在一个簇里至少存在一台客户端设备。
一台设备可以同时是RR和客户端。
反射规则:
1、RR从一台EBGP邻居处学习到的路由可以传递给本地的客户端、非客户端和其他EBGP邻居关系
2、RR从一个客户端邻居处学习到的路由可以传递给本地的其他客户端,非客户端和其他EBGP邻居
3、RR从一个非客户端邻居处学习到的路由可以传递给本地的客户端和其他EBGP邻居,不得传递给本地的非客户端
非非不非
注意:若路由条目不优秀,则RR不能反射。
[r3]bgp 2 //R3为RR
[r3-bgp]peer 2.2.2.2 reflect-client //该指令指定了本地为RR同时2.2.2.2邻居为本地的客户端。
本地的客户端
2)联邦
将一个真实的大AS逻辑的分成若干个小AS,小AS的编号建议使用私有AS号(64512-65535);
小AS之间构成了联邦内的EBGP邻居关系,可以像真实的EBGP邻居关系一样传递BGP路由条目,但是基于AS-BY-AS,属性不会法神变化。
对于该大AS之外的其他真实的AS,不知道内部小AS的情况。
[r2]bgp 64512 //配置时基于小AS号进行
[r2-bgp]confederation id 102 //在联邦内指定大AS号
[r3-bgp]confederation peer-as 64513 //小AS之间需要互相指定小AS号
**注意:华为路由器中,必须先定义大AS的ID,再配置小AS号的互指,然后再手工指定邻居关系。
[r3-bgp]peer 4.4.4.4 as-number 64513
[r3-bgp]peer 4.4.4.4 connect-interface LoopBack 1
[r3-bgp]peer 4.4.4.4 ebgp-max-hop 2
在实际工程中,联邦和反射器会被同时使用,降低配置量。
BGP扩展知识点:
一、BGP中的宣告问题
1)若在一台运行了BGP协议的路由器上,宣告本地路由器表中通过其他协议学习到的路由信息时,
将携带本地到达这些目标网段的cost值;
2)若一台BGP设备通过IBGP关系学习到了一条BGP路由,路由中携带了度量值;之后本地将这条路由转发到
本地的其他EBGP邻居时,将删除cost,因为这些cost不是本地的度量;故,若需要基于cost值进行选路干涉,
建议本地也配置宣告这些路由条目,来携带本地的cost到其他EBGP邻居;
二、关于BGP的自动汇总问题
1)在BGP中,自动汇总默认是关闭状态
2)在一般的DV型IBG协议中(RIP/EIGRP),开启自动汇总后,将导致邻居间传递所有路由条目时携带主类掩码
3)但是在BGP中,开启自动汇总后,路由条目并没有发生变化,因为BGP的自动汇总功能对正常宣告进BGP的路由无效,
仅针对重发布进BGP协议的路由有效。
开启BGP自动汇总后,重发布进入BGP的路由条目,不携带原有的掩码,仅携带主类掩码;不携带原有的COST值
故强烈建议不要开启自动汇总
BGP协议中的宣告可以理解为逐条的重发布;重发布IGP到BGP可以理解为批量的宣告;
但两者产生的路由,其起源属性不同,宣告路由优于重发布路由;
因此建议若使用重发布,也和宣告一样,每台存在EBGP邻居的BGP路由器均考虑进行一次重发布;
三、BGP的路由手工聚合–手工汇总
【1】不是标准的BGP聚合配置。利用了BGP协议宣告特点–本地路由表中无论路由条目怎么来的,无论去哪里的,均可以
宣告进BGP协议中(BGP协议宣告仅关注网络号)
可以现在本地路由表中添加关于汇总路由的空接口防环路由,然后再在BGP协议中宣告此空接口路由,就可以达到汇总
BGP路由条目的目的,减少了工程师宣告明细路由的工作量。
注:BGP在实际的工作环境中,控制选路的情况十分常见,AS间可以在传递聚合路由条目的同时,再让部分的明细条目传输过去,
可以实现干涉选路的功能(路由表的最长匹配)
【2】BGP的标准聚合配置:先逐条宣告本地所有的明细路由,然后再进行聚合配置
[r1]bgp 1
先逐条宣告明细路由:
[r1-bgp]network 20.1.1.0 24
[r1-bgp]network 20.1.2.0 24
然后再做聚合配置:
[r1-bgp]aggregate 20.1.1.0 22 //聚合路由和明细路由都会发送
可以通过命令选择不转发明细:
[r1-bgp]aggregate 20.1.0.0 255.255.252.0 detail-suppressed
基于需要:在传递BGP的聚合路由条目之后,还需要再传递部分明细路由,所以使用策略来干涉
1、抑制策略–定义抑制列表策略,对路由传递过程中,对部分路由不希望传递的路由做抑制
先定义要抑制的路由条目
[r1]ip ip-prefix aa permit 20.1.1.0 24
[r1]route-policy aa permit node 10
[r1-route-policy]if-match ip-prefix aa
[r1-route-policy]qu
[r1]bgp 1
[r1-bgp]aggregate 20.1.0.0 22 suppress-policy aa
此时,再聚合时使用抑制策略,则匹配到的被允许的流量将被抑制传递
2、过滤策略
[r1]bgp 1
先逐条宣告明细路由:
[r1-bgp]network 20.1.1.0 24
[r1-bgp]network 20.1.2.0 24
然后再做聚合配置:
[r1-bgp]aggregate 20.1.1.0 22 //聚合路由和明细路由都会发送
先定义要过滤的路由条目,动作直接为拒绝
[r1]ip ip-prefix bb deny 20.1.1.0 24
[r1]ip ip-prefix bb permit 0.0.0.0 0 less-equal 32 //允许所有
再定义过滤策略
[r1]bgp 1
[r1-bgp]filter-policy ip-prefix bb export //通过BGP发出的流量,策略中拒绝的不再被传递
3、路由策略(Route-policy)最常用的方式
[r1]bgp 1
先逐条宣告明细路由:
[r1-bgp]network 20.1.1.0 24
[r1-bgp]network 20.1.2.0 24
然后再做聚合配置:
[r1-bgp]aggregate 20.1.1.0 22 //聚合路由和明细路由都会发送
先定义要过滤的路由条目
[r1]ip ip-prefix cc permit 20.1.1.0 24
指定策略,大动作为拒绝
[r1]route-policy cc deny node 10
[r1-route-policy]if-match ip-prefix cc
[r1-route-policy]qu
添加空表允许其他所有
[r1]route-policy cc permit node 20
[r1-route-policy]qu
然后调用策略,针对某BGP邻居调用该策略。发出的时候直接过滤
[r1]bgp 1
[r1-bgp]peer 12.1.1.2 route-policy cc export ////通过BGP发出的流量,路由策略中拒绝的不再被传递
4、直接使用前缀列表实现过滤策略的目的
[r1]bgp 1
先逐条宣告明细路由:
[r1-bgp]network 20.1.1.0 24
[r1-bgp]network 20.1.2.0 24
然后再做聚合配置:
[r1-bgp]aggregate 20.1.1.0 22 //聚合路由和明细路由都会发送
先定义要过滤的路由条目
[r1]ip ip-prefix dd deny 20.1.1.0 24
[r1]ip ip-prefix dd permit 0.0.0.0 0 less-equal 32
直接在BGP邻居间调用该前缀列表
[r1]bgp 1
[r1-bgp]peer 12.1.1.2 ip-prefix dd export //通过BGP发出的流量,前缀列表中拒绝的不再被传递
四、认证–邻居间的身份核实,保证BGP邻居间更新的安全
[r1]bgp 1
[r1-bgp]peer 12.1.1.2 password cipher cisco123 两端的邻居配置需要一致
关于华为设备中,配置密码的时候cipher和simple区别:
此两种参数和明文或者是密文无关,在设备中显示密码时是否时密文的情况,simple则在dis cu时看到的是明文
五、BGP属性
华为设备中关于BGP属性,有6种基本属性。
因为BGP拥有严格的选路标准,所有最终会选出一条去往目标的路径,但是若去往某多个目标有多条路径时,为了不良妃链路
资源,往往要实行负载分担。
负载分担:访问不同的目标时,让流量使用不同的链路进行通讯,能够将所有的链路利用起来,而不是仅用一条通讯
负载均衡:访问同一个目标,让流量基于不同的链路通讯。
通过路由策略对BGP的选路进行干涉,通常是在BGP的路由传输的控制层面路径上的接口的出/入方向实施。
1)属性1:c,此属性为私有属性
传播范围:不传播
默认值:0
大优/小优:大优
[r3]bgp 2
[r3-bgp]peer 4.4.4.4 preferred-value 2 //全局下修改Preference_Value属性值
此处表示所有从4.4.4.4邻居处来的路由此属性均为2
若想实现负载分担,必须使用路由策略:
[r3]ip ip-prefix pv permit 1.1.1.0 24
[r3]route-policy pv permit node 10
[r3-route-policy]if-match ip-prefix pv
[r3-route-policy]apply preferred-value 3
[r3-route-policy]qu
[r3]route-policy pv permit node 20
[r3-route-policy]qu
[r3]bgp 2
[r3-bgp]peer 2.2.2.2 route-policy pv import
入方向的原因:因为该属性不传递,只能影响本地对于路由条目的选择,所以只能在入向调用,
影响的是本地BGP路由表的生成
(2)属性2:local-preference,本地优先级
本地优先级:一个公有属性,也是最常用于干涉IBGP选路
传播范围:IBGP邻居间
默认值:100
大优/小优:大优
[r4]bgp 2
[r4-bgp]default local-preference 104 //全局修改本地优先级
此时,R4本地所有传递到IBGP邻居关系的路由条目,本地优先级均为104
负载分担实现方式:
[r4]ip ip-prefix lp permit 1.1.2.0 24
[r4]route-policy lp permit node 10
[r4-route-policy]if-match ip-prefix lp
[r4-route-policy]apply local-preference 101
[r4-route-policy]qu
[r4]route-policy lp permit node 20
[r4-route-policy]qu
[r4]bgp 2
[r4-bgp]peer 3.3.3.3 route-policy lp export
调用时在控制层面的出或者入方向均可,但是一定注意必须为IBGP邻居
注:本地优先级的属性,在联邦内的EBGP邻居关系间可以使用。
联邦内的EBGP邻居关系是IBGP的属性
3)属性3:AS-path,路由在传递的过程中,会添加经过的AS号
此属性用于选路的规则是优选经过的AS数量少的路径。该属性的添加实在EBGP邻居关系间进行的。
[r2]ip ip-prefix as permit 1.1.2.0 24
[r2]route-policy as permit node 10
[r2-route-policy]apply as-path 3 4 5 additive
[r2]route-policy as permit node 20
[2-route-policy]qu
[r2]bgp 2
[r2-bgp]peer 12.1.1.1 route-policy as import
此属性可以在控制层面的出或者入向调用,但是只能在EBGP邻居之间操作,可以干涉EBGP和IBGP关系选路。
出向调用时,AS路径编号为 X 3 4 5 X为实际经过的AS号,最前端的号码就是最新的AS号
入向调用时,AS路径编号为 3 4 5 X
切记:因为AS属性又被用于EBGP水平分割,若人为策略添加的AS号,在网络的后端实际存在,则会影响后端AS的路由学习,
解决方案:重复添加经过的AS编号
[r1-route-policy]apply as-path 1 1 1 additive
4)属性4:起源属性–BGP路由条目的产生方式
network 宣告进本地路由表中的任意路由
egp 通过早期egp协议学习的路由重发布进BGP协议时
import 将本地通过其他协议学习到的路由重发布进BGP时
根据起源属性的不同,可以通过策略干涉选路。
i>e>? 选路规则
实现负载分担:
[r2]ip ip-prefix og permit 1.1.2.0 24
[r2]route-policy og permit node 10
[r2-route-policy]if-match ip-prefix og
[r2-route-policy]apply origin egp 2 //此处2为对端邻居所在的AS号
[r2]route-policy og permit node 20
[r2-route-policy]qu
[r2]bgp 2
[r2-bgp]peer 3.3.3.3 route-policy og export
5)MED:多出口的鉴别属性
BGP协议默认不存在COST值;MED的就是人为的利用路由器的选录规则–先比较优先级,在比较度量值来干涉选路的。
管理员可以在控制层面路由传递时,手工修改MED值,用于干涉EBGP邻居的选路。
最常用于AS1干涉AS2对于AS1的选路
负载分担实现方式:
[r1]ip ip-prefix med permit 1.1.2.0 24
[r1]route-policy med permit node 10
[r1-route-policy]if-match ip-prefix med
[r1-route-policy]apply cost 8
[r1-route-policy]qu
[r1]route-policy med permit no 20
[r1-route-policy]qu
[r1]bgp 1
[r1-bgp]peer 12.1.1.2 route-policy med export
由于实际工程中,管理员只能在一个AS中配置,故无法通过查看BGP表来判断选路结果,可以通过扩展ping来解决
六、BGP选路规则:比较前提,多条BGP路由目标相同,且均可优(下一跳可达、同步关闭),具有相同的优先级(管理距离)
1、优选Preference_Value值最高的路由(私有属性,仅本地有效)。
不传递 权限最高属性 可以干涉EBGP/IBGP选路
2、优选本地优先级(Local_Preference)最高的路由。
IBGP邻居关系间传递 ,最常干涉IBGP关系的选路
3、优选手动聚合>自动聚合>network>import>从对等体学到的。
4、优选AS_Path短的路由。
EBGP/IBGP关系均可被干涉,但只能在EBGP邻居间修改;
5、起源类型IGP>EGP>Incomplete。
起源属性 i优于e优于?; 可在控制层面任意接口修改;
6、对于来自同一AS的路由,优选MED值小的。
默认为0,宣告或重发布(关闭自动汇总)路由时携带本地到达目标的cost
最常用于干涉EBGP选路的属性
7、优选从EBGP学来的路由(EBGP>IBGP)。
8、优选AS内部IGP的Metric最小的路由。
9、优选Cluster_List最短的路由。
10、优选Orginator_ID最小的路由。
11、优选Router_ID最小的路由器发布的路由。
12、优选具有较小IP地址的邻居学来的路由。
七、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作用一致