MPLS及其在×××中的应用

MPLS

英文全称是Multi-Protocol Label Switch

中文翻译为:多协议标记交换

MPLS是一种交换机制,它的包转发是基于标签的!最初的设计思想为了解决路由器基于IP转发速度的瓶颈问题以及在非IP环境中网络的扩展问题!

那么它是怎么实现数据包转发的速度以及又是如何在非IP环境中发挥作用的呢?

为了解答这个问题,先让我们来看看MPLS的数据封装!

 


中间的Top|Middle|Bottom即为MPLS的标签插入的位置!

由此可见,在启用MPLS的路由环境中,路由器转发数据包将不需要拆开IP层头部,只需要根据标签转发即可,可以改善路由器转发数据包的速度!但是由于科技的发展,现在的路由器设备上面,这点优势以及体现的不明显了!

我们可以再想想,既然路由器无需拆包IP Header,那么只要我们建立路由表,同时启用MPLS,路由器就会根据Label转发数据而不会去管三层头部是什么协议!这就体现Multi-Protocol的思想!

说明:Bottom代表Bottom-of-stack(栈底)只是下一个header是另一个标签还是一个三层头部,因为数据包中通常可以打入2个MPLS标签!

下面我们在探讨一下,以太帧中的Type字段,我们知道以太帧头部包括:源MAC,目标MAC以及Type字段,注意:Type字段的作用是表示3层协议所用的2层封装!

比如:Unlabeled IP unicast:其值为0x0800

Labeled IP unicast:其值为0x8847

Labeled IP mulitcast:其值为0x8848


通常大家习惯将MPLS叫做2.5层协议,原因就在于MPLS实际上是在二层和三层头部插入Label。

那么,在路由器中MPLS是怎么实现数据交换的呢?

让我们通过一个简单的实验来说明MPLS实现的过程!

我们用环回口来模拟子网,用RIP协议路由!

实验拓扑图如下:


 


配置命令:

R1

En

conf t

ip cef

int s0/0

mpls ip

ip add 12.1.1.1 255.255.255.0

no sh

int s0/1

mpls ip

ip add 13.1.1.1 255.255.255.0

no sh

router rip

ver 2

no auto

net 12.0.0.0

net 13.0.0.0

R2

en

conf t

ip cef

int loo 0

ip add 2.2.2.2 255.255.255.0

no sh

int s1/0

mpls ip

ip add 12.1.1.2 255.255.255.0

no sh

router rip

ver 2

no auto

net 12.0.0.0

net 2.0.0.0

R3

en

conf t

ip cef

int s1/0

mpls ip 

ip add 13.1.1.3 255.255.255.0

no sh

int loo 0

ip add 3.3.3.3 255.255.255.0

no sh

router rip

ver 2

no auto

net 13.0.0.0

net 3.0.0.0


MPLS转发基于以下三个表:

FIB(Forwarding Information Base)

LIB(Label Information Base)

LFIB(Label Forwarding Information Base)


这三个表有什么关系呢?

FIB表可以说是路由表的拷贝,但是在FIB表中加入了Label

LIB是标签表

LFIB是通过LIB表和FIB表形成的基于标签的转发表


接下来,我们通过命令查看一下路由器的标签分发情况!

注意:本实验转发是基于LDP(Label Distribute Protocol)的


我们先在R2上面查看LFIB表:show mpls forwarding-table 

显示如下:

Local  Outgoing    Prefix            Bytes tag  Outgoing   Next Hop    

tag    tag or VC   or Tunnel Id      switched   interface              

16     Pop tag     12.1.1.0/24       0          Se1/0      point2point  

17     17          2.2.2.0/24        0          Se1/0      point2point  


我们关注路由2.2.2.0/24这条路由,从上表可以看出它在本地被压入标签17,同时从邻居传过来的出标签也是17,故直接根据标签转发到目的地!

那么如何用命令查看MPLS转发是否起作用呢?

