上期问题:当我们把RIP的传输层协议改为TCP之后,发现和维护邻居的机制应该设计成怎样呢?

这个问题可以从以下几个方面来考虑:

一:TCP面向连接,基于TCP的协议必然有一个先建立连接的过程。要先建立连接,两端的设备就必须先互相知道对方的IP地址,并且路由可达。那么是采用静态配置的方式,还是动态建立连接的方式呢?BGP采用的是静态配置的方式,只要双方指定的地址路由可达,就可以建立连接。这样做有以下好处:

1:可以与对端设备用任何IP地址建立邻居,而不限于某个固定接口的IP。这样,我们就可以采用环回地址而非直连接口地址建立BGP邻居,两台设备之间如果主链路中断了,只要有备份链路存在,就可以把流量切换到备份链路上,保持邻居不断,增加了BGP连接的稳定性。

2:可以跨越多台设备建立邻居。由于是静态配置的方式,不一定只有直连设备才能建立BGP邻居,只要双方指定的地址路由可达(通过IGP或者静态路由),就可以建立邻居,这在AS内部建立IBGP连接时,就不用所有设备之间都建立IBGP连接。IBGP会在本期后面内容中提及。

二:知道对方IP地址后,BGP会通过发送open报文来进行邻居的建立。如果连接不能建立,说明对端设备状态不正常,于是会等待一段时间再进行连接的建立,这个过程一直重复,直到建立连接。

三:连接建立后,就可以进行路由表的同步了,BGP通过发送update报文进行路由表的同步。

四:路由表同步完成后,并不是马上拆除这个连接,因为随时有可能会有路由的更新或者删除,建立TCP连接是一个非常耗费资源的过程,所以BGP通过定期发送keepalive报文进行TCP连接的维持,这样就可以不用重新建立连接,立刻就可以进行路由更新。

五:如果经过一段时间(一般是3keepalive报文发送周期)还没有收到对方的keepalive报文时,我们就认为对方出现了问题,于是可以拆除该TCP连接,并且把从对方收到的路由全部删除。

 

自上回交换机初悟BGP神功后,一直潜心修炼。交换机虽然所学IGP博杂,但都是基于UDP内功,乍换TCP,不免要花一番心思。

时光荏苒,一晃数月。

这日,路由老祖将门徒都唤至跟前,说道:“网络武林大会日期将近,我路由向为武林执牛耳者,此次武林大会定要有所作为。为师苦思多日,得一阵法。交换机,你是大师兄,就由你带着师弟师妹们把这个阵法演习熟练。”说罢,将一纸阵图递给交换机。交换机接过定睛一看,阵图如是:

 

 

题外话:这是一个典型的BGP应用组网。图中,有3ASAS之间运行BGP协议。 AS65008域内运行OSPF协议。R1R5上只运行BGP协议,R2R4上运行OSPFBGP协议,R3上只运行OSPF协议。这里先解释下EBGPIBGP

EBGP:运行于AS之间两台设备的BGP关系。如图中R1R2R4R5

IBGP:运行于AS内部两台设备的BGP关系。如图中R2R4

这里读者可能会问:AS内部不是有IGP么,为什么还要建立IBGP关系?

这是因为如果R2R4之间不建立BGP关系,那么如果R1要把路由传递给R5,经过AS65008时,就只能把BGP路由引入到IGP中,通过IGP进行传递。而把数以10万计的BGP路由引入到IGP中的后果是灾难性的。所以上图中,R2R4之间建立了IBGP的关系。值得一提的是,如上文所提及,由于BGP是通过静态配置的方式建立TCP连接,所以并非只能在两台直连的设备上建立BGP关系,如上图,R2R4间通过OSPF路由可达,可以建立IBGP关系。

 

交换机看过阵图,暗忖:“这个阵法也并不见得有多高明嘛,就由我和师弟S97S67S57分别担任R1R2R4R5四台BGP设备,小师妹S27功力尚浅,还不足以驾驭BGP,就让她做R3,只需要通过OSPF给我们师兄弟传递路由,如此这般,大功可成。”想到这,不禁有些洋洋自得。

翌日,交换机带着师弟师妹们开始演练起BGP阵法。交换机简单交待了几句后,五人各自归位,建立BGP连接,运行OSPF,有条不紊。一切准备就绪后,交换机迫不及待的将自己的路由发了过去,未几,不远处传来S57兴奋的叫声:“收到了!”。交换机内心一阵狂喜,表面却装作若无其事道:“S57,你发一个数据包过来试试。”

“好!”

等待良久,还未有数据包到达,交换机有些奇怪:“S57,你多发几个数据包。”

“一直在发。”

S67在旁道:“我收到师弟发的数据包,也转发出去了。”

