MPLS virtual private network报文转发过程

2024-04-27 15:32

本文主要是介绍MPLS virtual private network报文转发过程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

概述:

首先数据流由CE 到PE使用的是IP转发,这个很容易理解。而数据流要经过骨干网,因为骨干网内部Р路由器没有私网路由,也就是没办法使用P转发,这时就应该想到用MPLS标签转发技术。在IP报文进入到MPLS骨干网的PE后封装上一个公网标签,该标签对应着穿越整个公网的LSP,数据包通过LSP隧道转发到出站的 PE,中间的P路由器只使用标签交换转发方式,而不需要IP转发,数据包的入站PE和出站PE同时使用了IP转发和标签转发。

那公网中的LSP是如何建立的?它是由LDP协议通过为公网中的IGP路由映射标签,然后进行分发标签等过程后来建立的。

当数据包到达出站PE时,因为是从公网的接口接收到的数据包,所以还必须使用一个VPN标签(私网标签)用于判断数据包通过哪个VPN实例进行转发。私网标签在前文中有提到过,它是由MP-BGP 协议生成的,每条VPN路由都会有一个私网标签,出站的PE可以借私网标签知道该向哪个VPN转发数据。

所以,在 VPN的业务数据通过MPLS 骨干网时会带上两层标签(公网标签和私网标签),公网标签位于外层,用于使数据包穿越整个公网发送到出站的 PE;私网标签位于内层,用于判断该数据包属于哪个VPN实例。下面从三个阶段具体分析整个数据转发的过程:

  1. 数据从CE到入站PE。
  2. 数据从入站PE到出站PE。
  3. 数据从出站PE到远端的CE。

阶段一:数据从CE到入站PE

