MPLS基础以及静态LSP的配置

MPLS的产生

在计算机发展初期,对于网络中的数据转发,公司内的局域网还好说,但是在公网中,我们面临着许多IP,如果有数据需要转发,路由器设备需要在IP路由表中一个一个地查询,这时就面临着IP多,设备拉,速率就直线下降的问题

我们有两种方式去解决这个问题。

1、将硬件设备提升

2、换一种方式进行数据的转发,不再使用IP进行转发,而是使用标签进行转发,这就是MPLS的核心理念,使用标签进行数据转发

MPLS只会去查找边缘设备的IP报头,而内部就使用标签进行转发。即边IP,内标签

标签转发:原来数据的转发需要去查路由表,而在MPLS中可以直接根据标签的信息进行转发,并不会像IP那样去关心下一条

而上述的MPLS都只是为了去加快数据的转发

MPLS的没落

随着时代的进步,设备的CPU也在提高,这使得单纯地依靠CPU的算力,可以路由表的转发速度是于使用MPLS的速率是一样的

MPLS的第二春

如果用户只想单纯地访问公网,那么使用NAT技术即可做到

但若是像主公司和分公司的情况,就需要内网跨越公网去到达其它的内网,这时就需要使用VPN技术,而数据在VPN中的传输速率就需要用到MPLS VPN来进行提升的

于普通的MPLS类似,MPLS VPN 的核心理念就是标签隧道

就是在IP层上在使用标签进行封装,其实VPN的本质就是对数据的再封装,如下

正常封装 二层帧 三层包 四层段 date
MPLS封装 二层帧 MPLS 三层包 四层段 date

MPLS的术语

MPLS Domain:指的是运行MPLS的设备集合

LSR(标签交换设备),LSR主要分为以下三种

ingress(入节点)作用是使标签加载到设备中

transit(中间节点)作用是在设备于设备之间进行标签的交换

egress(出节点)作用是使标签从设备中出来

LSP(标签交换路径)

前面说的三个LSR中,通过出、入节点和0个或者多个中间节点组成的路径分为上下游设备

LSP就相当于一个VPN一样

FEC(转发等价类)

FEC是用来描述LSP的这条路径上有那些流量。将相同方式出的流量统一成一个集合或是说一条流、一个FEC

可以使用源IP、目的IP、源端口、目的端口、VPN...几种方式判断是否为同一条流

MPLS的体系架构

如,OSPF生成路由,在MPLS中该条路由不会根据路由表进行转发,而是根据RIB复印一份FIB表,进行转发

RIB的查看:dis ip routing

FIB的查看:dis fib

如下图,这就是FIB表的信息,Destination对应的Interface,表示接收到Destination的信息后就会从Interface中出去

TunnelID则代表是使用IP进行转发,还是使用标签进行转发

若是TunnelID为0,则说明IP转发,TunnelID为1,则说明是使用标签进行转发

而控制平面与转发平面之间的关系就相当于CPU算出了结果随后就放到的内存当中

控制平面生成了路由放到了转发平面当中

但LDP分发给FIB的并不是标签,而是生成标签的索引

MPLS标签

MPLS标签的位置:二层帧、MPLS、IP头部

MPLS标签中的内容:Label、EXP、S、TTL(32bit)

MPLS头部格式,一共为32bit长度,共有4个部分组成

①标签值域(0~20bit)②exp(21~23bit)③s bit(24bit)④TTL(25~32bit)

标签值域范围

特殊标签,0~15,指的是每个标签都有独特的功能,如3号标签就是隐式空标签。

静态标签,16~1023,通常都是管理员手工配置上去的

动态标签,1024~max,一般通过动态的方式获取标签,如LDP协议。MP-BGP协议,RSVT-TE协议和策略分配

exp bit

exp用作于流量的优先级,类似于IP报文的service type和802.1Q帧的pri

S bit

表示栈底bit位,用作判断该标签是否位最后一个标签,就紧挨着IP头部的标签,如下,MPLS2就存在着栈底标签

