mpls和MBPG是为vpn的实现打下基础的,分析下这三者在vpn中的作用和意义。
我们先从ip routing 和MPLS 说起,MPLs为什么会产生?一定是因为ip routing在一些情况下让人不爽了,所以要开发出一种技术来替代或者完善它,我们先来分析一下ip routing和multi-protocol label switching 的特点,想一想为什么要用mpls,用ip routing不行吗?是不好还是不行?
ip routing即 ip 路由,mpls 多协议标签交换,先看一下什么是路由,什么是交换。路由的过程往往是这样的:1.我告诉别人,如果想到达这些目的地走我这里,2。我收到别人的通告:如果我想到达这些地方,走谁谁谁。路由往往给人的感觉是在发送流量之前的铺路工作,为之后的数据包转发打下基础。而交换的概念是:设备根据一张表来对收到的路由进行转发,这张表可以使arp表,frame relay 的route,当然也可以是label forwarding table,我们学到的这三张都是为流量服务的,相应的也就要求流量一定要带一个标识,这样交换设备才能对这个标识来判断向哪里转发。以太网中的mac address,FR中的DLCI,mpls中的label或tag 就是数据流量所携带的标识。
上面就是路由和交换的一个大体的理解,但我们好像还是不太容易解决为什么mpls由于ip routing的问题,好,我们来看mpls的另一个特点:LSR,这里我们不能不想到FR的PVC,他们都有一个虚通路的概念在里面,当然以太网中好像不存在,这个咱么不讨论。这个虚通路的概念我认为是mpls相对于ip routing的大杀器,是其优越性的一个主要体现,我们以BGP和MPLS相比较为例。
如果用传统BGP,SP中的所有router 都要起ibgp进程,并建立全互联的ibgp邻居关系(当然在有些情况下没有必要全互联,之前讨论过,这里就不说了)之后,保证每个router都有一张同步的BGP路由表,目的是为了防止路由黑洞。而MPLS通过LDP或者TDP传递label信息到每一个router,每一个router通过IGP来建立一个route和label的binding关系,有了IGP和LDP,就可以保证SP网络中的所有路由器的这种binding关系是同步的,破坏了这种同步关系我们称之为断链,如果是IGP的问题,即使路由获得不全,如果是LDP的问题就是label获得不全。好了,现在BGP和mpls的预备工作已经完成了,看一下数据包的转发情况,就可以了解为什么虚通路的这种概念有优势。
当一个数据走BGP时,每一跳路由器都要为这个包查表,查目的地址以找到其下一跳,之后转发,不知道大家能不能感觉到这是一个完美主义者的行为。这个路由器所担心的是每一跳都可能有很多分支出口。这个很关键,多个分支出口,意味着SP内部网络是一个复杂图(借用图论的观点)复杂图意味着节点之间的关系很多,线的数量与节点数量的比值较大,简单说,就是路由器之间连的四通八达,乱七八糟,因此每一个路由器就要比较小心谨慎,当然对于复杂图来说是有必要的。但我们在看看虚通路,这里的LSR,label的置换关系已经确立,也就是说,路由器所做的事情就简单爆了:我先查一下label forwarding这个转发表,撕一个label,贴一个label,然后这个包就可以滚蛋了。为什么如此简单?从图的角度讲,就是因为此时我们用mpls 建立了一张简单图,节点之间关系之简单,令人发指啊,就一个糖葫芦嘛。如此简单的虚通路让路由器可以不那么仔细,我沿着LSR转发就好了,也不用担心包会转发到别的地方去。
举一个我的比较二逼的例子,大一大二的时候,我对华科的路不很熟悉,(我路痴,华科的路由横七竖八的)我找一个图书馆,没到一个路由我都要看路标,头几次能花半个多钟头,后来路熟悉了,(大三了,还不熟可以史了)我不到二十分钟就能到了,为什么?因为我的脑子里存了一个虚通路,就不用到每个路口都看路标了。
因此MPLS是比ip routing要快的,但是快是有条件的,他牺牲了目的地的多样性,把节点的关系搞简单了,但对于vpn这种需求是很适合的。不是说mpls一定比ip routing好,而是两者应用于不同的环境中,ip routing支撑了全世界的internet,利用的是他的保守,谨慎。而mpls应用于vpn利用的是他的灵活。
当然我还要提几个mpls的优势,这个应该非常好理解的,路由前缀 32bit,mask 32bit ;label 20 bit,维护和消耗,label占优势很好理解吧。
刚才我们看了一下,mpls在vpn中相对好于ip routing的,我们再来看下,vpn中为什么用MBGP而不是BGP?BGP为什么萎了?
SP网络中 IGP 支撑起了MPLS,来进行快速转发,为实现VPN我们是需要SP网络中存在一个路由协议的,目的是将CE中的路由传递过去,从而让CE之间可以通讯,我们的思路是在PE处把CE的路由redistribute进入SP的路由协议,然后再从SP的路由协议redistribute进入另一端的CE路由协议中,听着好像挺简单的,好,谁来做这个SP的路由协议?BGP一拍胸脯,我没问题!老子可是把internet的路由玩的妥妥的,几个vpn的奈我何?那么我们看一下BGP:
在vpn中的路由传递我们要解决三个问题:1.传递;2:.逐跳;3.区分。其实从前面的讨论中我们已经发现BGP是没有什么优势的,对于1,2,mpls已经把BGP比下去了,但是mpls不是ip protocol,它没办法完成路由信息的发布,毕竟CE端一定用的是路由而不是标签,没听说哪个企业自己在IGP上走一个MPLS 的吧。所以路由协议还是要有,BGP对于1,2的不足,可以通过mpls来弥补,谁叫mpls身份卑微,栖身2.5层,在ip之下,只能为ip服务,给自己主子提供点传递业务啥的也不能抱怨,这里可以说一下,mpls对BGP的逐跳问题也就是路由黑洞问题的解决和tunnel的思路是很一致的,只不过外层头部由tunnel的ip 改成了mpls 的label,从总体来看,是SP的IGP和Ldp支撑了mpls,mpls又为BGP提供了隧道。
好吧,BGP很无节操地骑在了mpls身上,完美的快速传递着路由,但是BGP怎么也高潮不起来,因为他没办法解决第三个问题,路由区分,下面来看一下,BGP的华丽转身和MBGP和vrf 的勾结:
第三个问题,路由区分,这个问题是vpn天生的。vpn嘛,每个CE客户都是独立的,我们必须把不同的客户的路由进行区分,当出现两个不同VPn的路由是一样的时候,PE路由器就无奈了,大家都懂得。
在PE上,我们解决的方法是VRF。这样,把路由器按照vpn分为多个虚拟router,每个router有自己独立的1,interfaces 2,routing table 3, routing protocal . 一个路由器有这三样,此生无憾了吧,这是一个路由器三个最重要的组件。好,一个PE用VRF对vpn进行了区分,但如何对路由进行区分?不同的vpn的路由就带了一个叫RD的东东,这样我们的路由条目就变成了:RD+ip prefix+mask 的形式,到此我不禁要提出一个牛逼闪闪的概念:转发等价类(FEC),FEC是干嘛的?简而言之,区分目的地。一个ipv4 路由条目是一个FEC,但vpn中的ipv4 route 他就很捉急了,因为他已经不能很好地区分目的地了,结果我们把RD加到ipv4 route的前面,让他成为一个新的FEC,我们根据RD+ipv4route来区分vpn中的路由就很给力了,那我们给这种方式一个名字:VPNV4 它就成为了一个与ipv4 ipv6相并列的地址族。
于是BGP就一定要支持vpnv4了,好了一切看起来很幸福了!!BGP用VPNV4做到了FEC的区分,无为长老咆哮着:让vpn路由来的更猛烈些吧!!!!于是一百个vpn的路由如潮水般涌来,这是PErouter傻眼了,该如何向我的vrf分配这些vpnv4路由???我不能把100 个vpn的路由给每个vrf发一遍吧。一个vrf A要VPN1 - 100 的路由干嘛?二球!此时无为长老一捋长须,略作思忖,好,我做过滤。其实我们要做的是让每个vrf指出对哪个vpn路由的喜好就好了,这样我们就可以向每个vrf发布他所喜好的vpn的路由,这本质上讲就是过滤。无为长老的TLV神功早已修炼的炉火纯青,BGP报文中的extended community 字段可以大展拳脚。所以要求,vpnv4的bgp路由的extended community 字段要加上一个值叫RT,PE收到路由后根据这个RT来判断要还是不要,要的路由是import RT,发出的RT是export RT上指出的。这样利用community字段,就解决了路由的选择问题。无为长老接受vpnv4,开辟extended community,化身MBGP,继续做vpn堂的堂主。
最后要解决萌爷交给我的任务。EIGRP的路由在MBGP上的传递问题。
我们把eigrp redistribute进入mbgp的时候,对于metric,mbgp是留了一手的,mbgp充分利用它自己的community字段,把eigrp metric 的参数保留了下来,但这些参数明显是mbgp所看不懂的,抓包看见这些community字段写的是unknown,但我们可以解读一下这几个字段的含义,见萌爷千辛万苦在思科官网上找到的表:
EIGRP Attribute Type Usage Value
General 0x8800 EIGRP General Route Information Route Flag and Tag
Metric 0x8801 EIGRP Route Metric Information Autonomous System and Delay
and Autonomous System
0x8802 EIGRP Route Metric Information Reliability, Next Hop, and Bandwidth
0x8803 EIGRP Route Metric Information Reserve, Load and Maximum Transmission Unit (MTU)
External 0x8804 EIGRP External Route Information Remote Autonomous System and Remote ID
0x8805 EIGRP External Route Information Remote Protocol and Remote Metric
抓包就请童鞋们自己抓吧,截图什么的很蛋疼,略作解释下:
我们sh ip bgp vpnv4 all + 路由前缀就可以看到这样的信息:
Paths: (1 available, best #1, table b)
Not advertised to any peer
Local
10.0.0.4 (metric 158) from 10.0.0.4 (4.4.4.4)
Origin incomplete, metric 409600, localpref 100, valid, internal, best
Extended Community: RT:100:100 Cost:pre-bestpath:128:409600
0x8800:32768:0 0x8801:100:153600 0x8802:65281:256000 0x8803:65281:1500
mpls labels in/out nolabel/410
我们可以找到attribute相应的值,这里有8800-8803 没有external的路由。根据表中后面的解释,我们是可以找到相应的metric参数,比如8802 最后的256000 是1000 的带宽,注意,如果抓包的话,我们找到extended community字段打开就可以看到几个unknown 第一个就是RT,往后看的话,就可以看到这些字段。我们看到的是16进制的,256000 就是最后的 03 e8 00,其实最后的00就是* 256的意思,我们可以直接看前两个字节,3e8,转换成十进制就是1000;其他的同理,有兴趣的可以抓包看,我比较蛋疼的就是8802里面的nexthop,抓包看,这个nexthop好像只给了8位,下一跳是10.0.0.1 但他只表示成 01 可能是要结合前缀看的,不纠结这个了。最后提示BGP的前缀信息在NLRI中存放,在报文中的最后字段。
可见,把ip route redistribute进 bgp时候,bgp用自己的community 存了不少的路由信息,相信ospf redistribute进bgp也一定会有类似的动作,这还要我们继续学习。
还有三天六门考试,求NC anycast RP !!! |
|