交换机在路由老祖门下修行已有数载,其间精研各IGP
内功,对OSPF
、ISIS
、RIP
等等IGP
武功已经融会贯通,并颇有一套自己的想法,大有青出于蓝之势。修行日久,交换机感觉自身已臻大成,不禁产生了下山一展身手的想法。
一日,交换机来到路由老祖处,老祖道:“交换机,你在我门下已修行数载,对路由之道可谓已有小成,今日起,为师要再教你本门至高绝学。这门绝学威力极大,但相较IGP
修炼起来更加艰难。但是你天资聪颖,天赋过人,为师相信,不出3年,你必能修炼成功。”
交换机不禁有些不悦道:“师父,本门武功我已了然于胸,不论OSPF
、ISIS
、RIP
甚至番邦蛮夷的EIGRP
这种旁门左道,我都不在话下。自觉上至控制平面交换路由,下至转发平面转发数据,路由过滤,负载分担,统统难不倒我啊。我很想下山一展胸中所学,万望师父不要阻拦。”
题外话:路由协议的分类:
分类 | 包含协议 | 说明 |
---|---|---|
IGP:用于域(AS)内路由选择。 | RIP | 距离矢量协议,多用于小型网络。 |
IGP | ISIS | 链路状态协议,多用于运营商网络。 |
IGP | OSPF | 链路状态协议,多用于企业中大型网络。 |
IGP | EIGRP | CISCO私有路由协议,增强型距离矢量协议。 |
EGP:用于域(AS)间路由选择。 | EGP | BGP的前身,目前已经不再使用。 |
EGP | BGP | 事实上目前唯一的域间路由选择协议。 |
路由老祖微微一笑,道:“这样吧,为师考验一下你,如果你通过考验,我便放你下山如何?”“没问题!”交换机已经跃跃欲试。题目很简单,如下图:
“ISPA
和ISPB
通过一条高速链路连接在一起,两个ISP
想把各自的路由通告给对方。徒儿,如果是你,你该如何解决这个问题呢?”
“这有何难?先于域内运行OSPF
,则R1
和R2
可以知晓各自域内的所有路由,再于R1
和R2
相连的接口上运行RIP
协议,将OSPF
路由引入RIP
中,这样R1
和R2
就可以通过RIP
协议交换各自的域内路由。在RIP
协议交换路由完毕后,再将RIP
路由引入回OSPF
中,这样ISPA
和ISPB
就可以互相了解对方的路由了。”交换机非常自信。
路由老祖摇摇头道:“徒儿你IGP
内功虽深厚,也未必能奈何的了如此简单的场景,如若不信,我和你作为这两台设备一试,如何?”
“好!”
于是二人席地而坐,四掌相对,开始交换路由。双掌甫接,交换机便觉一股巨力涌至,赶忙集中精神,奋力化解,饶是自身内功深厚,仍有一些路由未接下。交换机暗自窃喜,这一波算是扛下了。哪知第一波方兴未艾,不过30秒,胸口又如遭重槌,交换机强运内功勉力支撑,不料每隔30秒,都有一股巨力袭来,如此再三,交换机终于支撑不住,一口鲜血喷将出来。老祖急忙收掌,交换机自行运气良久,方恢复如常。
老祖道:“徒儿,你IGP
功力深厚,然则IGP
在这个场景下有天然的缺陷,为师本欲传你的另一本门绝学却可以很好的应对这个问题。但为师现在先不点破,你回去好好想想,如何解决今天你遇到的问题。我相信以你的聪明才智,一定能想到解决的办法。”
题外话:交换机的解决方法有如下几个缺陷:
1:ISPA
和ISPB
的边界路由设备必须有一个同步的过程,也就是说当R1
和R2
在建立邻居的时候,需要把自己的整个路由表传输给对方。而传统的RIP协议是使用UDP
作为自己的传输协议的,这个协议的最大缺点就是不可靠,不适合传输大量的数据。
2:缺省情况下,RIP协议的路由更新报文的发送间隔为30秒,这样如果ISPA和ISPB的路由表非常大(达到100000条),30秒得时间间隔尚且不够完成路由的通告,这样整个高速链路就完全为RIP通告服务,而不能转发其他数据了。
读者看到这里也可以考虑下,如何解决这个问题。
回到住处,交换机苦思冥想一夜,终于有所头绪:
首先,路由传递初始,自己毫无防备,导致一些路由数据的丢失,造成这个问题的主要原因是自己的RIP
使用的内功基础是UDP
,UDP
的特点在于敌不动我不动,不去预先建立连接。那如果采用另一内功TCP
,TCP
的特点就在于面向连接,这样我就有充分的防备,路由的初始同步问题就解决了。
其次,由于RIP每隔30秒就会同步一次路由表,在之前路由条数相对比较少的情况下,自己上尚可应付,现在面对规模如此巨大的路由表,难免不可支撑。这个问题也好解决,那就取消每隔30秒全量同步路由的机制,改为增量通告规则:如果路由没有变化,则不发任何通告;如果是路由增加,则通告给对方增加的路由;如果是路由删除,则通告给对方删除的路由;如果是路由修改,则首先通告一个路由删除,再通告一个路由增加。
想通了这些,交换机兴冲冲的跑去找路由老祖,把自己的想法说了一遍,路由老祖非常赞赏:“徒儿,你的想法和我要传你的本门另一绝学BGP不谋而合,我本欲亲自传授BGP于你,但是我发现你天赋异秉,现在我希望你按照自己的思路对所学进行改进,我相信最终不需要我传授,你自己也能练成BGP神功。”
当我们把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连接的维持,这样就可以不用重新建立连接,立刻就可以进行路由更新。
五:如果经过一段时间(一般是3个keepalive报文发送周期)还没有收到对方的keepalive报文时,我们就认为对方出现了问题,于是可以拆除该TCP连接,并且把从对方收到的路由全部删除。
自上回交换机初悟BGP神功后,一直潜心修炼。交换机虽然所学IGP博杂,但都是基于UDP内功,乍换TCP,不免要花一番心思。
时光荏苒,一晃数月。
这日,路由老祖将门徒都唤至跟前,说道:“网络武林大会日期将近,我路由向为武林执牛耳者,此次武林大会定要有所作为。为师苦思多日,得一阵法。交换机,你是大师兄,就由你带着师弟师妹们把这个阵法演习熟练。”说罢,将一纸阵图递给交换机。交换机接过定睛一看,阵图如是:
题外话:这是一个典型的BGP应用组网。图中,有3个AS,AS之间运行BGP协议。 AS65008域内运行OSPF协议。R1和R5上只运行BGP协议,R2和R4上运行OSPF和BGP协议,R3上只运行OSPF协议。这里先解释下EBGP和IBGP。
EBGP:运行于AS之间两台设备的BGP关系。如图中R1和R2、R4和R5
IBGP:运行于AS内部两台设备的BGP关系。如图中R2和R4
这里读者可能会问:AS内部不是有IGP么,为什么还要建立IBGP关系?
这是因为如果R2和R4之间不建立BGP关系,那么如果R1要把路由传递给R5,经过AS65008时,就只能把BGP路由引入到IGP中,通过IGP进行传递。而把数以10万计的BGP路由引入到IGP中的后果是灾难性的。所以上图中,R2和R4之间建立了IBGP的关系。值得一提的是,如上文所提及,由于BGP是通过静态配置的方式建立TCP连接,所以并非只能在两台直连的设备上建立BGP关系,如上图,R2和R4间通过OSPF路由可达,可以建立IBGP关系。
交换机看过阵图,暗忖:“这个阵法也并不见得有多高明嘛,就由我和师弟S97、S67、S57分别担任R1、R2、R4、R5四台BGP设备,小师妹S27功力尚浅,还不足以驾驭BGP,就让她做R3,只需要通过OSPF给我们师兄弟传递路由,如此这般,大功可成。”想到这,不禁有些洋洋自得。
翌日,交换机带着师弟师妹们开始演练起BGP阵法。交换机简单交待了几句后,五人各自归位,建立BGP连接,运行OSPF,有条不紊。一切准备就绪后,交换机迫不及待的将自己的路由发了过去,未几,不远处传来S57兴奋的叫声:“收到了!”。交换机内心一阵狂喜,表面却装作若无其事道:“S57,你发一个数据包过来试试。”
“好!”
等待良久,还未有数据包到达,交换机有些奇怪:“S57,你多发几个数据包。”
“一直在发。”
S67在旁道:“我收到师弟发的数据包,也转发出去了。”
众人目光一齐投向S97,S97赶忙分辨:“我完全没有收到啊,我是冤枉的。”
交换机目光微转,却见小师妹S27一言不发,小脸涨的通红。交换机赶忙收功起身,问道:“师妹,数据包是在你这里丢的么?”
S27有些委屈:“师兄,我是收到好多报文,但是不知道怎么转出去。”
R5―R4:R5发送的数据包,源IP是R5,目的IP是R1,于是R5查询路由表,因为从R4收到一条R1的路由,该路由的下一跳标识为R4。于是将数据包发送给R4。
R4―R2:当R4收到从R5发过来的数据包时,该数据包的源IP是R5,目的IP是R1。于是,R4查询路由表,发现去往R1的路由下一跳是R2(我们假定R2上配置了peer next-hop-local命令),由于下一跳非直连,于是R4查询去R2的下一跳。由于域内运行了OSPF,R4发现,去R2的下一跳是R3,于是将数据包发给了R3。当R3收到该数据包时,由于数据包的目的IP是R1的IP,但是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。两人发现彼此武功神奇般契合,完美的解决了包括路由黑洞在内的各种问题。于是二人自立门户,创下了一门震古烁今的武学。一对神仙眷侣也被传为武林佳话。此乃后话,暂且不表。