注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

乾颐堂_安德(Ender)的博客

学无前后达者为先,此博客是一个有态度网络技术共享平台,共享给大家更多知识和经验

 
 
 

日志

 
 
关于我

Ender“老湿”:双CCIE(R&S CCIE、ISP CCIE),思科认证讲师#34XXX,HCIE v2.0第一人。毕业于东北大学电子商务专业。在原公司及其他企业参与的重点项目和培训有: R&S CCIE专题课 SP CCIE专题课 思科支蜀援川项目 索尼中国(无锡)NP课程 能在这里找到我:QQ群106111081 我的微博:weibo.com/enderjoe

网易考拉推荐

BGP建立邻居关系概述及Troubleshooting  

2012-10-30 17:48:33|  分类: BGP视频和文档 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

BGP建立邻居关系概述及Troubleshooting

目录

BGP建立邻居关系概述及Troubleshooting 1

1、Topology描述 1

2、BGP邻居关系理论描述 2

3、建立eBGP(即两台设备的AS不同)邻居 2

4、建立iBGP邻居关系 4


1、Topology描述

Topology如下,需要说明的是R1和R2之间建立邻居关系,两台设备各自有一个环回口,两个peer之间会先后建立iBGP和eBGP

BGP建立邻居关系概述及Troubleshooting - ender.joe - Yeslab_Ender的博客
 

 

2、BGP邻居关系理论描述

A、BGP是基于TCP的,这是众所周知的情况,而TCP是一种host-to-host的连接,也就是基于主机到主机的一种点到点的连接,要完成这一步,那么自然两个TCP点之间要有相互的路由才能建立TCP连接

B、BGP基于TCP的179端口,注意是端口号,而不是协议号,这里要强调的是协议号是一个三层概念,只有在IP包头中才会有协议号,如OSPF,这也是BGP有时候被称之为是高层应用的理由之一,不过BGP的目的还是为了传递大量的路由而生

C、BGP不会向IGP那样自动发现和建立邻居,那么需要在配置的时候手动指定邻居,同时TCP连接需要指定一个源去和对端建立连接,这个概念就是BGP中的update-source的概念,这个概念是十分重要的,当一台设备要建立多个BGP邻居的时候十分关键,比如通常的:建立iBGP的时候会用到环回口(理由是环回口更加稳定),而该设备与另一台设备建立eBGP,通常就会用直连来建立,而不用指定更新源,默认就是出接口(与eBGP邻居相连的接口)

D、关于eBGP的多跳,这里要指出的是iBGP中IPv4包头中TTL默认是255,而eBGP是1,如果建立eBGP邻居关系的时候通过环回口来建立,那么此时TTL为2,需要指定eBGP多跳大于等于2才可以

E、BGP不会主动通过默认路由来建立BGP邻居关系,这是一种防环机制。这意味着如果两个peer之间通过环回口来作为更新源,而且两台设备上只有默认路由到达对端的环回口,那么将缺少TCP连接,无法建立BGP邻居,而只要有一端有明细路由,比如静态路由指向对端的环回口就可以了

G、BGP和ospf一样也需要一个RID来起到标识关系,必须要有一个ipv4地址来作为RID(如果没有任何地址的时候BGP将无法开启),RID的选择顺序为:手工制定;最大的环回口(同OSPF一样不一定要宣告该接口,尤其是BGP,通告的是路由,而不是激活接口);最大的物理接口 

3、建立eBGP(即两台设备的AS不同)邻居

A、拓扑如上图,我们先通过直连来建立邻居关系(直连和环回口已经配置完成,不再赘述)

之前我们已经提到BGP是一种TCP连接,所以必须要有路由可达对端的更新源。eBGP也不例外,让我们来做必要的检查:

R2#sh ip route connected ---------------------检查是否有路由

     22.0.0.0/24 is subnetted, 1 subnets

C       22.1.1.0 is directly connected, Loopback0

     12.0.0.0/24 is subnetted, 1 subnets

C       12.1.1.0 is directly connected, Ethernet0/0

R2#ping 12.1.1.1


Type escape sequence to abort.

Sending 5, 100-byte ICMP Echos to 12.1.1.1, timeout is 2 seconds:

.!!!!----------------------------------有完整的路由


让我们开启debug来查看

R2#debug ip tcp packet

R2(config)#router bgp 200---------------------------------------------------------本设备的AS号码是200

R2(config-router)#neighbor 12.1.1.1 remote-as 100-----------------指定对端的AS号码为100,默认更新源是直连接口