二层帧 MPLS1 MPLS2 三层包 四层段

S=1表示位栈底标签,S=0为非栈底标签

TTL值

与IP中的TTL值类似,其目的是为了防环

配置静态标签MPLS

先将基础IP配置完成,要求是不做路由,只在R1(lo0)上做一条静态路由去往R4(lo0),最终的目的是通过标签使得R1访问R4(ping -a 1.1.1.1 4.4.4.4)

当我们直接输入mpls命令妄想开启mpls时,会提示要想开启mpls,先要配置lsr-id

但需要注意的是,这里的lsr-id并不是给mpls使用的,而是给我们后面需要的LDP所使用

而lsr-id与那些route-id不同,lsr-id需要是本设备上的一个真实IP地址,这里使用lo0口替代

并且但我们配置好lsr-id后,mpls同样也能正常使能

[R1]mpls lsr-id 1.1.1.1
[R1]mpls
Info: Mpls starting, please wait... OK!

同样地,我们给MPLS路径上的每一台设备都使能MPLS

[R2]mpls lsr-id 2.2.2.2
[R2]mpls
Info: Mpls starting, please wait... OK!
[R3]mpls lsr-id 3.3.3.3
[R3]mpls
Info: Mpls starting, please wait... OK!
[R3]mpls lsr-id 4.4.4.4
[R3]mpls
Info: Mpls starting, please wait... OK!

R1作为整个MPLS的ingress,需要为其配置去往4.4.4.4的路由分配标签

R1-R4为自定义的这条路径名,destination为目标地址,outgoing-interface为出接口,nexthop为下一跳,out-label为发出的标签

[R1]static-lsp ingress R1-R4 destination 4.4.4.4 32 outgoing-interface g0/0/0 nexthop 10.0.1.2 out-label 102

在R1上去ping 4.4.4.4,抓取其数据包并分析

很明显,这里是没有抓到标签的数据的,但?为什么呢?

因为我们整个的MPLS的路径是并不完整的,即标签路径是不完整的

其次我们通过查看fib表,也发现去玩4.4.4.4的TunnelID为0,表示IP转发,并没有采用标签转发的形式

我们之前提到过LSR,有三种设备,分别是ingress入节点、transit中间节点、egress出节点

由这三种设备组成MPLS的标签路径,需要在每一个设备上配置MPLS路径才能建立一条独属标签的转发路径

而刚刚已经展示过了ingress入节点的配置方法,接下来展示一下transit中间节点和egress出节点的配置方法

transit中间节点配置如下

R1-R4为路径名称,incoming-interface为标签的入接口,in-label为入标签,nexthop为下一跳,outgoing-interface为标签的出接口,out-label定义出标签

[R2]static-lsp transit R1-R4 incoming-interface g0/0/0 in-label 102 nexthop 10.0.2.2 outgoing-interface g0/0/1 out-label 203

[R3]static-lsp transit R1-R4 incoming-interface g0/0/0 in-label 203 nexthop 10.0.3.2 outgoing-interface g0/0/1 out-label 304

egress出节点配置如下

[R4]static-lsp egress R1-R4 incoming-interface g0/0/0 in-label 304

但现在如果贸然地去ping -a 1.1.1.1 4.4.4.4,结果还是没有在IP上面打上标签的

原因是:我们现在处于一个标签路径做好的情况下,但是并没有告诉设备我们需要去使用MPLS,即没有在接口上使能MPLS

做法:我们需要在MPLS标签路径上的每一台设备的接口,都去使能MPLS,以R1的g0/0/0接口为例子

[R1]int g0/0/0
[R1-GigabitEthernet0/0/0]mpls

这时我们再去ping -a 1.1.1.1 4.4.4.4,虽然ping不通,但是我们通过抓包分析,已经可以看到报文内部有一层MPLS的报文信息了

而ping不通的原因很显然,是因为我们有了数据包去4.4.4.4的路径了,却没有R4的4.4.4.4会1.1.1.1的路径