这里介绍给大家一个方法,扩展traceroute

使用方法如下

R3#traceroute 

Protocol [ip]: 

Target IP address: 2.2.2.2

Source address: 3.3.3.3

Numeric display [n]: 

Timeout in seconds [3]: 

Probe count [3]: 

Minimum Time to Live [1]: 

Maximum Time to Live [30]: 

Port Number [33434]: 

Loose, Strict, Record, Timestamp, Verbose[none]: 

Type escape sequence to abort.

Tracing the route to 2.2.2.2


  1 13.1.1.1 [MPLS: Label 17 Exp 0] 76 msec 40 msec 60 msec

  2 12.1.1.2 4 msec *  64 msec

可以看到数据从标签17转发出去了!


再介绍给大家几个show命令,希望大家自己去进行更深一步的学习!

查看LIB表:show mpls ldp bindings

查看FIB表:show ip cef detail

由于篇幅的关系,有关MPLS的介绍我们到此为止!

下面让我来介绍一下MPLS在×××中的应用吧!


×××

英文全称:Virtual Private Network

那么,什么是×××呢?用它能做什么呢?

通俗的讲:×××就是在公网上面传送私网路由!

×××有以下几个特点:

1、安全保障

2、服务质量保障

3、可扩充性和灵活性

4、可管理性

要在公网中传送私网路由首先要解决的问题就是:怎么将这些路由条目特殊化,使公网能够传送这样的路由!因为正常情况下公网是不可能传送私网路由的!

为此,我们先来了解一个名词VRF

VRF   即××× Routing & Forwarding Instance

翻译成中文是:×××路由转发实例

VRF其实就是一块独立的路由表!我们可以这样理解,我们将路由器划出一部分内存专门用来存放一些特殊的路由条目,这样的路由表就是VRF

换而言之,我们将私网路由条目放到VRF中,而不放进默认路由表,这样就将私网路由与公网路由区分开了!

可是还有一个问题,私网路由不可避免地会产生重复子网,为此,我们再来理解一个名词RD(Route Distinguisher)路由标识

RD的长度为8Byte=64bit,格式为:ASN:nn(ASN代表BGP AS号,nn代表数字)

举例:2:1:4.4.4.4

注意:上面格式为cisco建议格式,实际使用过程可以随便定义!只要不超出8Byte字节限制即可!!!

有了RD,我们还需要解决一个重要的问题就是带RD的路由通过什么协议传输,其实上面已经有所透露了!

那就是BGP协议,因为BGP的扩展性较好,它会将任何除IP地址以为的标识当做属性值!

有了上面的基础,我们还需要理解一个名词,RT:Route-target(路由对象)格式同RD

它的作用就是导入或者导出到具体的路由表中!


比如:

R1:route-target export 1:2

R2:route-target import 1:2

上面两个命令就可以实现R1中对应的路由条目导入到R2中

最后,我简单给大家说一下,MPLS ×××的配置:


实验拓扑图如下:


 

我们将中间R2-R1-R3模拟成ISP,R4和R5及其环回口模拟成顾客

注意:这里介绍几个专业名词,我们将运营商不与顾客路由器相连的设备叫做P(Provider)路由器,既与顾客路由器相连又与P路由器相连的路由器叫PE(Provider Edge)路由器,将与PE直接相连的路由器叫做CE(Customer Edge)

好了,下面我们开始配置!

配置要点:

R2-R1-R3运行IGP为OSPF,端口开启MPLS

PE-CE间运行RIP

PE新建VRF保存PE-CE间的私网路由条目

PE运行MP-BGP,传输×××v4(××× IPv4)路由

将RIP重分布到BGP中,使VRF路由通过MP-BGP传送到对端

将BGP导入到RIP中,是CE中有到对端的路由


下面是全部配置:


未完待续。。。

下转地址: http://netcom.blog.51cto.com/2355222/790466