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
转载于:https://blog.51cto.com/netcom/790464