所以我们还要像上面那样,将路径给配置会到R1上

R4上

[R4]static-lsp ingress R4-R1 destination 1.1.1.1 32 nexthop 10.0.3.1 outgoing-interface g0/0/0 out-label 333

R3上

[R3]static-lsp transit R4-R1 incoming-interface g0/0/0 in-label 333 nexthop 10.0.2.1 outgoing-interface g0/0/1 out-label 222

R2上

static-lsp transit  R4-R1 incoming-interface g0/0/1 in-label 222 nexthop 10.0.1.1 outgoing-interface g0/0/0 out-label 111

纯享版

R1上

[Huawei]sysnam	
[Huawei]sysname R1
[R1]int g0/0/01
[R1-GigabitEthernet0/0/0]ip add 10.1.1.1 24
[R1-GigabitEthernet0/0/0]q
[R1]int lo0
[R1-LoopBack0]ip add 1.1.1.1 32
[R1-LoopBack0]q
[R1]mpls lsr-id 1.1.1.1
[R1]mpls
Info: Mpls starting, please wait... OK!
[R1-mpls]q
[R1]static-lsp ingress 1-4 destination 4.4.4.4 32 nexthop 10.1.1.2 outgoing-interface g0/0/0 out-label 102
[R1]ip route-static 4.4.4.4 32 10.1.1.2
[R1]int g0/0/0 
[R1-GigabitEthernet0/0/0]mpls
[R1-GigabitEthernet0/0/0]q
[R1]static-lsp egress 4-1 incoming-interface g0/0/0 in-label 201

R2上

<Huawei>sys
Enter system view, return user view with Ctrl+Z.
[Huawei]sysname R2
[R2]int lo0
[R2-LoopBack0]ip add 2.2.2.2 32
[R2-LoopBack0]int g0/0/0
[R2-GigabitEthernet0/0/0]ip add 10.0.1.2 24
[R2-GigabitEthernet0/0/0]int g0/0/1
[R2-GigabitEthernet0/0/1]ip add 10.0.2.1 24
[R2-GigabitEthernet0/0/1]q
[R2]mpls lsr-id 2.2.2.2
[R2]mpls
Info: Mpls starting, please wait... OK!
[R2-mpls]q
[R2]static-lsp transit 1-4 incoming-interface g0/0/0 in-label 102 nexthop 10.1.2.2 outgoing-interface g0/0/1 out-label 203
[R2]int g0/0/0
[R2-GigabitEthernet0/0/0]mpls
[R2-GigabitEthernet0/0/0]int g0/0/1
[R2-GigabitEthernet0/0/1]mpls
[R2-GigabitEthernet0/0/1]q
[R2]static-lsp transit 4-1 incoming-interface g0/0/1 in-label 302 nexthop 10.1.1.1 outgoing-interface g0/0/0 out-label 201

R3上

<Huawei>sys
Enter system view, return user view with Ctrl+Z.
[Huawei]sysnam	
[Huawei]sysname R3
[R3]int lo0
[R3-LoopBack0]ip add 3.3.3.3 32
[R3-LoopBack0]int g0/0/0
[R3-GigabitEthernet0/0/0]ip add 10.0.2.2 24
[R3-GigabitEthernet0/0/0]int g0/0/1
[R3-GigabitEthernet0/0/1]ip add 10.0.3.1 24
[R3-GigabitEthernet0/0/1]q
[R3]mpls lsr-id 3.3.3.3
[R3]mpls
Info: Mpls starting, please wait... OK!
[R3-mpls]q
[R3]static-lsp transit 1-4 incoming-interface g0/0/0 in-label 203 nexthop 10.1.3.2 outgoing-interface g0/0/1 out-label 304
[R3]int g0/0/0
[R3-GigabitEthernet0/0/0]mpls
[R3-GigabitEthernet0/0/0]int g0/0/1
[R3-GigabitEthernet0/0/1]mpls
[R3-GigabitEthernet0/0/1]q
[R3]static-lsp transit 4-1 incoming-interface g0/0/1 in-label 403 nexthop 10.1.2.1 outgoing-interface g0/0/0 out-label 302