R2#

*Mar  1 00:20:52.035: tcp0: O CLOSED 12.1.1.1:179 12.1.1.2:35288 seq 909229018

        OPTS 4 SYN  WIN 16384------------------R2主动发起TCP连接(端口号大约1024),同时注意此时TCP的源为12.1.1.2(直连接口的地址)

*Mar  1 00:20:52.143: tcp0: I SYNSENT 12.1.1.1:179 12.1.1.2:35288 seq 4178578872

        OPTS 4 ACK 909229019 SYN  WIN 16384

*Mar  1 00:20:52.147: tcp0: O ESTAB 12.1.1.1:179 12.1.1.2:35288 seq 909229019

        ACK 4178578873  WIN 16384


R2#show tcp brief 

TCB       Local Address           Foreign Address        (state)

65BD9074  12.1.1.2.35288          12.1.1.1.179           ESTAB


R2#sh ip bgp summary 

BGP router identifier 22.1.1.1, local AS number 200

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.1        4   100       6       6        1    0    0 00:03:10        0

我们来解读上面的显示结果:对端的邻居是12.1.1.1,对端的AS是100,收到和发送了6个报文,BGP已经建立起来了3分10秒,没有邻居状态而只有收到的前缀数是0(正常建立BGP连接就看不到state)

当然这是一个简要信息而已,更加具体信息要通过R2#sh ip bgp neighbors 12.1.1.1来查看,此处不再给出显示结果

B、通过环回口来建立eBGP邻居

R2(config-router)#no neighbor 12.1.1.1 remote-as 100

R2(config-router)#neighbor 11.1.1.1 remote-as 100

R2(config-router)#neighbor 11.1.1.1 update-source lo0------通过环回口来建立eBGP邻居

R1上做类似的配置


此时没有TCP的包发出。我们要考虑到两点:1、是否有路由到达对端的TCP的源2、eBGP的TTL值的问题。

R2#sh ip bgp summary

BGP router identifier 22.1.1.1, local AS number 200

BGP table version is 1, main routing table version 1


Neighbor        V    AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd

11.1.1.1        4   100       0       0        0    0    0 never    Idle

处于IDLE状态一定要考虑到多跳!!

这两者其实都是有问题的,我们来写静态路由以及修改TTL值来解决:

R2(config)#ip route 11.1.1.0 255.255.255.0 e0/0

R2(config)#router bgp 200

R2(config-router)#neighbor 11.1.1.1 ebgp-multihop-----------------------如果直接回车,那么跳数为255

R1来做相同的配置

R1(config)#router bgp 100

R1(config-router)#neighbor 22.1.1.1 ebgp-multihop 2

抓包查看一下,如下图红色勾出的部分是我们看到的TTL值是2。蓝色部分是TCP的第五种报文(没错确实是第五种),route-refresh报文,其实它是我们在R2上做了clear ip bgp * s引起的

 

邻居关系已经建立:

R1#sh ip bgp summary 

BGP router identifier 11.1.1.1, local AS number 100

BGP table version is 1, main routing table version 1


Neighbor        V    AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd

22.1.1.1        4   200      12      11        1    0    0 00:07:49        0

4、建立iBGP邻居关系

iBGP邻居关系也就是同一AS内的BGP邻居关系。通常会用环回口来建立邻居,出发点是从稳定性以及可管理性来考虑的

我们先来做一个基本的邻居关系,这时候可能会用到IGP(RIP、ospf、eigrp等等内部网关路由协议)或者静态路由协议来满足我们之前提到过的路由可达性问题,本实验只有两台设备所以用静态路由就可以满足,当然大部分情况下一个AS内的设备较多,从扩展性来说必然会选择一种IGP

本实验中之前我们已经做过静态路由来到达对端的环回口,但是我们还是要测试一下

R2#ping 11.1.1.1 source loopback 0

我们来做一个基本的配置

R2(config)#router bgp 100

R2(config-router)#neighbor 11.1.1.1 remote-as 100

R2(config-router)#neighbor 11.1.1.1 update-source loopback0


R1(config)#router bgp 100

R1(config-router)#neighbor 22.1.1.1 remote 100

R1(config-router)#neighbor 22.1.1.1 update-source loopback0

R2上,在此我们再赘述一下neghbor 11.1.1.1 remote-as 100的含义:

向该地址(11.1.1.1)的179端口发起TCP连接,同时仅仅允许对端设备的地址(11.1.1.1)连接本设备的179端口。

