Cisco 尝试配置MPLS-V.P.N从开始到放弃
liuian 2025-09-13 04:04 3 浏览
本人第一次接触这个协议,所以打算分两篇进行学习和记录,本文枯燥预警,配置命令在下一篇全为定义,其也是算我毕业设计的一个小挑战。
新概念 重点备注
为什么选择该协议
IPSec VPN都属于传统VPN
传统VPN的缺陷 :范围都是点对点
1、需要手工静态指定建立,随着用户网络规模增长, 可扩展性不强
2、 VPN维护和管理工作属于用户自行完成
MPLS VPN的优点:
1、实现隧道的动态建立(通过MPLS中的LDP实现)
2、解决IP地址冲突问题
3、VPN私网路由易于控制
VPN核心思想就是隧道,实际上隧道就是进来封装,出去解封装,但不安全,只是打标签,隐藏IP报文。
传统IP 转发是逐包转发,检查路由表中的目标地址, 转发是它的瓶颈 (ATM由于成本太高)
注:
1、 面对去往目标存在多条路由 ,经过多次查表计算,选择IP转发采用最长匹配,算法效率不高
2、当前路由器多采用 CPU 进行转发处理, 性能有限。
ATM:采用定长标签来代替IP地址
1、ATM转发采用唯一标签匹配,一次查表,效率很高
2、但ATM控制层面配置复杂,成本高,难以普及
而MPLS介于IP与ATM协议之间
MPLS报文格式: MPLS封装方式 位于2.5层
MPLS用一个短而定长的标签来封装网络层分组,交换机路由器根据标签转发报文
MPLS多协议标签交换,起源于IPv4,最初是为了提高转发速度而提出的,其核心技术可扩展到多种网络协议,包括IPv6、IPX等
MPLS技术集二层的快速交换和三层的路由转发于一体,可以满足各新应用对网络的要求
接下来深入了解该协议。
一、MPLS:多协议标签交换
- 支持多种网络层协议,协议(3层)无关性,也叫2.5层协议
- 基于标签交换进行数据转发
与 MPLS 结合使用时,该 VPN 功能允许多个站点通过一个服务提供商的网络透明互联。一个服务提供商网络可以支持多个不同的 IP VPN。其中每一个 VPN 均向其用户显示为与所有其他网络分离的专用网络。在一个 VPN 内,每个站点都可以向该 VPN 其他任何站点发送信息 IP 数据包。每个 VPN 均与一个或多个 VPN 路由或转发实例 (VRF) 相关联。(一个 VRF 由一个 IP 路由表、一个派生的 Cisco 快速转发 (CEF) 表和使用此转发表的一组接口组成。)
路由器针对每个 VRF 维护一个单独的路由和 CEF 表。这样可以防止信息发送到 VPN 外,使相同的子网可以在多个 VPN 中使用,而不会导致 IP 地址发生重复。
1.1 IP数据转发方式
- 进程转发:每个数据包过来查找路由(与操作--->最长匹配---->递归查找),也叫基于数据包的转发
快速转发:每个流量中的第一个数据包进行路由查找,后续数据基于第一个数据包的缓存转发,一次路由、多次交换,也叫基于缓存的转发(区分源IP、目的IP、源端口、目的端口、协议号)
- CEF:cisco私有,特快交换,所有数据包无需查看路由转发,直接查看CEF(FIB)表进行转发,该表项是自动适应路由表,也叫基于拓扑的转发方式; 无需路由、直接交换,将路由表变为FIB表(递归完成后的表,目标对接口),ARP表变为ADJ表(接口+MAC),这两张表均为二进制表,可以被硬件直接编译,基于FIB+ADJ的综合表进行转发。
1.2 标签交换与传统数据包交换对比
- 标签交换转发效率优于传统数据包交换(已不明显)
- MPLS支持MPLS VPN,支持MPLS TE。
1.3 MPLS的主要应用场景
- 解决BGP的路由黑洞问题
- MPLS VPN
- MPLS TE(流量工程)
使用MPLS的前提是设置均基于CEF工作,还要保证IGP收敛。
- 启动CEF后,表格可以被ASIC(硬件芯片)直接调用
- CEF解决了递归的问题,便于MPLS生成标签转发表格
- CEF工作后生成FIB表,只有FIB可以存储标签表
1.4 控制层面和数据层面
控制层面:通过IGP(内部网关协议)或EGP(外部网关协议)交互路由条目,生成路由表,然后CEF基于路由表生成FIB表;MPLS使用TDP/LDP基于FIB表中的每一条信息(本地所有的路由条目)生成一个标签号,然后告知所有邻居;
数据层面:普通的数据包将基于FIB表转发,若数据包中存在标签号基于LFIB进行转发,标签的impose和pop也是在数据层面生成
1.5 MPLS模式
- Frame:帧模式,电路交换,二层协议为Ethernet、HDLC、PPP、FR(非ATM)
- Cell:信元模式,ATM模式,带有标签的数据信元
1.6 MPLS术语
FEC:转发等价类,具有相同的处理方式的一类数据称为一个转发等价(基于目标IP,源IP,VPN地址,QoS行为,出接口) LSR:标签交换路由器,标签交换(swap),查看数据包中的标签号然后基于LFIB表进行转发
E-LSR:边界标签交换路由器(PE),标签压入(impose)和弹出(pop)
LSP:标签交换路径
LIB:标签信息数库,存放本本路由器上针对所有FEC所分配的标签以及所有LDP邻居分配自己学习到的标签
LFIB:标签转发信息库,真正转发标签,由FIB和LIB共同生成,包含入标签和出标签
CE:客户端路由器,不工作于MPLS域,使用FIB表转发流量
二、MPLS的数据包格式
- Label:20bit,范围(16-2^20),0-15为保留标签
- EXP:3bit,用于在label中标记标签中优先级,用来做QoS
- S:1bit,栈底位,代表标签是否到达栈底S=0表示未到达栈底;S=1表示到达栈底,最多可以存在3层标签
一层标签为普通MPLS,主要用于解决BGP路由黑洞
二层标签为MPLS VPN使用
三层标签为MPLS TE使用
- TTL:8bit生存时间,用于MPLS label交换中防环,当标签号被impose时,将复制三层包头的TTL值,然后每经过一个路由器减1,当标签号被pop时,复制回IP包头中使用MPLS后,二层若依然为以太网封装,那么类型号将变化
0x8847 MPLS 单播
0x8848 MPLS 多播
三、标签分发协议
1.LDP和TDP
LDP:工业标准,基于TCP或UDP封装,使用端口号646,组播发送224.0.0.2(所有支持组播功能的路由器都接收该地址),支持认证
LDP邻居发现阶段:使用LDP的hello包建立邻居,不分配标签使用UDP方式,进行TCP三次握手
LDP的会话建立阶段:进行LDP初始化报文的发送,发送keepalive,并发送LDP的标签分发信息
TDP:cisco私有,应用层协议,基于TCP或UDP封装,使用端口号711,广播发送255.255.255.255,不支持认证
2.MP-BGP
3.RSVP
3.1 标签分发时的注意点
- 标签分发仅具有本地意义
- 标签分发是异步的
- 标签分发只会给本地直连、静态以及IGP路由分发标签,不会为BGP路由分发标签。BGP不分发标签,只会在数据层面为路由条目的下一跳添加标签。
- 标签分发、压入、弹出和交换通常只发生在运营商网络,客户端永远不可能收到带标签的报文。
四、MPLS的工作过程
当控制层面使用路由协议传递路由条目后,路由器上使用LDP/TDP为本地FIB表中每一条存在的路由条目均分配一个标签号,装载于LIB表中,同时传递给邻居,LIB中还记录邻居传递到本地标签号;之后路由器基于本地的FIB和LIB表生成LFIB(标签号的最佳对应路径)
数据层面工作时,第一跳路由器负责标签的impose,中间路由器基于标签号转发流量,进行标签号的替换,最后一跳路由器负责标签的pop。
入标签号为本地分配的标签号,出标签号为下一跳(下游)分配的标签号;存在上下游路由器的概念,基于数据层面定义
4.1 倒数第二跳弹出(次末跳弹出)
最后一跳路由器在默认情况下需要查看LFIB表后在查看FIB表,然后转发数据;PHP可以使倒数第二跳在已知出接口、下一跳等信息时便将标签号pop,然后基于出接口转发流量,导致最后一跳路由器仅查看FIB表
最后一跳路由器,将本地直连路由传递给邻居时使用label3来告知对方为倒数第二跳,非直连路由正常分配标签号;针对域外非直连路由,域内的最后一跳路由器需要查询两张表;建议PE路由器直接连接用于,不再连接其他路由器。
对于一条路由条目,如果该路由器路由表中该路由条目的出接口是一个没有启用MPLS的接口,则该接口就是最后一跳;或者该路由条目对应的下一跳邻居不是本地的TDP/LDP邻居时,该路由器同样为最后一跳路由器;只要一台路由器收到了关于一跳路由条目的标签是3,则该路由器就为倒数第二跳路由器
pop标签仅弹出最上层标签,仅仅只是倒数第二跳;untagged标签弹出所有标签,意味着离开了MPLS域。
倒数第一跳路由器向倒数第二跳路由器发送一个label3空标签,使倒数第二跳路由器提前弹出标签
五、MPLS配置
MPLS VPN配置思路:
5.1 启用CEF转发功能
5.2 配置连接P的接口,在该接口上启用 MPLS标签交换
5.3 配置VRF
5.4 配置RD
5.5 配置export RT和import RT
5.6 配置连接CE的接口,将该接口与VRF 联系起来
5.7 配置PE到CE的路由协议
5.8 配置MP-BGP协议
5.9 将CE路由引入PE的相关VRF BGP中
配不了配不了,放弃放弃!我用IPSec了,拜拜!
本文参考链接:
https://www.cisco.com/c/zh_cn/support/docs/multiprotocol-label-switching-mpls/mpls/13733-mpls-vpn-basic.html?dtid=osscdc000283
https://www.jb51.net/it/718012.html#t13
相关推荐
- Python 中 必须掌握的 20 个核心函数——items()函数
-
items()是Python字典对象的方法,用于返回字典中所有键值对的视图对象。它提供了对字典完整内容的高效访问和操作。一、items()的基本用法1.1方法签名dict.items()返回:字典键...
- Python字典:键值对的艺术_python字典的用法
-
字典(dict)是Python的核心数据结构之一,与列表同属可变序列,但采用完全不同的存储方式:定义方式:使用花括号{}(列表使用方括号[])存储结构:以键值对(key-valuepair)...
- python字典中如何添加键值对_python怎么往字典里添加键
-
添加键值对首先定义一个空字典1>>>dic={}直接对字典中不存在的key进行赋值来添加123>>>dic['name']='zhangsan'>>...
- Spring Boot @ConfigurationProperties 详解与 Nacos 配置中心集成
-
本文将深入探讨SpringBoot中@ConfigurationProperties的详细用法,包括其语法细节、类型转换、复合类型处理、数据校验,以及与Nacos配置中心的集成方式。通过...
- Dubbo概述_dubbo工作原理和机制
-
什么是RPCRPC是RemoteProcedureCall的缩写翻译为:远程过程调用目标是为了实现两台(多台)计算机\服务器,互相调用方法\通信的解决方案RPC的概念主要定义了两部分内容序列化协...
- 再见 Feign!推荐一款微服务间调用神器,跟 SpringCloud 绝配
-
在微服务项目中,如果我们想实现服务间调用,一般会选择Feign。之前介绍过一款HTTP客户端工具Retrofit,配合SpringBoot非常好用!其实Retrofit不仅支持普通的HTTP调用,还能...
- SpringGateway 网关_spring 网关的作用
-
奈非框架简介早期(2020年前)奈非提供的微服务组件和框架受到了很多开发者的欢迎这些框架和SpringCloudAlibaba的对应关系我们要知道Nacos对应Eureka都是注册中心Dubbo...
- Sentinel 限流详解-Sentinel与OpenFeign服务熔断那些事
-
SentinelResource我们使用到过这个注解,我们需要了解的是其中两个属性:value:资源名称,必填且唯一。@SentinelResource(value="test/get...
- 超详细MPLS学习指南 手把手带你实现IP与二层网络的无缝融合
-
大家晚上好,我是小老虎,今天的文章有点长,但是都是干货,耐心看下去,不会让你失望的哦!随着ASIC技术的发展,路由查找速度已经不是阻碍网络发展的瓶颈。这使得MPLS在提高转发速度方面不再具备明显的优势...
- Cisco 尝试配置MPLS-V.P.N从开始到放弃
-
本人第一次接触这个协议,所以打算分两篇进行学习和记录,本文枯燥预警,配置命令在下一篇全为定义,其也是算我毕业设计的一个小挑战。新概念重点备注为什么选择该协议IPSecVPN都属于传统VPN传统VP...
- MFC -- 网络通信编程_mfc编程教程
-
要买东西的时候,店家常常说,你要是真心买的,还能给你便宜,你看真心就是不怎么值钱。。。----网易云热评一、创建服务端1、新建一个控制台应用程序,添加源文件server2、添加代码框架#includ...
- 35W快充?2TB存储?iPhone14爆料汇总,不要再漫天吹15了
-
iPhone14都还没发布,关于iPhone15的消息却已经漫天飞,故加紧整理了关于iPhone14目前已爆出的消息。本文将从机型、刘海、屏幕、存储、芯片、拍照、信号、机身材质、充电口、快充、配色、价...
- SpringCloud Alibaba(四) - Nacos 配置中心
-
1、环境搭建1.1依赖<!--nacos注册中心注解@EnableDiscoveryClient--><dependency><groupI...
- Nacos注册中心最全详解(图文全面总结)
-
Nacos注册中心是微服务的核心组件,也是大厂经常考察的内容,下面我就重点来详解Nacos注册中心@mikechen本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集》里面。微服务注册中...
- 网络技术领域端口号备忘录,受益匪浅 !
-
你好,这里是网络技术联盟站,我是瑞哥。网络端口是计算机网络中用于区分不同应用程序和服务的标识符。每个端口号都是一个16位的数字,范围从0到65535。网络端口的主要功能是帮助网络设备(如计算机和服务器...
- 一周热门
-
-
【验证码逆向专栏】vaptcha 手势验证码逆向分析
-
Python实现人事自动打卡,再也不会被批评
-
Psutil + Flask + Pyecharts + Bootstrap 开发动态可视化系统监控
-
一个解决支持HTML/CSS/JS网页转PDF(高质量)的终极解决方案
-
再见Swagger UI 国人开源了一款超好用的 API 文档生成框架,真香
-
网页转成pdf文件的经验分享 网页转成pdf文件的经验分享怎么弄
-
C++ std::vector 简介
-
飞牛OS入门安装遇到问题,如何解决?
-
系统C盘清理:微信PC端文件清理,扩大C盘可用空间步骤
-
10款高性能NAS丨双十一必看,轻松搞定虚拟机、Docker、软路由
-
- 最近发表
-
- Python 中 必须掌握的 20 个核心函数——items()函数
- Python字典:键值对的艺术_python字典的用法
- python字典中如何添加键值对_python怎么往字典里添加键
- Spring Boot @ConfigurationProperties 详解与 Nacos 配置中心集成
- Dubbo概述_dubbo工作原理和机制
- 再见 Feign!推荐一款微服务间调用神器,跟 SpringCloud 绝配
- SpringGateway 网关_spring 网关的作用
- Sentinel 限流详解-Sentinel与OpenFeign服务熔断那些事
- 超详细MPLS学习指南 手把手带你实现IP与二层网络的无缝融合
- Cisco 尝试配置MPLS-V.P.N从开始到放弃
- 标签列表
-
- python判断字典是否为空 (50)
- crontab每周一执行 (48)
- aes和des区别 (43)
- bash脚本和shell脚本的区别 (35)
- canvas库 (33)
- dataframe筛选满足条件的行 (35)
- gitlab日志 (33)
- lua xpcall (36)
- blob转json (33)
- python判断是否在列表中 (34)
- python html转pdf (36)
- 安装指定版本npm (37)
- idea搜索jar包内容 (33)
- css鼠标悬停出现隐藏的文字 (34)
- linux nacos启动命令 (33)
- gitlab 日志 (36)
- adb pull (37)
- python判断元素在不在列表里 (34)
- python 字典删除元素 (34)
- vscode切换git分支 (35)
- python bytes转16进制 (35)
- grep前后几行 (34)
- hashmap转list (35)
- c++ 字符串查找 (35)
- mysql刷新权限 (34)