R4上

[Huawei]sysnam	
[Huawei]sysname R4
[R4]int lo0
[R4-LoopBack0]ip add 4.4.4.4 32
[R4-LoopBack0]int g0/0/0
[R4-GigabitEthernet0/0/0]ip add 10.0.3.2 24
[R4-GigabitEthernet0/0/0]q
[R4]mpls lsr-id 4.4.4.4
[R4]mpls
Info: Mpls starting, please wait... OK!
[R4-mpls]q
[R4]static-lsp egress 1-4 incoming-interface g0/0/0 in-label 304 
[R4]int g0/0/0
[R4-GigabitEthernet0/0/0]mpls
[R4-GigabitEthernet0/0/0]q
[R4]static-lsp ingress 4-1 destination 1.1.1.1 32 nexthop 10.1.3.1 outgoing-interface g0/0/1 out-label 403

这样我们就等于初步创建了一个vpn隧道了

在实际的生产环境中,R2与R3就相当于在运行商那里管理的设备,而R1与R4就是需要我们自行管理的不同子公司之间的设备了

MPLS转发过程

在MPLS转发过程中,有三个重要的参数

1、TunnelID,相当于是隧道IP,在fib表项中,该信息是否要进入隧道进行转发,dis fib

2、NHLFE,下一跳标签转发条目,dis mpls nhlfe

3、ILM,入标签的映射表,dis mpls ilm

在查看NHLFE和ILM的时候,需要先使用命令diagnose开启诊断模式,在进行查看

TunnelID的作用

1、判断接收IP报文时,是否要进行隧道转发

2、判断接收IP报文时,根据入标签匹配TunnelID在匹配到出标签,即标签的转发

FEC(转发等价类)的体现

如下图

但R1去往4.4.4.4时和R1去往3.3.3.3时,这两条路径,在R1到达R2的过程中是属于同一转发等价类的,但是等到R2往后的过程中就不一样了

息是否要进入隧道进行转发,dis fib

2、NHLFE,下一跳标签转发条目,dis mpls nhlfe

3、ILM,入标签的映射表,dis mpls ilm

在查看NHLFE和ILM的时候,需要先使用命令diagnose开启诊断模式,在进行查看

TunnelID的作用

1、判断接收IP报文时,是否要进行隧道转发

2、判断接收IP报文时,根据入标签匹配TunnelID在匹配到出标签,即标签的转发

FEC(转发等价类)的体现

如下图

但R1去往4.4.4.4时和R1去往3.3.3.3时,这两条路径,在R1到达R2的过程中是属于同一转发等价类的,但是等到R2往后的过程中就不一样了

[外链图片转存中...(img-aIjDz7TS-1734930514995)]

相关推荐
ghostwritten9 分钟前
Linux Swap: 深入解析 mkswap, mkfs.swap, 和 swapon
linux·运维·服务器
我是唐青枫10 分钟前
Linux xargs 命令使用教程
linux·运维·服务器
gallonyin11 分钟前
【监控】夜莺监控系统各环节资源压力分析
运维·服务器
未知陨落43 分钟前
Linux常用命令
linux·运维·服务器
chian-ocean1 小时前
Linux内核调度优先级详解:如何优化你的系统性能
linux·运维·服务器
HSunR2 小时前
计算机网络
网络·计算机网络
望获linux2 小时前
赋能新一代工业机器人-望获实时linux在工业机器人领域应用案例
linux·运维·服务器·机器人·操作系统·嵌入式操作系统·工业控制
ZoeLandia2 小时前
WebSocket | 背景 概念 原理 使用 优缺点及适用场景
网络·websocket·网络协议
程序员老冯头2 小时前
第十五章 C++ 数组
开发语言·c++·算法
南七澄江2 小时前
各种网站(学习资源及其他)
开发语言·网络·python·深度学习·学习·机器学习·ai