AS内部使用IGP来计算和发现路由,如OSPF,ISIS,RIP等。
AS之间使用BGP来传递和控制路由。(BGP的精髓)
BGP协议特点
如图,BGP可以跨越多跳路由器建立邻居关系。
Q:为什么BGP可以跨越设备建立邻居,但是OSPF不可以?
A:因为OSPF基于组播的方式建立邻居,报文只能在相应的广播域进行传输。
而BGP采用TCP单播的方式进行建立邻居,只有有源和目的地址,并且保证底层网络的可达性,能保证TCP的链接,就可以建立邻居。
BGP邻居发现
如图,RTB先启动BGP,发起BGP连接(使用随机产生的端口,源端口),RTB使用随机端口号向RTA的179端口(目的端口)发起TCP连接。
BGP邻居关系配置
运行在不同AS之间的BGP路由器建立的邻居关系为EBGP(External BGP)邻居关系。
运行在相同AS内的BGP路由器建立的邻居关系为IBGP(Internal BGP)邻居关系。
建立邻居的配置有些类似于在NBMA网络中OSPF单播建立邻居,因为BGP是使用单播方式进行建立邻居的。
BGP邻居关系配置优化
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:
现在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邻居关系建立
图片已经解释的很明显了,过程类似于OSPF的状态机,不过额外添加了一个TCP的连接建立过程。
BGP路由生成方式:
一、Network
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
宣告之后,通过查看命令可以看到:
图中,只要是RTB的路由表中有的,就可以进行通告,而且RTC也正常的学习到了。
二、Import
Import命令是根据运行的路由协议(RIP,OSPF,ISIS等)将路由引入到BGP路由表中,同时import命令还可以引入直连和静态路由。
结果发现,通过import的方式也可以使RTC正确的学习到相应的路由。