BGP组网 始发端与接收端都各自有路由,但数据包双方收到对方数据(PING不通)

来源:互联网 发布:windows 车载 编辑:程序博客网 时间:2024/06/06 13:23

试验拓扑如下(BGP组网 始发端与接收端都各自有路由,但数据包双方收到对方数据(PING不通)):




这是一个典型的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关系。

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


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心法做了改变,去掉了这条心法,而是用“物理全连接”和“逻辑全连接”来解决这个问题。”



0 0
原创粉丝点击