R2#sh ip bgp summary 

BGP router identifier 22.1.1.1, local AS number 100

BGP table version is 1, main routing table version 1


Neighbor        V    AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd

11.1.1.1        4   100      14      14        1    0    0 00:10:49        0

对上面一行显示我们需要观察的是neighbor显示的为11.1.1.1而不再是之前的12.1.1.1了


接下来我们另外一个不通常的情况,但是有助于我们理解更新源。R2以自己的环回口(22.1.1.1)作为一个更新源,指定对方的12.1.1.1。也就是:

R2(config-router)#neighbor 12.1.1.1 remote-as 100

R2(config-router)#neighbor 12.1.1.1 update-source loopbackup0

那么现在R1上该如何做才能建立邻居呢?R1上的只能以12.1.1.1作为更新源来个22.1.1.1来建立邻居,也就是:

R1(config-router)#neighbor 22.1.1.1 remote 100

R1(config-router)#neighbor 22.1.1.1 update-source e0/0

如果R1的更新源不是R2指定的12.1.1.1,而是11.1.1.1的话,将不能建立BGP连接。来查看R1和R2的情况

R1#sh tcp brief 

TCB       Local Address           Foreign Address        (state)

65BF51C8  12.1.1.1.179            22.1.1.1.29882         ESTAB

R2#sh tcp brief 

TCB       Local Address           Foreign Address        (state)

65B3F8DC  22.1.1.1.29882          12.1.1.1.179           ESTAB

两端是一个匹配(match)的情况,如果指错了对端的更新源,那么邻居会处于active情况。

R2上还有之前的命令,我们来观察一下:

R2#sh run | s bgp

router bgp 100

 no synchronization

 bgp log-neighbor-changes

 neighbor 11.1.1.1 remote-as 100

 neighbor 11.1.1.1 update-source Loopback0---------------------------这个邻居将只能处于active

 neighbor 12.1.1.1 remote-as 100

 neighbor 12.1.1.1 update-source Loopback0

 no auto-summary

验证:

R2#sh ip bgp summary 

BGP router identifier 22.1.1.1, local AS number 100

BGP table version is 1, main routing table version 1


Neighbor        V    AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd

11.1.1.1        4   100      19      21        0    0    0 00:11:36 Active

12.1.1.1        4   100      15      14        1    0    0 00:11:02        0

5、BGP不会主动通过默认路由来建立BGP邻居关系

请去掉所有的静态路由。

R2(config)#no ip route 11.1.1.0 255.255.255.0 Ethernet0/0

两台设备都用默认路由来到达对端的环回口

R2(config)#ip route 0.0.0.0 0.0.0.0 e0/0

R1(config)#ip route 0.0.0.0 0.0.0.0 Ethernet0/0

同时R1和R2都用环回口来作为更新源

R1(config)#router bgp 100

R1(config-router)#neighbor 22.1.1.1 remote-as 100

R1(config-router)#neighbor 22.1.1.1 update-source loopback 0


R2(config)#router bgp 100

R2(config-router)#neighbor 11.1.1.1 remote-as 100

R2(config-router)#neighbor 11.1.1.1 update-source loopback 0

想一下我们的默认路由,如果拿最长匹配原则来作为基准的话,那么所有的数据将全部转发给对端,那么这时候不就是一个环路了么。从防环原则来说,这是一种非常糟糕的设计,BGP不会主动发起连接的。

R2#debug ip tcp packet

R2#sh ip bgp neighbors 11.1.1.1

------------------------------------------------------------省略部分内容------------------------------------------------

Number of NLRIs in the update sent: max 0, min 0


  Connections established 2; dropped 2

  Last reset 00:00:28, due to User reset

  No active TCP connection--------------------最后一行给出了答案

原因我们已经分析过。解决方案也很容易,只需要在任意设备做一条明细路由就OK


多开启一个debug工具:

R2#debug ip bgp

R2(config)#ip route 11.1.1.0 255.255.255.0 e0/0


*Mar  1 03:04:28.511: BGP: 11.1.1.1 open active, local address 22.1.1.1

*Mar  1 03:04:28.515: tcp0: O CLOSED 11.1.1.1:179 22.1.1.1:19519 seq 3327300549

        OPTS 4 SYN  WIN 16384

*Mar  1 03:04:28.547: tcp0: I SYNSENT 11.1.1.1:179 22.1.1.1:19519 seq 2570100856

        OPTS 4 ACK 3327300550 SYN  WIN 16384----------开始了TCP连接

