AS内部使用IGP来计算和发现路由,如OSPF,ISIS,RIP等。
AS之间使用BGP来传递控制路由。(BGP的精髓)

BGP协议特点

BGP 邻居建立过程的状态存 bgp邻居关系建立过程_BGP 邻居建立过程的状态存


如图,BGP可以跨越多跳路由器建立邻居关系。

Q:为什么BGP可以跨越设备建立邻居,但是OSPF不可以?

A:因为OSPF基于组播的方式建立邻居,报文只能在相应的广播域进行传输。

BGP采用TCP单播的方式进行建立邻居,只有有源和目的地址,并且保证底层网络的可达性,能保证TCP的链接,就可以建立邻居。

BGP邻居发现

BGP 邻居建立过程的状态存 bgp邻居关系建立过程_tcp/ip_02


如图,RTB先启动BGP,发起BGP连接(使用随机产生的端口,源端口),RTB使用随机端口号向RTA的179端口(目的端口)发起TCP连接。

BGP邻居关系配置

BGP 邻居建立过程的状态存 bgp邻居关系建立过程_tcp/ip_03


运行在不同AS之间的BGP路由器建立的邻居关系为EBGP(External BGP)邻居关系。

运行在相同AS内的BGP路由器建立的邻居关系为IBGP(Internal BGP)邻居关系。

建立邻居的配置有些类似于在NBMA网络中OSPF单播建立邻居,因为BGP是使用单播方式进行建立邻居的。

BGP邻居关系配置优化

BGP 邻居建立过程的状态存 bgp邻居关系建立过程_网络_04


Q:为什么使用loopback接口建立IBGP而不使用物理链路接口?(现在假设RTC和RTB之间有一条物理链路互连)

A:假设现在还是用物理线路相连,如果物理链路毁坏,那么邻居就直接断裂。相反,如果采用loopback接口建立IBGP,就算是物理接口断裂,那么也是可以通过loopback接口互通的,就可以继续保持TCP邻居关系的建立。

Q:那为什么EBGP之间不使用loopback接口建立邻居关系呢?

A:IBGP使用loopback接口建立邻居是因为在AS内部loopback接口可以互通,但是不同AS之间建立EBGP如何保障loopback接口可以互通?这就是一个关键问题,不好解决,所以直接使用物理接口进行邻居建立。

Q:Peer 2.2.2.2 connect-interface loopback 0是什么意思?

A:

BGP 邻居建立过程的状态存 bgp邻居关系建立过程_网络协议_05


现在A设备想要用loopback接口跟B设备建立邻居关系,但是发包的时候都是通过物理接口进行发送,除非特别指定源接口(好比在进行ping的时候必须添加-a参数,才能指定原接口,否则都是物理出接口)。在不指定的情况下,源地址就是12.1.1.1,目的地址就是2.2.2.2,当发送到B设备时,B发现,自己明明peer的是1.1.1.1(就是说想要跟1.1.1.1建立邻居关系),但是发过来的源地址是12.1.1.1,所以就会拒绝,也就是没法建立邻居关系了。所以在使用loopback接口建立IBGP邻居时,要添加connect-interface loopback X(接口名任意)的命令。

BGP邻居关系建立

BGP 邻居建立过程的状态存 bgp邻居关系建立过程_tcp/ip_06


图片已经解释的很明显了,过程类似于OSPF的状态机,不过额外添加了一个TCP的连接建立过程。

BGP路由生成方式:

一、Network

BGP 邻居建立过程的状态存 bgp邻居关系建立过程_网络_07


Network命令是逐条将IP路由表中已经存在的路由引入到BGP路由表中。

①不管是否为直连,只要本地路由表中有该路由信息,就可以将此信息通告给邻居。(图中的100.0.0.0网段,虽然不跟RTB相连,但是仍然可以进行通告)

②Network命令通告的路由信息,掩码等必须要跟路由表中的一致,否则不通告。

③如果本地路由没有该路由信息,但是希望通告给对方,可以使用静态路由配置一条,这样就可以通告过去了:

ip route-static 67.1.1.0 24 NULL 0

network 67.1.1.0 255.255.255.0

宣告之后,通过查看命令可以看到:

BGP 邻居建立过程的状态存 bgp邻居关系建立过程_tcp/ip_08


图中,只要是RTB的路由表中有的,就可以进行通告,而且RTC也正常的学习到了。

二、Import

BGP 邻居建立过程的状态存 bgp邻居关系建立过程_tcp/ip_09


Import命令是根据运行的路由协议(RIP,OSPF,ISIS等)将路由引入到BGP路由表中,同时import命令还可以引入直连和静态路由。

BGP 邻居建立过程的状态存 bgp邻居关系建立过程_BGP 邻居建立过程的状态存_10


结果发现,通过import的方式也可以使RTC正确的学习到相应的路由。