EBGP建立邻居之ttl问题

忽然发现,EBGP不能跨路由器建立邻居,和IBGP不同,IBGP只要路由可达,他就可以建立邻居,EBGP却不可以。路由可达了,但是还是不能建立邻居。
然后仔细想想,应该也不会出现这种跨路由器建立EBGP邻居关系的拓扑吧?
那么,本着学习的精神,进行以下的探索。
不一定会有用,做个记录留下来。

以下是过程:
拓扑图如下:
EBGP建立邻居之ttl问题_第1张图片
环境描述:
R1,R2,R3,R4都有一个回环口,1.1.1.1,2.2.2.2,以此类推。全网配置ospf实现互通。
R1和R4通过回环口建立EBGP邻居。

要求:实现R1和R4建立EBGP邻居关系。

方法一:
针对此情况,那就把他变成“直连”就好了。没错,就是建立个隧道。在R1和R4上建立个隧道,把他们变成理论上的"直连"。
这样的方法可以,配置简单,就不多做描述。

方法二:
配置完成之后,查看bgp的邻居。
发现处于IDLE状态
在这里插入图片描述
结合BGP建立邻居的状态,IDLE状态是处于空闲状态,也就是说,他要去寻找去往4.4.4.4的路由。但是,4.4.4.4的路由时通过ospf学习到的,是有这条路由的。

EBGP建立邻居之ttl问题_第2张图片
那么,为什么会造成这种情况呢?

带着这个问题,我尝试了一下抓包。
抓包的结果却是空无一物,BGP是基于TCP协议的。但是抓包的内容却丝毫没有任何TCP的报文。

EBGP建立邻居之ttl问题_第3张图片

这是为啥?

带着不解,我尝试了一下,在R1上配置R2的EBGP邻居关系。
这次抓包,出现了TCP请求建立三次握手的报文。
姑且点击一个进去看一下试试。
在这里插入图片描述
先点一个过去的报文看一下。我学艺不精,在TCP中尚未找到任何有用的信息。
然后查看IP报文,忽然看到此处的TTL值为1?
EBGP建立邻居之ttl问题_第4张图片
那么,同理,会不会是因为ttl=1,使得R2的接收到R1去R4的报文,即使接受到,但是此时的ttl=0,它就做出了丢弃的选择呢?
但是,就算是这个原因,也不应该没有报文发出去。
根据前文所讲,当时是没有任何报文发送出去的。
那么原因又是什么?

至此,一开始的原因大致已经出来了。就是因为TTL问题。虽然又有了其它的问题,但是我们一个一个解决。
通过百度一下查询,知道了,BGP在建立EBGP邻居的时候,它的默认TTL为1,而建立IBGP邻居的时候,默认TTL为255。
那么,我们可以进行对这个默认值进行修改吗?使其能过突破这个限制?
答案是可以的。

在Cisco路由器里,在bgp的视图下,我终于找到这句话
EBGP建立邻居之ttl问题_第5张图片
ebgp-multihop 后面的解释是:允许EBGP邻居在非直连网络上。

在这里插入图片描述
这个就是修改默认的ttl值。
根据上文的拓扑,我们简单计算一下需要几跳。到R4为0,R3为1,R2为2,R1就是3。那么设置为3。当然也可以直接设置为255,看各位心情。
R1和R4更改完成之后,可以看到邻居成功up.
在这里插入图片描述报文也开始正常传输。
EBGP建立邻居之ttl问题_第6张图片
至此。本文开始时,提出的问题已经得到解决。

那么文中的两个疑点,我再次归纳一下:
1.为何明明有路由,且路由可达,但是BGP的邻居关系还是处于IDLE状态
2.为何R1在TTL默认值为1的时候,没有发送报文?

总结:
虽然在正常的环境中不会这样规划拓扑。但是,抱着学习的态度了解一下呗。
本次的问题是TTL的问题。修改一下,效果可出。

注:本人使用的是Cisco模拟器进行操作的。

-------------分割线----------
疑点解决:

对于第一个疑点,可能是因为Cisco的BGP状态是没有Connect 等状态的。建立成功就直接显示建立的时间,不成功就可能是ACTIVE 和 IDLE 两个状态。
为何这样想,因为通过ensp模拟器进行操作的时候,ensp显示的却是 Connect状态。这个状态是处于等待建立TCP三次握手的状态。所以,第一个疑点可能是这样的。
对于第二个疑点,我在另外一篇博客中看到,如果需要用回环口建立邻居的话,需要多一跳。那么这么计算的话,上文中R1和R4就需要4跳?
对于此,还是略有疑问。

本文到此结束。

另外,附上上述博客连接:
http://blog.sina.com.cn/s/blog_71851c8b0101e83s.html

仅供参考。

你可能感兴趣的:(计算机网络,BGP,EBGP,网络)