Ⅰ、什么是BGP
BGP(Border Gateway Protocol,边界网关路由协议),为无类别路径矢量路由协议,主要作用是在AS之间传递路由信息。BGP的自治系统通过AS号区分,AS号取值范围0-65535,其中1-64511为公有AS号,64512-65535是私有AS号。目前BGP有4个版本:V1、V2、V4、V4+(即MBGP)。
Ⅱ、BGP的特点
①无类别路径矢量(距离矢量的升级版,AS-BY-AS),路径矢量信息中包含一个BGP自治系统号列表,BGP路由器不接受路径列表中包含其AS号的路由更新,是无环路的,BGP支持对BGP自治系统路径应用路由策略,BGP路由器只能将其使用的路由通告给邻接自治系统中的对等体。
②使用单播更新来发送路由信息,基于TCP179端口工作
③增量更新–仅触发无周期(因为其携带的是一个AS的路由,更新量庞大)
④具有丰富的属性来代替IGP中的度量来进行选路
⑤可以进行强大的策略
⑥默认不被用于负载均衡,通过各种选路规则仅产生一条最佳路径
⑦支持认证和聚合
Ⅲ、BGP的TCP传输
tcp–三次握手–单播–非直连建邻–前提可以ping通
EGP协议承载于igp协议之上:
1,非直连建邻时,需要设备间IP可达,通过igp来完成;
2,bgp传输的实际是igp计算所得路由
BGP使用TCP为传输层协议, TCP端口号179。BGP路由器之间建立TCP连接,这些路由器称为BGP对等体也叫BGP邻居:EBGP、 IBGP。邻居之间交换整个BGP路由表, BGP路由器只进行增量更新。BGP通告成千上万的路由,可采用TCP滑动窗口的机制。
Ⅳ,bgp的工作过程:
①igp–ip可达,建邻设备间可以通讯
②通过三次握手建立tcp会话
③收发open报文,建立邻居关系,生成邻居表
④使用update包共享本地路由信息给邻居,生成bgp表------所有本地接收以及发送的路由信息
⑤默认将bgp表中最优路径装载于路由表中;收敛完成,仅keeplive包周期保活
注:所谓的最优路径,是指bgp所认为接收到的路由,参数相比之下较好的路径,不一定是真正意义上的最优路径
Ⅴ、BGP的三张表
(1)邻居表: 邻居列表 show ip bgp summary。
(2)BGP表: show ip bgp 包含了从邻居学习所有路由,以及到达目的网段的多个路径和属性。
(3)路由表: 列出了到达目的网段的最佳优路径。 路由器将BGP表中最佳路由提供给IP路由表
Ⅵ,EBGP和IBGP
EBGP: BGP位于不同自治系统的路由器之间,称为EBGP(不同AS设备建立的邻居关系,通过ebgp邻居学习的路由管理距离为20)。建立EBGP邻居关系,必须满足三个条件 (1)EBGP之间自治系统号不同;(2)neighbor中指定的IP地址要可达;(3)定义邻居建立TCP会话。
IBGP:BGP位于同一个自治系统的路由器之间运行,用于同一个AS中交换BGP信息(同一AS设备建立的邻居关系,通过ibgp邻居学习的路由管理距离为200)。建立IBGP邻接关系,满足的条件:(1)自治系统号相同;(2)定义邻居建立TCP会话;(3)IBGP邻居可达。
区别:
(1)EBGP—外部边界网关协议主要作用是在不同的自治系统间交换路由信息。
IBGP—内部边界网关协议主要作用是在一个自治系统内部交互路由信息。
(2)EBGP一般情况下都要求EBGP邻居之间存在物理连接,
IBGP不需要IBGP邻居之间必须有物理连接(非直连建邻),只需要逻辑连接即可(IGP通告路由)。
(3)从EBGP邻居学到的路由通告给IBGP和EBGP;
从IBGP邻居学到的路由,是否通告给自己EBGP邻居,要根据AS内的BGP和IGP路由表是否同步而定,但不会再通告给IBGP邻居(水平分割,防止环路
(4)EBGP防止环路通过AS_PATH属性来实现。
IBGP和EBGP使用的BGP属性不同,例如IBGP可以传递LOCAL_PREF(本地优先级属性),而EBGP不行。
Ⅶ、BGP防环–水平分割
【1】EBGP水平分割----防止EBGP邻居间的环路;
在BGP协议的属性中存在一个AS-pash属性—记录经过的每一个AS号;
接收到的路由条目中,若存在本地的AS号将拒绝接收
【2】IBGP水平分割;
基于AS-BY-AS规则,一条路由在一个AS内部传递时,默认属性无变化;
IBGP水平分割规则----从一台IBGP邻居处学习到的路由不得传递给另一个IBGP邻居;
注:该规则迫使全网所有BGP设备间均需要进行邻居关系建立配置;配置量几何增长;
可以使用联邦和路由反射器来打破;
路由反射器—RR(路由器反射器-中心设备)、客户端、非客户端
RR与客户端、非客户端必须是IBGP邻居关系,构建一个簇(组);
在一个簇中RR有且仅有一台,客户端至少存在一台;
RR仅反射路由给自己的IBGP邻居;
规则:
1、RR从EBGP邻居处学习到的路由,传递给客户端、非客户端、EBGP邻居;
2、RR从客户端学习到路由,传输给本地的其他客户端、非客户端、EBGP邻居;
3、RR从非客户端学习到的路由,传输给本地的其他客户端、EBGP邻居,不传输给其他的非客户端;
切记:RR只能反射本地优的路由条目;
r3(config)#router bgp 2
r3(config-router)#neighbor 4.4.4.4 route-reflector-client
4.4.4.4成为本地的客户端,同时本地成为RR;
切记:一旦一台设备成为RR或者客户端;在模拟器上配置 next-hop-self 是生效的;当在真机设备将无效;只能使用route-map来取代
r2(config)#route-map ww permit 10
r2(config-route-map)#set ip next-hop peer-address
r2(config-route-map)#exit
r2(config)#router bgp 64512
r2(config-router)#neighbor 3.3.3.3 route-map ww out
r2(config-router)#end
r2#clear ip bgp * soft
联邦 —在一个真实的AS内部构建多个虚拟的小AS;
对于其他的大AS来说,只能看到大AS号;
小AS建议使用私有的AS编号;
小AS间构建—联邦内的EBGP邻居关系;这种关系间路由条目可以传递,但不修改属性,学习的路由管理距离为200;
配置:
【1】启动及所有的配置均基于小AS编号进行
【2】联邦内所有设备声明自己的大AS号
r2(config)#router bgp 64512
r2(config-router)#bgp confederation identifier 2
【3】小AS间互指peer–配置点为联邦内的EBGP邻居关系设备
r3(config-router)#bgp confederation peers 64513 对端的小AS号
总结:在实际的使用中,建议反射器和联邦技术结合使用;
Ⅷ,bgp的路由黑洞
因为BGP协议可以非直连建邻,这样在一个AS内部就允许出现不运行BGP协议的路由;
导致BGP可以邻居间正常传递路由,实现控制层面可达,但数据层面在未运行BGP协议的设备上不可达;
解决方案:
1)物理链路全连–所有BGP设备间直连,不能非直连建邻;
2)邻居关系全连–所有设备运行BGP;
3)将BGP路由条目重发布到IGP;(LAB)
4)最佳方案—MPLS-多协议标签交换;
Ⅸ,BGP配置
BGP建立邻居关系 ----因为单播建邻,故建立邻居关系和宣告路由是分开进行;
r1(config)#router bgp 1 启动协议时携带真实的AS号,无多进程概念
r1(config-router)#bgp router-id 1.1.1.1 配置RID---手工--环回接口--物理接口
1)直连的EBGP邻居关系建立
r1(config-router)#neighbor 12.1.1.2 remote-as 2
邻居的IP地址及所在的AS
2)IBGP邻居关系建立;实际网络中,IBGP邻居间一般存在多条路径,使用环回接口地址作为源、目标地址来建立邻居关系,可以同时基于多条路径传输,且邻居关系更稳定
r2(config)#router bgp 2
r2(config-router)#neighbor 3.3.3.3 remote-as 2
一旦将目标地址修改为对端环回接口,本地也需要将源地址修改本地的环回接口
r2(config-router)#neighbor 3.3.3.3 update-source loopback 0
3)EBGP邻居间存在多条链路时,为同时使用这些链路,建议使用环回接口作为源/目IP地址建立邻居关系
{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}建立BGP邻居关系
r4(config-router)#neighbor 5.5.5.5 remote-as 3
r4(config-router)#neighbor 5.5.5.5 update-source loopback 0
{3}默认IBGP邻居间数据包TTL=255,EBGP邻居间TTL=1;
故一旦使用环回地址建立EBGP邻居关系,那么必须修改TTL值;
r4(config-router)#neighbor 5.5.5.5 ebgp-multihop ?
<1-255> maximum hop count
<cr> 255
建邻配置完成后,邻居间通过三次握手建立TCP会话;
r1#show tcp brief
TCB Local Address Foreign Address (state)
6427FFF0 12.1.1.1.179 12.1.1.2.36113 ESTAB
两端均为向另一端发起TCP会话建立请求,但将随机断开一条;
TCP会话建立后,BGP协议将发出open报文,建立BGP的邻居关系;生成邻居表:
r1#show ip bgp neighbors 查看邻居表,该表过大,不易查看
r1#show ip bgp summary 查看关系汇总信息
BGP router identifier 1.1.1.1, local AS number 1
BGP table version is 1, main routing table version 1
Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd
12.1.1.2 4 2 8 8 1 0 0 00:04:19 0
状态处的阿拉伯数字标识从该邻居处学习到的路由条目数量;
此处若为数字也同时标识已经建立了邻居关系;
bgp的宣告:
r1(config)#router bgp 1
r1(config-router)#network 1.1.1.0 mask 255.255.255.0
切记:BGP协议只能逐条宣告本地路由表中的内容(不关注条目的产生方式);宣告时必须和表中的记录完全一致;
一旦进行了路由条目的宣告,本地就生成BGP表;–本地收发到的所有路由条目,基于update发送;
r1#show ip bgp 查看BGP表
BGP table version is 2, local router ID is 1.1.1.1
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path
*> 1.1.1.0/24 0.0.0.0 0 32768 i
状态 目标网络号 各种属性
‘*‘标识条目可用----可以加表–路由表
不可用的情况----*被r取代 ----不装载—本地路由表中已经通过其他更好的方式获取路由
*被s取代 ----抑制–人为的策略限制条目的传递
‘>’标识条目优秀-----可以加表,可以传递—可以加载路由表,可以传递给邻居 优秀的条件:
1、同步问题—本地IGP已经学习到了该BGP路由才能优
该规则的目的在于避免路由黑洞,当条件苛刻;故在IOS版本12.2(8)T以上默认关闭;
r3(config)#router bgp 2 r3(config-router)#no synchronization
2、下一跳可达问题;因为AS-BY-AS,条目在传递给IBGP邻居时,属性默认不变,故从IBGP邻居学习到的路由,下一跳不变;当路由传递给EBGP邻居时,下一跳自动修改为本地;
r2(config)#router bgp 2 r2(config-router)#neighbor 3.3.3.3 next-hop-self
将路由传递给邻居3.3.3.3时,修改属性中的下一跳地址为本地
使用字母i标识通过IBGP邻居学习的路由;
注:条目必须优并且可用才能加表;仅优即可传递,前提为不能被S抑制;
注意:1、在BGP协议中宣告路由条目时,将携带本地到达这些目标地址的度量值,便于其他AS设备判定本地AS中那台EBGP邻居更靠近目标;
2、若通过一个IBGP邻居学习到的路由中存在度量值,那么再传递给本地的EBGP邻居,将度量清0;
总结:建议所有存在EBGP邻居的设备,均分别宣告本AS的路由,来方便其他AS对本AS的选路;
Ⅹ BGP的 属性–各种参数,存在排序;修改属性可以直接干涉BGP的选路
【1】Weight
Cisco私有属性 , 不传播 , 本地优先级32768,邻居为0 ,数值越大越优
全局修改 ,范围 0-65535
r4(config)#router bgp 2
r4(config-router)#neighbor 3.3.3.3 weight 1
r4(config-router)#end
r4#clear ip bgp * soft
本地所有从3.3.3.3学习的路由,权重值修改为1;
负载分担:基于不同的目标选择不同的最佳路径;
r4(config)#ip prefix-list w permit 2.2.2.0/24 定制前缀列表
r4(config)#route-map w permit 10 定制route-map
r4(config-route-map)#match ip address prefix-list w
r4(config-route-map)#set weight 1 修改权重值
r4(config-route-map)#exit
r4(config)#route-map w permit 20 做空表
r4(config-route-map)#exit
r4(config)#router bgp 2
r4(config-router)#neighbor 3.3.3.3 route-map w in
r4(config-router)#end
r4#clear ip bgp * soft 软重启
注:调用时只能在本地的控制层面入向,因为该属性不传播;
【2】本地优先级
公有属性,最常用于干涉IBGP邻居关系选路;
传播范围: IBGP邻居关系间
默认值:100
范围:0-255
全局修改:
r3(config-router)#bgp default local-preference 101
r3(config-router)#end
r3#clear ip bgp * soft
本地发送给所有IBGP邻居的路由,优先级均修改为101;
负载分担:基于部分的路由进行修改,可以在控制层面流量的入或出接口上修改;
但必须为IBGP邻居关系;
r4(config)#ip prefix-list l permit 2.2.2.0/24 前缀列表抓取流量
r4(config)#route-map l permit 10
r4(config-route-map)#match ip addres prefix-list l
r4(config-route-map)#set local-preference 101
r4(config-route-map)#exit
r4(config)#route-map l permit 20
r4(config-route-map)#exit
r4(config)#router bgp 2
r4(config-router)#neighbor 3.3.3.3 route-map l in
r4(config-router)#end
r4#clear ip bgp * soft
【3】优选本地下一跳
【4】AS-PASH 条目在传递过程中记录经过的AS编号;优选经过数量最少的路径;AS的增加只能在EBGP邻居关系间进行;管理员可以策略在EBGP邻居关系间增加AS的数量,不能减少;虽然只能在EBGP邻居关系间修改,当依然可以干涉到IBGP关系下的选路;由于只能增加,故修改A路径,优选B路径;
r1(config)#ip prefix-list as permit 2.2.2.0/24
r1(config)#route-map as permit 10
r1(config-route-map)#match ip address prefix-list as
r1(config-route-map)#set as-path prepend 3 4 5
r1(config-route-map)#exit
r1(config)#route-map as permit 20
r1(config-route-map)#exit
r1(config)#router bgp 2
r1(config-router)#neighbor 12.1.1.2 route-map as in
r1(config-router)#end
r1#clear ip bgp * soft
注:只能在EBGP邻居间的控制层面干涉选路;
入向调用—3 4 5 x,X为真实经过过的编号
出向调用—X 3 4 5 ; 最前端AS为最新经过的编号;
注:AS-pash属性还用于EBGP水平分割,若人为添加的AS号,在网络的后方真实存在,那么这些路由将无法进入这些AS;可以重复添加已经经过的AS号;或者添加私有的AS号;
r1(config)#route-map as permit 10
r1(config-route-map)#set as-path prepend 1 1 1
【5】起源属性
Origin codes: i - IGP, e - EGP, ? -incomplete
所谓起源属性,及条目是通过什么方式进入到BGP协议来的;
使用 i 标识network --管理员宣告条目
使用 e 标识通过早期的EGP协议学习后,重发布到BGP来的
使用 ? 标识通过IGP学习,重发布到BGP协议
规则:i优于e优于?
r1(config)#ip prefix-list o permit 2.2.2.0/24
r1(config)#route-map o permit 10
r1(config-route-map)#match ip address prefix-list o
r1(config-route-map)#set origin egp 2 修改为e,数字为对端邻居所在AS编号
r1(config-route-map)#exit
r1(config)#route-map o permit 20
r1(config-route-map)#exit
r1(config)#router bgp 2
r1(config-router)#neighbor 4.4.4.4 route-map o out
r1(config-router)#end
r1#clear ip bgp * soft
【6】MDE–多出口鉴别属性–度量值
BGP协议不存在度量值,当管理员可以人为去赋值,来干涉选路;
可用于干涉EBGP/IBGP邻居下的选路,当最常用于干涉EBGP邻居间的选路;
例:AS1干涉AS2对AS1的选路
r2(config)#ip prefix-list med permit
2.2.2.0/24
r2(config)#route-map med permit 10
r2(config-route-map)#match ip address prefix-list med
r2(config-route-map)#set metric 1
r2(config-route-map)#exit
r2(config)#route-map med permit 20
r2(config-route-map)#exit
r2(config)#router bgp 1
r2(config-router)#neighbor 12.1.1.1
route-map med out
r2(config-router)#end
r2#clear ip bgp * soft
使用扩展ping来进行检测:
r2#ping
Protocol [ip]:
Target IP address: 4.4.4.4
Repeat count [5]:
Datagram size [100]:
Timeout in seconds [2]:
Extended commands [n]: y
Source address or interface: 2.2.2.2
Type of service [0]:
Set DF bit in IP header? [no]:
Validate reply data? [no]:
Data pattern [0xABCD]:
Loose, Strict, Record, Timestamp,
Verbose[none]: r
11.BGP选路规则
比较前提–同步被关闭、下一跳可达;均可优
1、首先比较weight 大优–不传递 ,Cisco私有 EBGP/IBGP
2、比较本地优先级,默认100;仅IBGP邻居传递,大优 IBGP
3、优选本地下一跳
4、比较as-pash,经过的AS数量少优,EBGP邻居可增添 EBGP/IBGP
5、起源码最小 i-igp=0 e-egp=1 ?-incomplete=2 EBGP/IBGP
6、MED值最小 EBGP/IBGP
7、普通的EBGP邻居优于联邦内EBGP邻居优于IBGP邻居
8、优选最近的IGP邻居(IGP度量小)
9、优选最先建立EBGP邻居
10、最小BGP邻居的RID
11、优选最小的RR list 列表
12、若收到到达同一目的地两条均可优的EBGP路由,可以人为实现负载均衡
r2(config)#router bgp 1
r2(config-router)#maximum-paths 2