【原创】BGP中的直连检测释疑

发布时间 2023-09-19 10:47:11作者: 艳花三月下春秋

                                                                                             BGP直连检测及update-source

当两个不同的自治系统(AS)间进行邻接建立时,会存在BGP的直连检测,它的目的就是建立BGP的邻接,进行路由的传递。而影响其参数的是IP报文头中的TTL值。当不同AS间的路由器进行BGP邻接建立时,默认双方IP报文中的TTL=1,所以需要进行connection-check,而直连检测,它就需要根据neighbor中的指定的具体IP来进行判断,是不是直连IP,如果不是,连TCP三次握手都不成功,更不可能建立完整的BGP邻接了。

当两个处于不同AS之间的路由器在建立BGP邻接时,如果用环回接口loopback0进行连接时,主要是由于环回接口,被称为“永不down接口”,使得邻接状态的稳定,可以防止其他方面的物理影响对邻接的干扰,但此时会引来另一个麻烦:就是TTL=1所带来的直连检测的问题。

所以综合以上这种情况,BGP直连检测是发生在不同AS间的以环回口为neighbor对象的时候需要注意的问题,我们可以修改TTL值进行避免这种问题所带来的邻接问题,修改TTL值我们用间接的方式进行如下配置:

Neighbor loopback地址 ebgp-multihop 或neighbor loopback地址 disable-connected-check

虽然关闭了直连检测,但是由于是以环回接口为邻接对象所建立的BGP仍然没有起来,这又是另一个问题产生的,即是一方发送BGP消息时,发送方以出接口的IP和对方的环回接口进行TCP的三次握手试图建立BGP邻接,但是这样是不会成功的,同时接收方也会以它的环回接口和发送方的直连接口IP进行TCP的三次握手试图建立BGP邻接。这里面有一个疑问?就是:双方以环回接口建立BGP邻接时,为什么在TCP三次握手的时候出现接口IP和环回IP进行发包的情况?这是我们最为关心的问题:原因是因为我们在配置neighbor X.X.X.X时,路由器默认是以直连接口相互发送报文进行TCP三次握手的,而如果不加上update-source时,它会以路由器的出接口作为源地址进行报文的传送(这个和我们平常在进行ping时的原理是一样的,如果不加地址源,它则以出接口为源进行ping测的)。

 

注意点如下:

(一)我们用环回接口建立BGP邻居是为了使得邻居关系更稳定可靠;

(二)我们用环回接口建立 BGP邻居时配置了ebgp-multihop或disable-connnec-check是为了关闭直连检测,从而双方能够相互发送TCP三次握手报文,当然至少一方要有发送(这里面邻居双方是否都要关闭直连检测,是否都要配置update-source,这个不确定,但建议双方都有配置吧)

(三)我们用环回接口建立BGP邻居,还要使用neighbor X.X.X.X update-sourc X.X.X.X是为了邻居的一致性,即是双方均是以环回接口进行TCP三次握手从而正常建立BGP邻居关系。

        实际上在用loopback(回环接口)用于BGP的邻居建立就是先进行三次握手,再进行邻居的建立,解决的核心问题就是:如何使TCP包发出来(直连检测与否)、发出来的TCP如何保证(update-source)、如何使得BGP邻居的建立更加安全可靠(neighbor loopback地址)。