bgp个人总结.docx
《bgp个人总结.docx》由会员分享,可在线阅读,更多相关《bgp个人总结.docx(17页珍藏版)》请在冰豆网上搜索。
bgp个人总结
http:
//www.cidr-report.org
BGP中的三张表:
neighbortable、BGPtable(forwardingdatabase)、iproutingtable
BGP的四种报文:
open报文:
包括holdtime和BGProuter-id
router-id:
手工指定、loopback接口ip地址大的、物理接口IP地址大的
keepalive报文:
update报文:
路由更新报文
notification报文:
错误报告报文
EBGP:
在不同的AS之间建立,一般需直连20IBGP:
在同一个AS内建立,无需直连200
BGP的水平分割:
EBGP的水平分割:
不接收含有本AS号的BGP路由
IBGP的水平分割:
从IBGP的学过来的路由不会再通告给其他的IBGP邻居
如上图示:
A与B之间建立的是EBGP邻居,E与F之间建立的也是EBGP邻居,B与E之间建立的是IBGP邻居,C、D路由器没有运行BGP路由协议。
BE之间要建立IBGP邻居,则他们之间的要有到达彼此的路由,故在AS65102中必须运行IGP路由。
当所有BGP邻居都建立起来以后,我们来分析:
A通告出来的路由S通过EBGP可以传给B,B通过IBGP可以传给E,E再通过EBGP可以传给F,从控制层面来说,是通的(类似于ARP逐跳改变了源目IP地址);但是我们从数据层面来看一下,从F来的数据包要发给A,F通过EBGP交给E,E通过C或D交给B,但是由于C、D上没有运行BGP路由协议,根本就没有到达A的S路由,故数据包无法到达A。
------------------路由黑洞。
为什么C、D可以帮助传递路由信息而不能传递数据信息?
答:
因为BGP是通过TCP来建立连接的,A在将路由信息S发给B时,数据包的源目地址分别是A和B,B在将路由信息S发给E时,源目IP地址分别是S和E(通过IGP),E在将路由信息S传递给F时,其源目IP地址分别是E和F。
但数据包要从F交到A时,其目标地址一直是A,路由器C、D没有运行BGP协议,没有到达A的路由,故当E将此数据包交给没有运行BGP的路由器C、D时,数据包被丢弃。
路由黑洞的解决办法:
1、物理线路FULLMESH。
2、BGP邻居的FULLMESH。
3、BGP重分发进OSPF(LAB)。
4、MPLS
IGP中network的作用:
1、发hello包建立邻居(组播地址直接封装)
2、通告路由(只能通告相应接口的路由反掩码)
BGP中:
1、neighbor建BGP邻居(neighbor指定邻居再封装)
2、network宣告路由(只要是路由表中有的路由都可以宣告正掩码)
一般通过还回口建立IBGP邻居:
从稳定性的角度来考虑,但这样容易造成更新源的不一致
IGP通过组播地址发送hello报文,BGP中通过点对点的地址来发送open报文。
EBGP在配置了EBGP邻居之后,EBGP邻居关系能够马上起来,但是IBGP之间不能够马上起来必须要配置更新源,使得neighbor和更新源(US)一致。
例如:
EBGPA和B之间:
A:
B:
NEI:
11.1.1.2NEI:
11.1.1.1
US:
11.1.1.1US:
11.1.1.2
而IBGPB和E之间:
B:
E:
NEI:
3.3.3.3NEI:
2.2.2.2
US:
12.1.1.1.US:
13.1.1.1
不对称,需要用命令:
neighbor*.*.*.*update-source*修改open报文的源IP地址,使得更新源和neighbor都是同一对象,这样IBGP邻居才能起来。
注意:
原则上两边都要修改,但是实际上只要有一边配置了就可以了,建议两边都配置上。
如图所示的:
EBGP邻居之间有两条链路来实现冗余备份,这个时候一般就不使用物理端口来建立EBGP邻居,(达不到冗余备份的目的)。
此时一般也通过LP口来建立EBGP邻居,但是这个时候要注意修改TTL值,EBGP默认TTL值为1。
命令为:
neighbor*.*.*.*ebgp-multihop2后不跟数值,默认是255
同时通过静态路由来实现LP接口互通。
没有标示“>”的BGP路由(不是最优的)
1、不会放进路由表
2、不会给其他BGP邻居传
BGP路由优的条件:
1、同步(从IBGP学到的路由,不使用(不放进路由表)也不传给其他BGP邻居,直到从IGP也学到了这条路由)方法:
1、从IGP学到2、关闭同步功能
2、下一跳方法:
1、静态2、next-hop-self
命令:
nosynchronization
Neighbor*.*.*.*next-hop-self
Peergroup:
1、减小buffer大小
2、减少命令行
命令:
1、neighborwolfpeer-group给peer-group取一个名字
2、neighborpeer-groupremote-as*
3、neighborpeer-groupupdate-sourdeloopback0
可以把所有相同的命令写在一个模板中
BGP状态机:
Idle:
查找路由表,看是否有道我们用neighbor配置的邻居的路由
(没有找到到邻居的路由时会停留在该状态,一般查找IGP问题)
Connect:
找到去邻居的路由,且TCP三次握手成功
Opensent:
发送open报文,协商BGP会话的参数
Openconfirm:
同意BGP会话的确认报文
Established:
BGP会话建立成功
状态停留在active状态(发送了opensent报文但没有收到openconfirm报文):
1、对端邻居没有我本端的路由
2、对端配错了neighbor地址
3、对端根本就没有配置neighbor
4、对端配错了AS自制系统号
Showipbgprib-failure:
Rib:
routinginformationbase路由信息表
同一条路由既从IGP学到,也从BGP学到,且IGP学过来的AD小于从BGP学过来的AD。
AD:
管理距离IGP(AD)标识为“r”的BGP路由:
1、不放进路由表
2、会传给BGP邻居
标识为“s”的BGP路由:
suppressed
1、被抑制的路由,不会传递给其他邻居
Debugipbgpupdate
Clearipbgp*硬清TCP连接都断开了
Clearipbgp*soft软清TCP三次握手还在,只是重发open报文建立BGP邻居,一般修改一些BGP的属性时,软清就可以了。
查看本端路由器是否发送给邻居的路由信息(排错用:
看是我没发还是对方没收)
Showipbgpneighbor*.*.*.*advertised-routes
查看本端路由器从邻居那里收到了哪些路由(排错用:
看是我没收还是对方没发)
Showipbgpneighbor*.*.*.*received-routes
但应该注意:
路由器默认是没有缓存来保存接收到的路由信息的。
需通过一下命令来开启
Neighbor*.*.*.*soft-reconfigurationinbound
Noauto-summary
BGP路由默认是不会发生自动汇总的,发送的就是明细路由
那么这条命令用在什么地方呢?
答:
当我们将其他路由协议充分发到BGP中时,如果该协议原来默认就自动汇总(如rip),那么重分发进BGP也会自动汇总,而BGP需要知道的是明细路由,故此时需要用到此命令。
Auto-summary
A重分发进B:
1、不携带下一跳和metric值2、自动汇总
Noauto-summary
A重分发进B:
1、携带下一跳和metric值2、不自动汇总
把A协议重分发进B协议执行什么操作?
答:
是将本台路由器运行A协议的接口以及本台路由器运行A协议学到的路由,重分发进B协议。
IGP:
summary自动汇总
BGP:
aggregate聚合
1、手工写静态汇总路由,下一跳指向空接口NULL0
然后用network命令发布汇总路由
Iproute200.1.16.0255.255.255.0null0
Iproute200.1.17.0255.255.255.0null0
Iproute200.1.18.0255.255.255.0null0
Iproute200.1.19.0255.255.255.0null0
Routerbgp2
Network200.1.16.0mask255.255.252.0
2、先用network明细路由
再Aggregate
Routerbgp2
Network200.1.16.0
Network200.1.17.0
Network200.1.18.0
Network200.1.19.0mask255.255.255.0(效果跟上面的一样)
Aggregate-address200.1.16.0255.255.252.0
(后面不加任何参数,默认既传明细路由,也传聚合路由)
Aggregate-address200.1.16.0255.255.252.0summary-only(只传聚合路由)
问题1:
现要求routerA上能收到3条路由,聚合路由和18、19网段的路由(抑制16、17网段的路由),怎么做?
这里我们需要用到抑制列表:
suppress-map
Ipprefix-list1permit200.1.16.0/lengeylez
Len注意一下几者的区别:
Ipprefix-list1permit200.1.16.0/23匹配网络号前23位,子网掩码为23
Ipprefix-list1permit200.1.16.0/23le24匹配网络号前23位,子网掩码为23或24
Ipprefix-list1permit200.1.16.0/23ge24匹配网络号前23位,子网掩码大于等于24
Ipprefix-list1permit200.1.16.0/23ge24le24匹配网络号前23位,且子网掩码等于24位
具体实现如下:
1、抓出想要抑制的路由
Ipprefix-list1permit200.1.16.0/23ge24le24
2、在router-map中去调用
Route-mapSUP
Matchipaddressprefix-list1
3、在聚合路由后面挂上suppress-map
Routerbgp2
Aggregate-address200.1.16.0255.255.252.0suppress-mapSUP
问题2:
如果聚合不做在routerB上而直接做在routerA上,会出现些什么情况?
答:
routerA上接收routerB传过来的明细路由,自己产生聚合路由,且改聚合路由AS-path值为1,会回传给AS2,这样会出现什么问题呢?
假设routerB后面还连着很多路由器,比如routerF,那么路由器F上既收到了聚合路由也收到了明细路由,当我routerB上的明细路由中的一条down掉了以后,routerF路由表中关于该条明细路由会消失,但聚合路由还是存在的,数据包会传给routerB,B在传给A,但此时A上已没有该条明细路由,故丢弃该数据包。
一般情况下,如果聚合路由和明细路由不是在同一台路由器上做的,而且穿越了AS,我们不应该让该聚合路由传回去。
(基于EBGP的水平分割)
命令:
aggregate-address200.1.16.0255.255.252.0summary-onlyas-set
As-set:
还原明细路由的某些属性(让聚合后的路由继承明细路由的某些属性)
问题3:
routerD是跟routerC建立的EBGP邻居,但它的下一跳为什么指向的是routerA?
答:
icmp的重定向,
BGP的属性:
是否识别
是否遵守
传播范围
添加的一些其他属性
公认必遵:
ASpath、next-hop、origin
Origin:
i-------IGP:
用network命令发布的
?
--------将IGP或静态路由重分发进BGP
e--------将EGP重分布进BGP(注:
现在很少见EGP
(1)包含:
EGP
(2)和BGP,这里指的是将EGP
(2)重发布进BGP)
可以手动将属性改成e:
在routerA上做如下配置
1、抓路由
Ipprefix-list2permit2.2.2.2/24
2、Router-map中调用
Router-maporigin
Matchipaddressprefix-list2
Setoriginegp2(此处的2为AS号)
3、在neighbor后挂上router-map
Neighbor2.2.2.2router-maporiginin
具体实现:
Ipprefix-list2permit2.2.2.2/24
Router-maporiginpermit10
Matchipaddressprefix-list2
Setoriginegp2
Router-maporiginpermit20(空语句:
放通其他明细路由)
Routerbgp1
Neighbor2.2.2.2router-maporiginin
在BGP和重分发的时候,都必须考虑空语句
BGP选路原则:
前提:
路由器同步,下一跳可达---------确保它是最优的
1、权值(weight)最大(1、传播范围:
仅在本路由器上生效2、默认值:
32768----本台路由器上通告的0----其他路由器3、越大越好4、cisco私有)
2、本地优先级(1、传播范围:
仅在一个AS内有效2、默认值:
100
3、越大越优)作用:
告诉IBGP邻居怎样离开AS
3、优选起源于本地的路由(next-hop:
0.0.0.0)
4、ASpath越短越好
5、Origin属性(i)
6、MED(metric)(1、传播范围:
传一个AS2、默认值:
03、越小越好)
作用:
告诉EBGP如何进入一个AS
7、EBGP优于IBGP
8、优选于最近的IGP邻居
9、最小的BGP邻居的ROUTER-ID
注:
前3条是越大越优先,后6条是越小越优先
问题1:
如果AS1中IGP跑的是ospf,则路由器2到路由器3的路由会怎么走?
为什么?
如果IGP中跑的是RIP呢?
其结果又将如何?
答:
如果IGP中跑的是OSPF,则根据BGP选路原则,此时匹配其中的第八条,从R4学到到R2LP口的metric值是10,而从R1学过到的metric值为64,因而会优选从R4学到的去R2LP的路由;如果IGP中跑的是RIP,则根据BGP选路原则,此时匹配其中的第九条,因为R1的router-id小于R4的router-id。
问题2:
现要求从R3去R2的路由全部走R1,通过修改Weight值怎么来实现?
答:
在R3上执行如下命令:
neighbor1.1.1.1weight1(in)(从邻居R1传过来的路由的权值全部改成1,默认是0)-------修改从邻居传过来路由的weight值
问题3:
现要求从R3去R2的2网段路由全部走R1,去9网段走R4,通过修改Weight值怎么来实现?
答:
1、抓路由
Ipperfix-list3permit2.2.2.2/24
2、router-map调用
Router-mapweightpermit10
Matchipaddressprefix-list3
Setweight3
Router-mapweightpermit20(将其他没有抓住的流量放通)
3、挂在BGP上
Routerbgp1
Neighbor1.1.1.1router-mapweightin
问题4:
用localpreference怎样来实现问题2的要求?
答:
在R1上用如下命令可实现此需求:
Bgpdefaultlocal-preference111
注:
敲上这条命令后,在本地肯定是能生效的,但是我们通过showipbgp去看LocPrf的值,发现该值不一定发生了改变。
可以通过输入详细的BGP路由信息去看,如:
showipbgp2.2.2.0/24
实验:
测试改命令对下列哪些路由生效:
1、Network发布的路由
2、从EBGP传过来的路由(可以)
3、从IBGP传过来的路由
4、Aggregate
问题5:
用localpreference来实现问题3的需求?
答:
1、抓路由
Access-list1permit2.2.2.0
2、调用router-map
Router-mapLpermit10
Matchipaddress1
Setlocalpreference123
Router-mapLpermit20
3、挂在BGP上
Routerbgp1
Neighbor3.3.3.3router-mapLout(发往邻居3.3.3.3去的路由的本地优先级设成123)
问题6:
用as-path来实现问题3的需求?
答:
分析:
As-path分为in和out两个方向,我们可以选择在R2的out方向上来增大经过R4的as-path值的大小,也可以选择在R4的in方向上来做。
方法1:
在R2的out方向上做
1、抓路由
Ipprefix-list4permit2.2.2.0/24
2、调用router-map
Router-mapAS
Matchipaddressprefix-list4
Setas-pathprepend789(经过的AS号不能随便指,最好指自己)
Router-mapASpermit20
3、挂在R2的BGP上
Routerbgp2
Neighbor4.4.4.4router-mapASout
方法2:
在R4的in方向上做
1、抓路由
Ipprefix-list4permit2.2.2.0/24
2、调用router-map
Router-mapAS
Matchipaddressprefix-list4
Setas-pathprepend222
Router-mapASpermit20
3、挂在R4的BGP上
Routerbgp1
Neighbor4.4.4.4router-mapASin
问题7:
在R3上宣告一个8.8.8.0/24位的网段,R2访问R3是通过R1还是R4?
为什么?
答:
根据BGP选路原则,此时匹配其中的第九条,因为R1的router-id小于R4的router-id,故数据包从R1到达R3。
问题8:
怎样通过控制MED,R2访问R3从R4走?
答:
通过增大R1上的MED值来实现。
具体可通过如下命令实现:
Router-mapMEDpermit10
Setmetric8
Routerbgp1
Neighbor12.1.1.2router-mapMEDout
怎么测试MED设置成功?
1、带源Ping
在R3上ping,,ENTER选择记录r
2、debug
在R1上,debugipbgpupdate
如何解决IBGP的水平分割:
1、路由反射器
2、联邦
路由反射器:
1、RR从EBGP收到的路由,即会发给客户端,也会发给非客户端
2、RR从客户端收到的路由,会发给客户端、EBGP邻居以及非客户端
RR从非客户端收到的路由,只会发给客户端和EBGP邻居
3、