如图所示,Site2去往Site1的业务数据由CE2转发到PE2(普通IP转发〉后,PE2根据数据包进入的接口,查找相应的VPN实例转发表,找到该路由在公网的下一跳(对端PE的 Loopback接口)和私网标签。封装完私网标签(MP-BGP分配)后,再通过公网的标签(MPLS分配)转发表,查找到去往公网中下一跳地址的标签,该标签作为公网标签封装进数据包,封装完两层标签后,数据包被转发进 MPLS 网络。
在这里插入图片描述

阶段二:数据从入站PE到出站PE

在这里插入图片描述
如图所示,在前文有说到,当IP报文由入站PE进入MPLS网络后会通过LSP转发,并且通过中间的P设备查找标签转发表进行标签交换,最终通过公网LSP转发到出站的PE。

注意:数据包实际转发时不会携带3号标签,这里出现3号标签是为了方便表述原理。

阶段三:数据从出站PE到远端的CE

当数据包由MPLS骨干网转发到达出站PE时,只剩下一层私网标签,这是因为PHP(倒数第二跳弹出)的原因,公网标签已经在倒数第二跳的Р设备剥离掉了。出站PE利用该私网标签判断出该数据包去往的VPN实例,在查找到相应的VPN实例转发表后,移除该私网标签,将报文还原为IP报文后再转发给CE,如图所示:
在这里插入图片描述
至此,客户通过MPLS VPN完成了私网站点之间的流量转发,可以发现VPN业务的数据流是经过骨干网的LSP隧道方式进行转发的从而保证了客户数据的安全性。

这里需要强调的是,传递VPN业务数据流时需要使用到两层标签(私网标签+公网标签),公网标签用于帮助VPN业务数据流穿越公网中的LSP,而私网标签用于LSP的出站PE进行判断该向哪个VPN实例进行转发,那么这两个标签是如何产生的?这里我们再了解一下公网标签和私网标签的详细分配过程。

公网标签分配过程:

因为 MPLS VPN骨干网中的Р路由器并没有私网路由,所以骨干网不能使用IP转发的方式来转发VPN业务数据流,而是使用MPLS标签转发的方式,这就需要骨干网的PE之间为每个VPN客户建立一条或多条公网LSP,VPN业务流通过入站PE进入骨干网后,通过相应LSP转发到出站PE。公网标签是由骨干网内部的LDP 协议根据IGP路由或静态路由而产生的标签,那么下面就来具体分析一下通过LDP协议产生公网标签并建立公网LSP的过程。

前文中有提到,VPNv4路由通过MP-iBGP在PE之间交换,两个PE 需要使用Loopback 接口来建立MP-iBGP 邻居,所以在 MPLS骨干网内部需要使用IS-IS、OSPF等IGP协议来打通PE和Р路由器之间的路由连通性。当所有Р和PE路由器都有了公网的路由后,通过LDP协议互相通告标签映射,从而建立公网路由的标签转发表。下面以图下的案例为例来介绍一下公网LSP的建立过程。
在这里插入图片描述
如图所示,PE1和 PE2之间通过Loopback0接口建立.MP-iBGP 邻居,Site1和Site2已经完成了VPNv4路由的交换。现以Sitel访问Site2方向的数据流为例,对LSP的入站PE1来说,到达Site2的下一跳为10.1.4.4,那么需要有到该下一跳的LSP。由于LDP协议依据IGP的路由前缀(FEC)来建立LSP。LSP的出站 PE2会通过LDP协议将自己的Loopback0 (10.1.4.4/32)对应的标签映射发布给Р路由器,Р路由器在收到出站PE 的标签时也会生成自己的标签,然后发布给其上游LDP邻居。这样,在入站PE1处会收到来自Р路由器的关于出站PE2的 Loopback0路由的标签,也就是在入站PE1处会拥有去往下一跳(出站PE2的Loopback0)的标签,这样建立了公网的LSP。下面的输出显示了PE1上关于到下一跳10.1.4.4的 LSP转发信息,其中,标签1025( out-label )就是由LDP邻居分配的,如下输出所示:
在这里插入图片描述
我们再来观察一下P2上有关10.1.4.4的LSP 转发信息,如下输出所示:
在这里插入图片描述
可以发现,公网标签实际上在数据流到达出站PE2之前就已经被弹出了,这是由于启用了PHP机制的原因。

私网标签分配过程:

在这里插入图片描述
现以vpna的 Site1 中1.1.5.0/24访问Site2中的1.1.6.0/24为例。

第1步:CE1使用IP转发的方式将数据流量转发至PE1。
第2步:PE1接收到来自CE1的数据流量时,查找VPN实例(vpna)的FIB表,根据FIB表中的转发信息压入对应的标签,然后转至下一跳P1。这里我们来看一下PE1的VPN实例(vpna)的FIB表关于目标路由前缀1.1.6.0/24的详细信息,如下输出所示:
在这里插入图片描述
由上面的输出信息可以发现,此时PE1会在报文中压入私网标签(InLabel) 1029,同时,这条目标路由前缀是由BGP 邻居 PE2(地址是10.1.4.4)通告过来的,所以报文需要送达到PE2,而要送达到这个地址,必须有到达这个地址的LSP,这时再查看一下PE1公网LSP转发表,如下输出所示:
在这里插入图片描述
由上面的输出信息可知,PE1要将数据转发给10.1.4.4,需要再压入公网标签1025,然后通过公网的LSP将数据流转发到PE2。也就是说,当数据流进入PE1时,分别压入了一个私网标签1029和一个公网标签1025,然后转发给P1路由器。

第3步:当P1路由器接收到该数据流后,根据数据包的公网标签信息进行转发,直接根据标签转发表进行转发,由下面的输出可以知道P1路由器接收到带有标签值为1025的报文时,直接将标签交换成出标签1025,然后从GEO/0/1转发给下一跳P2路由器,如下输出所示:
在这里插入图片描述
第4步:数据流到达P2路由器,这时P2和P1的处理方式相同,根据P2的标签转发表(如下表所示)的信息,此时P2将数据包携带公网标签1025进行弹出后再转发至PE2,也就是数据包到达PE2时只剩下一层私网标签,如下输出所示:
在这里插入图片描述
第5步:只带有私网标签信息的数据包到达PE2。PE2标签转发表(如下表所示)显示该FEC的出标签为空,所以在完成标签移除操作后,再以P转发的方式将P数据包转发至CE2,如下输出所示:

在这里插入图片描述
以上就是通过MPLS VPN传递用户业务数据流的整个过程,可以发现,对于入站PE1来说,在接收到用户的IP业务流量时,需要完成压入双层标签的操作;对于出站PE2来说,需要将标签从数据包中移除,然后以IP转发的方式将流量转发给用户的CE2设备;而对于骨干网中的P路由器来说,只需要进行标签的交换就可以完成数据包的转发。

整理资料来源:HCIE路由交换学习指南

这篇关于MPLS virtual private network报文转发过程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/940872

相关文章

Nginx如何进行流量按比例转发

《Nginx如何进行流量按比例转发》Nginx可以借助split_clients指令或通过weight参数以及Lua脚本实现流量按比例转发,下面小编就为大家介绍一下两种方式具体的操作步骤吧... 目录方式一:借助split_clients指令1. 配置split_clients2. 配置后端服务器组3. 配

Spring Security注解方式权限控制过程

《SpringSecurity注解方式权限控制过程》:本文主要介绍SpringSecurity注解方式权限控制过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、摘要二、实现步骤2.1 在配置类中添加权限注解的支持2.2 创建Controller类2.3 Us

Spring AI集成DeepSeek三步搞定Java智能应用的详细过程

《SpringAI集成DeepSeek三步搞定Java智能应用的详细过程》本文介绍了如何使用SpringAI集成DeepSeek,一个国内顶尖的多模态大模型,SpringAI提供了一套统一的接口,简... 目录DeepSeek 介绍Spring AI 是什么?Spring AI 的主要功能包括1、环境准备2

SpringBoot集成图片验证码框架easy-captcha的详细过程

《SpringBoot集成图片验证码框架easy-captcha的详细过程》本文介绍了如何将Easy-Captcha框架集成到SpringBoot项目中,实现图片验证码功能,Easy-Captcha是... 目录SpringBoot集成图片验证码框架easy-captcha一、引言二、依赖三、代码1. Ea

pycharm远程连接服务器运行pytorch的过程详解

《pycharm远程连接服务器运行pytorch的过程详解》:本文主要介绍在Linux环境下使用Anaconda管理不同版本的Python环境,并通过PyCharm远程连接服务器来运行PyTorc... 目录linux部署pytorch背景介绍Anaconda安装Linux安装pytorch虚拟环境安装cu

SpringBoot项目注入 traceId 追踪整个请求的日志链路(过程详解)

《SpringBoot项目注入traceId追踪整个请求的日志链路(过程详解)》本文介绍了如何在单体SpringBoot项目中通过手动实现过滤器或拦截器来注入traceId,以追踪整个请求的日志链... SpringBoot项目注入 traceId 来追踪整个请求的日志链路,有了 traceId, 我们在排

Spring Boot 3 整合 Spring Cloud Gateway实践过程

《SpringBoot3整合SpringCloudGateway实践过程》本文介绍了如何使用SpringCloudAlibaba2023.0.0.0版本构建一个微服务网关,包括统一路由、限... 目录引子为什么需要微服务网关实践1.统一路由2.限流防刷3.登录鉴权小结引子当前微服务架构已成为中大型系统的标

Java中对象的创建和销毁过程详析

《Java中对象的创建和销毁过程详析》:本文主要介绍Java中对象的创建和销毁过程,对象的创建过程包括类加载检查、内存分配、初始化零值内存、设置对象头和执行init方法,对象的销毁过程由垃圾回收机... 目录前言对象的创建过程1. 类加载检查2China编程. 分配内存3. 初始化零值4. 设置对象头5. 执行

SpringBoot整合easy-es的详细过程

《SpringBoot整合easy-es的详细过程》本文介绍了EasyES,一个基于Elasticsearch的ORM框架,旨在简化开发流程并提高效率,EasyES支持SpringBoot框架,并提供... 目录一、easy-es简介二、实现基于Spring Boot框架的应用程序代码1.添加相关依赖2.添

SpringBoot中整合RabbitMQ(测试+部署上线最新完整)的过程

《SpringBoot中整合RabbitMQ(测试+部署上线最新完整)的过程》本文详细介绍了如何在虚拟机和宝塔面板中安装RabbitMQ,并使用Java代码实现消息的发送和接收,通过异步通讯,可以优化... 目录一、RabbitMQ安装二、启动RabbitMQ三、javascript编写Java代码1、引入