众人目光一齐投向S97S97赶忙分辨:“我完全没有收到啊,我是冤枉的。”

交换机目光微转,却见小师妹S27一言不发,小脸涨的通红。交换机赶忙收功起身,问道:“师妹,数据包是在你这里丢的么?”

S27有些委屈:“师兄,我是收到好多报文,但是不知道怎么转出去。” 

 

题外话:为什么控制面路由已经传递成功,但是数据包却无法发过来呢?

这里,我们对路由的传递过程和数据包的传递过程分别进行分析。

路由的传递过程:

 

R1—R2:由于两台设备直连,并且建立EBGP关系,R1可以直接发送update报文至R2

R2—R4:两台路由非直连,但是两台路由建立了IBGP关系,R2update报文发送给R4。即该update报文的目的IPR4,于是R2查询自己的路由表,由于域内运行了OSPF协议,通过OSPFR2查询到去R4的下一跳是R3,于是将该update报文发给R3R3收到该报文后,虽然没有运行BGP协议,但是根据报文的目的IP,将该update报文发送给R4

R4—R5:同样,两台设备直连,并且建立EBGP关系,R4可以直接发送update报文至R5

这样,路由的传递就完成了。

数据包的传递过程:

 

 

R5—R4R5发送的数据包,源IPR5,目的IPR1,于是R5查询路由表,因为从R4收到一条R1的路由,该路由的下一跳标识为R4。于是将数据包发送给R4

R4—R2:当R4收到从R5发过来的数据包时,该数据包的源IPR5,目的IPR1。于是,R4查询路由表,发现去往R1的路由下一跳是R2(我们假定R2上配置了peer next-hop-local命令),由于下一跳非直连,于是R4查询去R2的下一跳。由于域内运行了OSPFR4发现,去R2的下一跳是R3,于是将数据包发给了R3。当R3收到该数据包时,由于数据包的目的IPR1IP,但是R3并没有运行BGP,所以R3上没有R1的路由。于是R3将该数据包丢弃。

这就是经常说到的数据层面的“路由黑洞”。

 

 

交换机带着阵图找到路由老祖,将方才所发生之事告知老祖,老祖微微一笑道:“徒儿,这阵法看似平淡无奇,实则千变万化。你墨守成规,太不知变通。不过这也不能怪你,想当年这创立BGP神功的人,早已料想到这种情况。”

老祖自旁拿出一本封面泛黄的古籍,赫然上书几个大字“BGP神功”。翻开几页,一句心法映入眼帘。

BGP同步心法:学习自IBGP邻居的路由在进入IGP路由表或宣告给BGP邻居之前,必须首先通过IGP来知晓该路由。”

路由老祖道:“在创立这BGP神功之初,这个创立BGP的前辈就已料想到你遇到的情况,于是规定了这条心法,有了这条规则,在S67收到S97发来的路由时,发现OSPF路由表里并没有这条路由,就不会将该路由发送给S57。反之,如果你将该路由引入到OSPF路由表中,那么在数据包从S57发给S27时,S27也能通过OSPF将数据包转发出去。”

交换机若有所悟:“但是方才路由明明已经传递成功了啊。”

老祖不急不忙道:“那是因为为师闯荡江湖多年,发现这条心法虽然可以解决路由黑洞的问题,但却必须将BGP路由引入到IGP中,不免非常不切实际。于是为师对BGP心法做了改变,去掉了这条心法,而是用“物理全连接”和“逻辑全连接”来解决这个问题。”

 

 

题外话:解决路由黑洞的几个方法:

1:根据BGP同步机制将BGP路由引入到IGP中。(S系列交换机缺省不启用BGP同步机制,但可以通过命令synchronization命令启用),这个方案的弊端上文已经说明。

2:物理全连接:以上图为例,如果AS65008内三台设备均通过物理线路连接起来,则R4可以直接将数据包发送给R2,而不需要通过R3转发。这个方案的弊端在于物理线路的铺设非常麻烦。

3:逻辑全连接:以上图为例,如果AS65008内三台设备均启用BGP进程,并且两两建立IBGP连接,则R3上也有R1的路由。可以成功转发数据。这个方案的弊端在于如果设备数量非常多,大量IBGP的连接难于管理。


 

 

交换机思前想后,还是有些不情愿的采用逻辑全连接的方式,虽然管理麻烦,但是相比BGP同步和物理全连接,还是方便不少。

殊不知,半载之后,武林大会之上,交换机邂逅了风华绝代的MPLS。两人发现彼此武功神奇般契合,完美的解决了包括路由黑洞在内的各种问题。于是二人自立门户,创下了一门震古烁今的武学。一对神仙眷侣也被传为武林佳话。此乃后话,暂且不表。