最新最详细BGP的学习笔记.docx
《最新最详细BGP的学习笔记.docx》由会员分享,可在线阅读,更多相关《最新最详细BGP的学习笔记.docx(32页珍藏版)》请在冰豆网上搜索。
最新最详细BGP的学习笔记
BGP第一节:
IBGP邻居(所用的版本是4)
IBGP邻居:
通常运行在同一个AS内。
AS:
就是一组被统一管理的路由器。
这组路由器的特点:
使用相同的内部网关协议,统一的度量值。
特点:
可以直连,也可以不直连,但是底层必须能够访问。
AS号在eigrp的作用就是用于邻居的建立。
在BGP中可以理解为是不同的运营商。
bgp的AS号是需要申请的。
具体的配置:
neighbor邻居Ipremote-asAS号
showcontrollersserial0/0
查看某接口是DCE还是DTE。
配置时钟速率:
clockrate64000
一定要在DCE端配置时钟速率。
R1与R2建立邻居
BGP的三张表:
邻居表:
BGP的邻居关系不会自动建立,需要单播进行指邻居。
(保留对端的AS号码)
BGP表:
收集所有的路由信息,并且保留BGP的所有属性--------更好的做人为控制。
BGP的管理距离值:
20和200;20是从EBGP学过来的路由,200是从IBGP学过来的路由。
路由表:
BGP的报文:
Open:
Keepalive:
激活(hold时间不一样,邻居可以建立,它会进行协商选择时间小的,并且它的keepalive的时间自动调整为Hold时间的1/3。
如果hello时间为0则BGP的邻居不down)
(需要注注意的是:
hello时间不一样,ospf的邻居将不会建立)
修改命令;timesbgp1030
Update:
包括路由器的属性,还有我BGP的路由信息。
Notification:
如果两端的AS号不一致,则会出现NOTIFICATION这个报文。
-------BGP建立出错的时候也会出现这个报文。
(2):
清除了BGP的邻居关系时,也会出现这种报文。
BGP的经典案例(IBGP)
解决方法:
如果有多条链路,就要建立多个邻居关系。
用物理接口建立邻居;不太可行(不太稳定),但是所出现的问题能解决。
用这种方法所出现的问题:
设备的消耗(内存,CPU)
第二中的解决方法:
就是邻居地址起环回口。
(提供了邻居关系的备份)
这样的解决方案是最优的。
为什么做是最优的?
用环回口建立邻居可以使的邻居关系更稳定,因为如果是接口建立,一出现接口动荡就会影响邻居关系,用环回口会一直在。
环回口还可以使链路有冗余。
但是需要解决两问题:
1:
底层路由可达性
2:
就是对源的检测(比较我neighbor地址是否是对端的发包地址的源地址)
源检测就是检测数据包的源地址是否是neighbor后的地址
如果要想邻居建立则如图
该怎么解决呢?
根据命令修改。
Neighbor(ip-address)update-sourceinterface-typeinterface-number
R1
Neighbor2.2.2.2update-sourceloopback0
R2
Neighbor1.1.1.1update-sourceloopback0
需要注意的是:
该命令通常用在建立IBGP邻居。
如果R2开启了源检测,则那一个端口是TCP端口。
(提供服务的端口,或者是目的端口)
R2是TCP端口。
查看命令showipbgpnei
Showtcpbri
BGP的同步技术
如果不是通过IBP得到的路由,或者是不可到达广播的下一跳,就不能把IBGP学到的路由,安装在路由表中,这就是同步。
EBGP邻居的建立
建立EBGP所遵循的规则;
1:
解决问题是路由。
(通常AS与AS之间有两种路由,一种是静态路由,另一种是缺省路由。
)--------底层可达
2:
更新源的问题
3:
检测直连路由(TTL默认1)如果TTL值为0,路由器将会把包丢弃。
以环回接口来建立EBGP邻居,如果TTL值为1.则BGP不会发包,所以要修改TTL值。
命令:
neighbor(ip-address)ebgp-multihop+(ttl值)
总结:
1:
如果用的是直连接口,不管建立的是EBGP还IBGP,只需neighbor一条命令。
2:
如果用环回接口来建立IBGP邻居,需要两条命令
(1)neighborXXXremote-as+AS号
(2)Neighbor(ip-address)update-sourceinterface-typeinterface-number
3:
如果用环回接口来建立EBGP邻居,需要用三条命令:
(1)neighbor
(2)Neighbor(ip-address)update-sourceinterface-typeinterface-number
(3)neighbor(ip-address)ebgp-multihop+(ttl值)
注意的是;
BGP的连接关系凌驾与IGP之上。
(BGP的邻居的建立需要igp,但是我bgp的路由的传递不需要igp的)
如果两AS与AS之间用的是静态路由,则邻居将会建立。
如果两AS与AS之间用的是缺省路由,则邻居将不会建立。
原因是:
BGP建立邻居需要在路由表里找到邻居Ip地址的明细路由,如果没有明细路由邻居将不能建立。
假如:
R1静态路由(发包)
R2缺省路由showtcpbri179
实验:
EBGP建立邻居一般用直连接口建立。
showrunning-config|beginbgp
第二部分:
邻居已建立,但是路由器的BGP表是空的,需要我们手工指定的。
比较特殊的是ebgp的network和IBGP不一样,EBGP的network叫通告路由。
BGP路由的通告
邻居已建立,但是路由器的BGP表是空的,需要我们手工指定的。
就是没有BGP路由。
解决方法:
就是用通告路由技术。
就是BGP的network
比较特殊的是IGP的network和EGP不一样,EGP的network叫通告路由。
IGP的network是匹配接口范围。
(属于这个范围的接口,都能network)
第一个问题:
BGPnetwork所遵循的规则;
1:
不能随便network,比如是自己路由表中不存在的路由条目,BGP就不能network。
2:
BGPnetwork时首先检测自己的路由表,如果路由表中有这条路由条目,则这条路由就能被BGPnetwork.
如果没有就不能network。
(除去路由条目的前面标识为B的路由条目)
RouterbgpAS号
Networkxxxxmaskxxxx
一般从EBGP邻居学来的路由,都是可优的。
只有优化的路由才能被传递。
bgp的路由传递不借助底层链路。
第二个问题:
从IBGP学来的路由让它可优遵循两条件:
1:
同步》我BGP的路由和IGP的路由相同。
也可以说我BGP有的路由条目,我IGP也有。
iproutexxxxxxxxnull0(不同放入路由表,该方法不可行)
2:
下一跳可达
主要看自己的路由表中有没有下一跳可达路由的网段。
如果没有,用BGP欺骗的方法给自己的路由表中加入该网段。
命令:
iproutexxxxxxxxnull0(不可行,但是能解决)
正确的解决方法:
Neighbor(ip-address)next-hop-self
需要注意的是:
(一般跳数是根据AS来算的,在一个AS内部跳数不会发生改变)
接下来就是解决同步问题:
1:
重分布,把bgp额路由条目重分布到,OSPF中,这种是一种方法。
2:
关闭同步nosynchronization关闭同步的条件。
解决BGP的路由黑洞
1:
全网互联
2:
联邦
3:
路由反射器
另一种邻居的建立
Neighborpeer-group-namepeer-group
当一个路由器尝试与多个路由器之间建立BGP邻居关系时,并且我和这几个邻居路由器之间的路由条目或者做的路由的策略相同时,这样我就会与这个组建立邻居。
条件就是:
必须把这几个路由器加入到这个组里。
需要用到的命令:
Neighbor组的名字peer-group
Neighbor邻居的地址peer-group组名
Peer-group的缺点:
当R2R3建立单独的策略时,out方向不行,in方向行。
优点:
1:
减少资源
2:
减少配置
BGP的五种状态
Idle查找路由表,找建立邻居的路由条目,如果有则进行TCP握手。
Active表明我的底层路由有,并且尝试的去建立邻居了。
Connect当完成了三次握手,就到了这状态了。
目的端口是179时,才会到这状态。
意味这TCP连接已经完成了。
Opensent发送BGP信息,路由信息
Openconfirm表示邻居已经建立。
Established
查看某路由器是否是给自己的邻居路由的命令:
Showipbgpneighbors对端邻居的地址advertised-routes
BGP邻居的认证
命令:
neighbor(ip-address/peer-group-name)passwordstring(密码)
注意:
bgp只支持MD5认证,不支持明文认证。
认证成功的标志:
就是对端发送过来的hash与自己本端的hash值进行对比。
如果相同,则表明认证成功。
反之,则认证不成功
清除BGP表的方式
清除BGP表的方式有两种:
1:
硬清除hardresetclearipbgp*/clearipbgp+邻居地址
2:
软清除softresetclearipbgp+(邻居地址/*)softout(只对out方向进行清理)
对in方向的清理命令:
clearipbgp+邻居地址soft-reconfigurationinbound
clearipbgp+(邻居地址/*)softin
这几条命令的用途:
配置路由器的策略时。
主要对bgp的策略起来的速度快点
IBGP的水平分割技术
解析该试验;
R4将自己的4.4.44network后,查R2的bgp表,得到的结果是该路由是优化的,在查看R1是该路由没有优化,(解决方法就是在R2上修改下一跳)这样这条路由就优化了。
但是在查看R3时,发现R3的bgp表中就没有这条路由条目,(不管是优化的,还是没有优化的都没有)。
根据这条命令查看(Showipbgpneighbors对端邻居的地址advertised-routes)得到结果就是R1就没有给R3发送这条路由。
造成这样的后果的原因就是,IBGP的水平分割。
解决以上出现的问题就是:
1:
R2与R3之间建立IBGP邻居。
2:
创建路由反射器
IBGP的水平分割:
(路由黑洞)
就是从IBGP邻居学习到的一条路由,我就不会再把这条路由在传递我的IBGP邻居。
解决IBGP水平的方法:
1:
R2与R3建立IBGP邻居。
2:
全网互联
3:
路由反射器
4:
联邦
第一部分:
路由反射器(RR)
路由反射簇:
一组路由器的集合
解释图中的角色:
RBRCRD是一个路由反射簇。
RCRD是一个路由反射簇中的客户端
RB是反射器
RE是非客户端
RA是EBGP邻居
杰克的三句话:
1:
从我的路由反射簇中的组成员,传过来一条路由,我会把它反射给我的另一个客户端,我会把它反射给我的一个非客户端。
同时也反射给我的一个EBGP邻居。
2:
角色介绍:
RBRD是一个路由反射簇
RB是反射器
RD是客户端
一个普通运行BGP的路由器,传过来一条路由,给RR,RR会给我的客户端,RR也会给我的EBGP邻居。
但不会传给我的另外一个普通的IBGP邻居。
3:
角色介绍:
RBRD是一个路由反射簇
RB是反射器
RD是客户端
3:
从我EBGP传过来的路由,当达到RR之后,RR会反射给我的另一个EBGP邻居,RR也会反射我的客户端,RR也会反射给我的另外一个普通IBGP邻居。
总结:
路由反射簇=大的路由器
实验:
主要的配置就是在反射器上,配置一条命令:
Neighbor(对端邻居的地址)route-reflector-client
这样做的效果就是让R3R5把4.4.4.4这条路由优化。
配置路由反射器簇ID:
bgpcluster-idxxxx(它会随机产生的)
这簇id与BGP的选路的时候会考虑到簇id,进过的RR越多,则簇id越长。
作业:
分析实验拓扑。
会出现什么情况呢?
主要的两句话:
1:
我们把路由反射簇当做一个大的路由器。
我路由反射器与client共同构成了路由反射簇。
2:
这个路由反射簇只有RR知道。
就是在这个路由反射簇中只有server知道client,但是client不知道server。
以上的两句话是解决以上实验拓扑的钥匙。
认真研究。
联邦技术
主要就是在大的AS中划分成几个的小的联邦。
需要一个联邦的AS号(私有的)
说明:
R2与R1组的AS号是:
65001
R3组的AS号是:
65002
在大的AS=123中建立两个小联邦,联邦的标识用联邦的AS来标识。
需要注意的是:
R2与R1建立
bgpconfederationidentifier123)这句话配在建立联邦的每一个路由器上。
这句话的作用就是:
告诉我EBGP邻居,我的AS号是123.
R2R4建立的是EBGP邻居时,只要配置这一条命令,邻居就会起来,但是如果向R3R5建立的是IBGP邻居时。
这条命令不能让邻居起来。
解决的方法:
R1与R3建立的是联邦的EBGP,R2与R1建立的IBGP不一样。
R1与R3在大的AS=123中建立的是联邦的EBGP,而且是用环回口建立的所以要敲三条命令
:
Neighbor环回remote-asAS号
Neighbor环回update-soure
Neighbor环回ebgp-multihop
建立联邦必须要打的命令:
bgpconfederationpeers+邻居的AS号
作用就是除去这个AS号,其他的是As是123
bgpconfederationidentifier123
主要作用就是。
来联邦内部的路由器向外部宣告自己是AS=123
一定要注意的是在建立R4与R2和R3与R5,邻居时其实就要就要这样配:
Routerbgp400
Neihbor192.169.24.2remote-as123
小技巧:
检测下一跳是否可达,拼下一跳就会判定出来。
BGP聚合技术
作用:
减少路由条目
BGP的路由聚合可以在任何路由器上做聚合。
第一种方法:
有两步:
1:
在路由表中加一条:
iproute+(明细的聚合路由)maskxxxxnull0(防止打环)
2:
再把这条聚合路由networkBGP表中。
需要注意的是:
把明细的路由条目不要network到BGP表中。
如:
172.1.12.1
172.1.13.1
172.1.14.1
172.1.15.1
会聚后的地址:
172.1.12.1-----------255.255.252.0
第二种方法:
Routerbgp400
Aggregate-address172.1.12.0255.255.252.0summary-only
注意的是:
AS的丢失会造成路由环路。
AS可以防环。
2)“as-set”参数可以使BGP聚合路由不丢失原来的AS-PATH属性,从而避免路由环
路。
解决AS丢失的问题:
Routerbgp400
Aggregate-address172.1.12.0255.255.252.0summary-onlyas-set
这条命令的作用就是:
还原AS-path属性
实验图形:
这个实验比较简单,主要能体现出,还原AS-PATH属性的实验。
R1:
BGP表
NetworkNextHopMetricLocPrfWeightPath
*>1.1.0.0/240.0.0.0032768i
*>1.1.0.0/22192.168.13.300200i
*>1.1.1.0/240.0.0.0032768i
*>1.1.2.0/24192.168.13.30200300i
*>1.1.3.0/24192.168.13.30200300i
R2:
BGP表:
NetworkNextHopMetricLocPrfWeightPath
*>1.1.0.0/24192.168.23.30200100i
*>1.1.0.0/22192.168.23.300200i
*>1.1.1.0/24192.168.23.30200100i
*>1.1.2.0/240.0.0.0032768i
*>1.1.3.0/240.0.0.0032768i
R3:
BGP表
NetworkNextHopMetricLocPrfWeightPath
*>1.1.0.0/24192.168.13.100100i
*>1.1.0.0/220.0.0.032768i
*>1.1.1.0/24192.168.13.100100i
*>1.1.2.0/24192.168.23.200300i
*>1.1.3.0/24192.168.23.200300i
R4:
BGP表
NetworkNextHopMetricLocPrfWeightPath
*>1.1.0.0/24192.168.34.30200100i
*>1.1.0.0/22192.168.34.300200i
*>1.1.1.0/24192.168.34.30200100i
*>1.1.2.0/24192.168.34.30200300i
*>1.1.3.0/24192.168.34.30200300i
①路由器R1、R4收到“1.1.0.0/22”聚合路由,通过AS-PATH属性可以看出,执行地址聚合的路由器R2成为新路由的创造者,原来AS-PATH属性丢失;
②路由器R4同时也收到4条明细路由,在显示的AS-PATH序列中,路由的始发AS在
列表的末端(右侧),每个收到该路由,并把它传递给其它AS的BGP对等体会把它自己的AS追加在列表的开头(左侧);
③BGP路由器下一跳为“0.0.0.0”,表示该BGP路由起源本地,Weight值为“32768”;
④因为所有BGP路由条目的代码为“*>”,所以所有BGP路由条目都为最优。
R3路由器配置了路由聚合:
2)“as-set”参数可以使BGP聚合路由不丢失原来的AS-PATH属性,从而避免路由环路,在路由器R3上操作如下
aggregate-address1.1.0.0255.255.252.0as-set
BGP表的变化:
NetworkNextHopMetricLocPrfWeightPath
*>1.1.0.0/24192.168.13.100100i
*>1.1.0.0/220.0.0.010032768{100,300}i
*>1.1.1.0/24192.168.13.100100i
*>1.1.2.0/24192.168.23.200300i
*>1.1.3.0/24192.168.23.200300i
R4
NetworkNextHopMetricLocPrfWeightPath
*>1.1.0.0/24192.168.34.30200100i
*>1.1.0.0/22192.168.34.300200{100,300}i
*>1.1.1.0/24192.168.34.30200100i
*>1.1.2.0/24192.168.34.30200300i
*>1.1.3.0/24192.168.34.30200300i
①路由器R4上收到的汇总路由“1.1.0.0/22”中,AS-PATH包含了被聚合路由中所有
的AS号码的集合“{100,300}”;
②聚合路由正是由于携带了所有的AS,所以在路由器R1的BGP表中没有出现,当然
在路由器R2的BGP表中也不会出现。
【技术要点】
BGP使用AS-PATH属性作为路由更新的一部分来确保没有路由环路。
因为在BGP对等体
之间传递的每条路由都携带它所经过的AS号码序列表,如果该路由被通告给它始发的AS,
该AS路由器将在AS序列表中看到自己的AS,它将不接受该路由。
R3#showipbgpneighbor192.168.13.1advertised-routes
NetworkNextHopMetricLocPrfWeightPath
*>1.1.0.0/220.0.0.010032768{100,300}i
说明:
R3向R1发送了一条1.1.0.0/22这条路由聚合。
R1#showipbgpneighbors192.168.13.3received-routes
%Nosuchneighbororaddressfamily
路由器R1没有接收聚合路由“1.1.0.0/22”,因为它发现聚合路由条目中
的AS-PATH属性列表“{100,300}”中包含自己的AS号码100,所以不接收。
同理,路由器
R3也不会接收该聚合路由条目。
接下来这个实验有点难。
路由条目表项的状态代码
以上输出中,路由条目表项的状态代码(Statuscodes)的含义解释如下:
①s:
表示路由条目被抑制;
②d:
表示路由条目由于被惩罚而受到抑制,从而阻止了不稳定路由的发布;
③h:
表示该路由该路由正在被惩罚,但还未达到抑制阀值而使它被抑制;
④*:
表示该路由条目有效;
⑤>:
表示该路由条目最优,可以被传递,达到最优的重要前提是下一跳可达;
⑥i:
表示该路由条目是从IBGP邻居学到的;
⑦r:
表示将BGP表中的路由条目放入到IP路由表中失败。
以上输出中,起源代码(Origincodes)的含义解释如下:
①i:
表示路由条目来源为IGP;
②e:
表示路由条目来源为EGP;
③?
:
表示路由条目来源不清楚,通常是从IGP重分布到BGP的路由条目。
BGP的suppress-map参数的解释:
主要含义是:
如果有特殊的需求,在聚合后只抑制部分明细路由条目,参数“suppress-map”可以完成。
在做会聚路由的路由器上查看BGP表会出现一个情况:
路由器R3上所有被聚合的明细路由被标记为“s”,表示被抑制,不被送;
“summary-on