BGP邻居关系的建立.docx
《BGP邻居关系的建立.docx》由会员分享,可在线阅读,更多相关《BGP邻居关系的建立.docx(15页珍藏版)》请在冰点文库上搜索。
BGP邻居关系的建立
实验四十九:
BGP邻居关系的建立
实验目标:
理解并掌握BGP邻居关系的建立
实验TOP:
R1
01
!
02
hostnameR1
03
!
04
noipdomainlookup
05
!
06
interfaceLoopback0
07
ipaddress1.1.1.1255.255.255.0
08
!
09
interfaceSerial1/0
10
ipaddress12.1.1.1255.255.255.0
11
serialrestart-delay0
12
!
R2
01
!
02
hostnameR2
03
!
04
noipdomainlookup
05
!
06
interfaceLoopback0
07
ipaddress2.2.2.2255.255.255.0
08
!
09
interfaceSeria1/0
10
ipaddress23.2.2.2255.255.255.0
11
serialrestart-delay0
12
!
13
interfaceSeria2/0
14
ipaddress12.1.1.2255.255.255.0
15
serialrestart-delay0
16
!
R3
viewsourceprint?
01
!
02
hostnameR3
03
!
04
noipdomainlookup
05
!
06
interfaceLoopback0
07
ipaddress3.3.3.3255.255.255.0
08
!
09
interfaceSerial2/0
10
ipaddress23.2.2.3255.255.255.0
11
serialrestart-delay0
12
!
批注:
路由器接口默认是关闭的,所以应将对应的接口开启
BGP的数据包类型:
1.Open(打开)消息:
TCP会话建立之后,俩个邻居都要发送Open消息,每个邻居都利用该消息表示自己并指定BGP会话参数。
2.Keeplive(保持激活)消息:
如果路由器接受其邻居发送来的Open消息中指定的参数,则响应一条Keeplive消息。
此后,默认每60秒发送一条Keeplive消息。
3.Update(更新)消息:
用于宣告可行路由,已撤销路由或者俩者。
4.Notification(通告)消息:
路由器只要检查到差错,就会发送Notification消息并关闭BGP连接。
BGP会话状态:
1.Idle:
初始化状态.当BGP进程初始化之后,进入Connect状态,监听TCP会话的建立.
2.Connect:
本地路由器等待TCP会话建立的完成.如果该过程成功,本地路由器向对方发送 Open信息,并进去OpenSent状态;如果该过程失败,本地路由器将重置ConnectRetry计时器,并进入Active状态.如果当路由器处于Connect状态时,计时器的值倒数为0,本地路由器将尝试另外一条连接,重置计时器的值,并且仍旧处于Connect状态.
3.Active:
该状态下,本地路由器尝试向对方发起一条TCP会话,如果会话成功建立,本地路由器将发送Open信息,并进入到OpenSent状态;如果连接失败,将重置ConnectRetry计时器的值为0,并回到Connect状态;如果本地路由器从一个不预期的远程路由器那里收到一条连接请求,本地路由器将拒绝该连接仍旧处于Active状态,并重置ConnectRetry计时器.
4.OpenSent:
TCP会话成功建立后,将进入该状态.本地路由器将发送Open信息,并等待对方给予Open信息做为回应.如果本地路由器从对方那里收到了有效的Open信息,本地路由器将发送Keepalive信息给远程路由器,双方协商BGP会话参数,并进入到OpenConfirm状态;如果在该状态下,TCP会话突然断开,本地路由器将中断BGP会话,重置ConnectRetry计时器,并回退到Active状态.
5.OpenConfirm:
当本地路由器收到对方回应的有效Open信息,进入该状态.本地路由器发送Keepalive信息,并等待对方给予回应.
6.Established:
当本地路由器收到对方回应的Keepalive信息后,BGP对等体会话关系完全建立.
BGP邻居关系构建的过程:
BGP总是以IDLE状态为起始点,该状态拒绝所有入站的连接,当启动BGP后,BGP进程会初始化所有BGP资源,初始化去往邻居的TCP连接,并侦听来自邻居的TCP初始化。
将状态改成Connect,在该状态下,BGP进程一直等待TCP连接的完成,如果TCP连接建立成功,BGP进程将会向邻居发送Open消息并进入Opensent状态。
该状态下,BGP会一直等待直至侦听到来自邻居的Open消息,接收到Open消息后,会检查消息的每个字段,如果消息没有差错,则发送Keeplive消息并设置Keeplive定时器,才外还要协商时间,以便确定一个较小的保持时间值,根据对等体的AS号,可以确定对等体连接是内部连接还是外部连接,并迁移到Openconfirm状态。
在这个状态下,BGP进程将等待Keeplive消息或Notification消息。
如果收到的是Keeplive消息,则迁移到Established状态,如果接收到的是Notification消息或断开TCP连接的请求,则迁移到空闲状态。
下面我们做BGP的配置,R1与R2建立IBGP邻居,研究IBGP邻居关系的建立:
邻居卡在IDLE状态
R2(config)#routerbgp23
R2(config-router)#neighbor3.3.3.3remote-as23
R2(config-router)#neighbor3.3.3.3update-sourceloopback0
R3(config)#routerbgp23
R3(config-router)#neighbor2.2.2.2remote-as23
R3(config-router)#neighbor2.2.2.2update-sourceloopback0
验证:
我们可以通过showipbgpsummary命令来验证本路由器与其他路由器之间的邻居关系是否正常建立。
R2#showipbgpsu
BGProuteridentifier2.2.2.2,localASnumber23
BGPtableversionis1,mainroutingtableversion1
Neighbor V ASMsgRcvdMsgSent TblVer InQOutQUp/Down State/PfxRcd
3.3.3.3 4 23 0 0 0 0 0never Idle
注:
我们发现R2的邻居关系处在IDLE状态,因为我们在R2上指邻居时指的是R3的环回口3.3.3.3/24,而在R2的路由表中没有去往3.3.3.3/24网段的路由信息(R3也没有去往R2的2.2.2.2/24网段的路由),所以R2的邻居状态会卡在Idle。
解决办法:
在R2、R3上起IGP协议,或者指一条静态路由
邻居卡在Active状态
(1)
R2(config)#routerbgp23
R2(config-router)#neighbor3.3.3.3remote-as23
R2(config)#iproute3.3.3.0255.255.255.0s1/0
R3(config)#iproute2.2.2.0255.255.255.0s1/1
R3(config)#routerbgp23
R3(config-router)#neighbor2.2.2.2remote-as23
验证:
R2#showipbgpsu
BGProuteridentifier2.2.2.2,localASnumber23
BGPtableversionis1,mainroutingtableversion1
Neighbor V ASMsgRcvdMsgSent TblVer InQOutQUp/Down State/PfxRcd
3.3.3.3 4 23 0 0 0 0 0never Active
注:
此时R2的邻居关系卡在Active状态,我们上面用了R2和R3的环回口来构建邻居关系,所以发送open包的目的地是环回口,而更新源是物理端口,所以会出现交叉不相等。
如图:
(2)
R2(config)#iproute3.3.3.0255.255.255.0s1/0
R2(config)#routerbgp23
R2(config-router)#neighbor3.3.3.3remote-as23
R2(config-router)#neighbor3.3.3.3update-sourceloopback0
R2(config-router)#neighbor3.3.3.3password 0123
R3(config)#iproute2.2.2.0255.255.255.0s1/1
R3(config)#routerbgp23
R3(config-router)#neighbor2.2.2.2remote-as23
R3(config-router)#neighbor2.2.2.2update-sourceloopback0
验证:
R2#showipbgpsu
BGProuteridentifier2.2.2.2,localASnumber23
BGPtableversionis1,mainroutingtableversion1
Neighbor V ASMsgRcvdMsgSent TblVer InQOutQUp/Down State/PfxRcd
3.3.3.3 4 23 0 0 0 0 0never Active
注:
我们发现R2和R3的邻居关系卡在了Active状态,因为R2在指邻居时配置了密码,R3没有配置,所以在收到Open包后里面的参数不一致,使R2、R3卡到了Active状态。
(3)
R2(config)#iproute3.3.3.0255.255.255.0s1/0
R2(config)#routerbgp23
R2(config-router)#neighbor3.3.3.3remote-as23
R2(config-router)#neighbor3.3.3.3update-sourceloopback0
R3(config)#iproute2.2.2.0255.255.255.0s1/1
R3(config)#routerbgp23
R3(config-router)#neighbor2.2.2.2remote-as23
R3(config-router)#neighbor2.2.2.2update-sourceloopback0
验证:
R2#showipbgpsu
BGProuteridentifier2.2.2.2,localASnumber23
BGPtableversionis1,mainroutingtableversion1
Neighbor V ASMsgRcvdMsgSent TblVer InQOutQUp/Down State/PfxRcd
3.3.3.3 4 23 4 4 0 0 000:
00:
45Active
注:
发现R2和R3邻居关系处在Active状态,因为在做配置时,我们只做了R2到R3的路由,没有做R3到R2的路由,所以R2无法收到R3发送的Open消息,所以会卡在Active状态。
R2与R3之间建立IBGP的正确配置:
R2(config)#iproute3.3.3.0255.255.255.0s1/0
R2(config)#routerbgp23
R2(config-router)#neighbor3.3.3.3remote-as23
R2(config-router)#neighbor3.3.3.3update-sourceloopback0
R3(config)#iproute2.2.2.0255.255.255.0s1/1
R3(config)#routerbgp23
R3(config-router)#neighbor2.2.2.2remote-as23
R3(config-router)#neighbor2.2.2.2update-sourceloopback0
注:
由上面的实验可知在配置时一定要注意邻居路由是否可达,更新源是否交叉相等,会话参数是否一致。
接下来研究R1和R2之间EBGP邻居关系的建立:
当用物理端口构建邻居关系时,配置如下
R1(config)#iproute2.2.2.0255.255.255.0s1/0
R1(config)#routerbgp1
R1(config-router)#neighbor12.1.1.2remote-as23
R2(config)#iproute1.1.1.0255.255.255.0s1/1
R2(config)#routerbgp23
R2(config-router)#neighbor12.1.1.1remote-as1
观察邻居关系:
R1#showipbgpsu
BGProuteridentifier1.1.1.1,localASnumber1
BGPtableversionis1,mainroutingtableversion1
Neighbor V ASMsgRcvdMsgSent TblVer InQOutQUp/Down State/PfxRcd
12.1.1.2 4 23 5 5 1 0 000:
01:
58 0
注:
邻居关系正常建立
用环回口建立邻居关系时,配置如下
R1(config)#iproute2.2.2.0255.255.255.0s1/0
R1(config)#routerbgp1
R1(config-router)#neighbor2.2.2.2remote-as23
R1(config-router)#neighbor2.2.2.2update-sourceloopback0
R2(config)#iproute1.1.1.0255.255.255.0s1/1
R2(config)#routerbgp23
R2(config-router)#neighbor1.1.1.1remote-as1
R2(config-router)#neighbor1.1.1.1update-sourceloopback0
观察邻居关系:
R1#showipbgpsu
BGProuteridentifier1.1.1.1,localASnumber1
BGPtableversionis1,mainroutingtableversion1
Neighbor V ASMsgRcvdMsgSent TblVer InQOutQUp/Down State/PfxRcd
2.2.2.2 4 23 0 0 0 0 0never Idle
注:
R1与R2的邻居关系处在Idle状态,在建立EBGP邻居关系时,除了要考虑路由可达性,交叉相等和会话参数一致外,还要关注一个TTL值,默认的TTL值是1,在建立EBGP时,数据包出一个AS,TTL值减一,所以当R2发送的数据包出路由器时TTL值减成零,路由器将会丢弃这个包,所以无法正常建立邻居关系。
解决办法:
在R2和R3上更改TTL值的大小,改到大于等于2即可
R1(config-router)#neighbor2.2.2.2ebgp-multihop2
R2(config-router)#neighbor1.1.1.1ebgp-multihop2
BGP的AD值及开销的计算:
IBGP默认的AD值是200,EBGP默认的AD值是20。
BGP没有单独的计算开销的方法,它依赖于IGP来计算开销。
我们在R1、R2、R3各起一个环回口,并通告到BGP进程中
r1(config)#inlo10
r1(config-if)#ipadd10.10.10.10255.255.255.0
r1(config-if)#exit
r1(config)#routerbgp1
r1(config-router)#network10.10.10.0mask255.255.255.0
r2(config)#inlo10
r2(config-if)#ipadd20.20.20.20255.255.255.0
r2(config-if)#routerbgp23
r2(config-router)#network20.20.20.0mask255.255.255.0
r3(config)#inlo10
r3(config-if)#ipadd30.30.30.30255.255.255.0
r3(config-if)#routerbgp23
r3(config-router)#network30.30.30.0mask255.255.255.0
我们来观察R2的路由表:
r2#showiproute
Codes:
C-connected,S-static,R-RIP,M-mobile,B-BGP
D-EIGRP,EX-EIGRPexternal,O-OSPF,IA-OSPFinterarea
N1-OSPFNSSAexternaltype1,N2-OSPFNSSAexternaltype2
E1-OSPFexternaltype1,E2-OSPFexternaltype2
i-IS-IS,su-IS-ISsummary,L1-IS-ISlevel-1,L2-IS-ISlevel-2
ia-IS-ISinterarea,*-candidatedefault,U-per-userstaticroute
o-ODR,P-periodicdownloadedstaticroute
Gatewayoflastresortisnotset
1.0.0.0/24issubnetted,1subnets
S 1.1.1.0isdirectlyconnected,Serial1/1
2.0.0.0/24issubnetted,1subnets
C 2.2.2.0isdirectlyconnected,Loopback0
3.0.0.0/24issubnetted,1subnets
S 3.3.3.0isdirectlyconnected,Serial1/0
20.0.0.0/24issubnetted,1subnets
C 20.20.20.0isdirectlyconnected,Loopback10
23.0.0.0/24issubnetted,1subnets
C 23.2.2.0isdirectlyconnected,Serial1/0
10.0.0.0/24issubnetted,1subnets
B 10.10.10.0[20/0]via1.1.1.1,00:
06:
25
12.0.0.0/24issubnetted,1subnets
C 12.1.1.0isdirectlyconnected,Serial1/1
30.0.0.0/24issubnetted,1subnets
B 30.30.30.0[200/0]via3.3.3.3,00:
04:
11
注:
我们发现R2学习R1的10.10.10.10/24的AD值是20,开销是0,学习R3的30.30.30.30/24的AD值是200,开销也是0,因为R1学习10.10.10.10/24网段的开销是0(直连),R3学习30.30.30.30/24网段的开销也是0(直连),所以他们将开销值和路由信息一块封装进数据包发送给R2,所以R2学习10.10.10.10/24和30.30.30.30/24的开销都是0。