*Mar  1 03:04:28.551: tcp0: O ESTAB 11.1.1.1:179 22.1.1.1:19519 seq 3327300550

        ACK 2570100857  WIN 16384

*Mar  1 03:04:28.555: BGP: 11.1.1.1 went from Active to OpenSent---BGP状态到了opensent阶段

*Mar  1 03:04:28.555: BGP: 11.1.1.1 sending OPEN, version 4, my as: 100, holdtime 180 seconds

*Mar  1 03:04:28.559: BGP: 11.1.1.1 send message type 1, length (incl. header) 45

*Mar  1 03:04:28.563: tcp0: O ESTAB 11.1.1.1:179 22.1.1.1:19519 seq 3327300550

        DATA 45 ACK 2570100857 PSH  WIN 16384

*Mar  1 03:04:28.631: tcp0: I ESTAB 11.1.1.1:179 22.1.1.1:19519 seq 2570100857

        DATA 64 ACK 3327300595 PSH  WIN 16339

*Mar  1 03:04:28.635: BGP: 11.1.1.1 rcv message type 1, length (excl. h

R2(config)#eader) 26

*Mar  1 03:04:28.635: BGP: 11.1.1.1 rcv OPEN, version 4, holdtime 180 seconds

*Mar  1 03:04:28.635: BGP: 11.1.1.1 rcv OPEN w/ OPTION parameter len: 16

*Mar  1 03:04:28.639: BGP: 11.1.1.1 rcvd OPEN w/ optional parameter type 2 (Capability) len 6

*Mar  1 03:04:28.639: BGP: 11.1.1.1 OPEN has CAPABILITY code: 1, length 4

*Mar  1 03:04:28.639: BGP: 11.1.1.1 OPEN has MP_EXT CAP for afi/safi: 1/1

*Mar  1 03:04:28.639: BGP: 11.1.1.1 rcvd OPEN w/ optional parameter type 2 (Capability) len 2

*Mar  1 03:04:28.639: BGP: 11.1.1.1 OPEN has CAPABILITY code: 128, length 0

*Mar  1 03:04:28.643: BGP: 11.1.1.1 OPEN has ROUTE-REFRESH capability(old) for all address-families

*Mar  1 03:04:28.643: BGP: 11.1.1.1 rcvd OPEN w/ optional parameter type 2 (Capability) len 2

*Mar  1 03:04:28.647: BGP: 11.1.1.1 OPEN has CAPABILITY code: 2, length 0

*Mar  1 03:04:28.647: BGP: 11.1.1.1 OPEN has ROUTE-REFRESH capability(new) for all address-families 

BGP: 11.1.1.1 rcvd OPEN w/ remote AS 100

*Ma

R2(config)#r  1 03:04:28.651: BGP: 11.1.1.1 went from OpenSent to OpenConfirm----BGP状态到了OpenConfirm阶段

*Mar  1 03:04:28.651: BGP: 11.1.1.1 went from OpenConfirm to Established

*Mar  1 03:04:28.655: %BGP-5-ADJCHANGE: neighbor 11.1.1.1 Up 

*Mar  1 03:04:28.655: tcp0: O ESTAB 11.1.1.1:179 22.1.1.1:19519 seq 3327300595

        DATA 19 ACK 2570100921 PSH  WIN 16320

*Mar  1 03:04:28.663: tcp0: O ESTAB 11.1.1.1:179 22.1.1.1:19519 seq 3327300614

        DATA 38 ACK 2570100921 PSH  WIN 16320

*Mar  1 03:04:28.711: tcp0: I ESTAB 11.1.1.1:179 22.1.1.1:19519 seq 2570100921

        DATA 38 ACK 3327300652 PSH  WIN 16282

*Mar  1 03:04:28.911: tcp0: O ESTAB 11.1.1.1:179 22.1.1.1:19519 seq 3327300652

        ACK 2570100959  WIN 16282

BGP邻居状态机的简要描述:

Idle: 路由器查找路由表检查是否有路由去往邻居

Connect: 路由器发现去往邻居的路由并且完成TCP的三次握手

Open sent: 携带BGP参数的OPEN包发出

Open confirm: 邻居收到建立TCP session的aggrement.如果没有响应open报文,那么路由器将进入active状态

最终停留在Established阶段

此实验仅仅讲述BGP关系的建立,我们在后续的实验中会讲述BGP的其他内容


  评论这张
 
阅读(544)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017