MPLS详解

一、SMPLS:多协议标签交换

多协议:可以基于多种不同的3层协议来生成2.5层的标签信息;

包交换---包为网络层的PDU,故包交换是基于IP地址进行数据转发;就是路由器的路由行为;

两张表---路由表、ARP表:

路由表---找到出接口

ARP表---找到下一跳、目标MAC地址

二、包交换:

原始的包交换

数据包进入路由器后,路由器需要查询本地的路由表(RIB-路由信息数据库),再基于下一跳或者目标ip查询本地的ARP表,才能进行数据的转发;(既查路由表,又查ARP表)

快速的包交换

一次路由多次交换;每个数据流中的第一个包将被基于原始包交换规则转发;过程中生成转发规则缓存列表,记录整个通讯过程,该数据流量剩余数据包仅查询缓存记录即可;(一次路由,多次交换)

特快的包交换

无需路由,直接交换; CEF-cisco特快交换,为cisco私有技术;非cisco厂商设备均存在和cef转发机制相同的技术;

将路由表和ARP转换为 FIB(转发信息数据库)表 流量转发过程中仅查询FIB表即可;

FIB的特点:在将路由器表转换过程中,存储递归查询后的结果;同时将新封装的二层地址进行绑定;

IP fast0/0 172.16.20.115(7) 目标地址

源 (递归后的出接口) 0 packets, 0 bytes

epoch 0

sourced in sev-epoch 357

Encap length 14

701CE7662A9768EFBD1D24C50800 新的二层封装

目标MAC 源MAC 类型号

三、标签交换

数据包在进入到的MPLS的域内后,将在第2层和3层中间压入标签号;使得域内的路由器在转发该数据包时,基于2.5层的标签号仅需要查询本地的一张LFIB表(标签转发信息数据库),即可进行数据转发 --第一跳路由器负责压入标签 最后一跳弹出标签(若中间路由器数量多,则能体现出标签交换的优势,因为中间路由器只需查一张表----LFIB表)

最初在包交换仅支持原始交换时,标签的意义在于更快的查询;但随着包交换的加速,使用标签交换失去了快速查表的优势;

当下MPLS存在的意义:

1、解决BGP的路由黑洞 2、MPLS VPN 3、MPLS TE 流量工程

另外:随着包交换的加速,使得今天的MPLS技术也开始基于FIB表工作;来提高MPLS的工作效率;

四、工作过程

控制层面:路由协议工作,生成RIB----(由于CEF)FIB,流量的方向即为控制流量;

数据层面:设备基于路由表访问目标,产生数据流量;与控制层面方向相反;

LDP工作原理

控制层面:

1)在没有MPLS时控制层面仅生成RIB(路由表)和FIB(转发信息数据库);FIB是基于RIB生成;

2)MPLS协议会启动TDP(cisco私有)或LDP(公有),直连设备间将建立邻居关系;

LDP-- 基于UDP和TCP的646端口工作;先使用udp发送组播hello包发现邻居,获取邻居ip地址,再和该直连邻居建立TCP的会话;邻居关系建立后;为了邻居关系间的稳定,一般使用设备的环回地址来建立tcp会话;建议设置环回地址为mpls协议的route-id,该id值将携带在组播收发的hello报文中,之后自动进行tcp会话建立;

总结:MPLS协议需要在直连邻居间使用router-id地址来进行TCP的会话;故前提条件为,route-id必须为设备真实使用的ip地址,建议为环回地址---稳定; 组播hello包在直连的物理接口上收发,来获取对端的router-id,自然也要求router-id值间路由可达;

因此正常在建立LDP的邻居关系 ,路由协议已经收敛完成,RIB和FIB表已经生成;

3)MPLS在建立邻居关系后,生成邻居表;LDP协议再基于FIB表中学习到的路由条目生成标签号;

cisco 设备默认基于FIB表中所有学习到的路由条目生成标签号,华为设备默认仅基于FIB表中32位掩码的主机路由生成标签号;原因在于正常32位主机路由为ospf学习的环回接口,正常工程中只有BGP和MPLS VPN才会基于环回通讯,使用标签转发;其他普通流量还是基于特快包交换来进行;反观cisco在启动mpls以后,所有流量将基于标签转发,降低了转发效率(前提为默认)

4)标签号生成后,将存储于本地的LIB表-标签信息数据库;LIB表将在邻居间共享;

LIB表中装载本地及邻居为每条路由分发的标签号;

5)运行MPLS协议的设备,将LIB和FIB进行结合,将标签号和最佳路径的关系映射生成LFIB表(标签转发信息数据库)

注:控制层面生成的表格:

RIB---》FIB---》LIB---》LFIB 前两张表为路由协议工作后生成,后两张表为MPLS的LDP协议生成;

总结:当没有运行MPLS,路由协议(直连,静态,动态)完成路由收敛后会产生RIB表,由于现在路由器都支持CEF(特快交换),那么RIB表生成后会被路由器转换为FIB表(可以理解为一个更好更快的路由表或者一个囊括了ARP表功能的路由表)当MPLS运行时LDP会为FIB里面的每一个目标网段分配一个本地唯一标签号,将标签信息存入LIB表(标签信息库),与上下游邻居共享LIB表;路由器的LDP协议会将LIB和FIB结合起来生成一个转发规则---LFIB表

数据层面:
  1. 没有MPLS协议,基于FIB表正常转发即可
  2. 名词:MPLS domain -- MPLS的工作半径

edge LSR(PE)--边界标签交换路由器 工作mpls域的边缘,连接域外设备

LSR (P) -- 标签交换路由器 整体工作MPLS域内

  1. 当流量进入到第一台pe(边界)设备时, 在没有特快交换之前,路由器基于目标IP地址查询本地的RIB;之后还要在LIB表中对应才能确定流量是否应该压入标签,需要两张表的查询;

在存在特快交换时,流量进入第一pe时,直接查询FIB表(可以存储标签号),表中关联标签号,将直接确定是否压入标签;

流量再到P路由器,接收到流量中若存在标签基于LFIB表转发,若没有标签基于FIB表即可;

流量从最后一台边界离开MPLS 域时将弹出标签;

存在标签号的流量,进入路由器时,入标签表应该为本地路由器分配的编号,出标签为本地的下游(下一跳)设备分配的标签号; 上下游的概念基于数据层面进行标定;

总结:数据包进入第一跳路由器时,压入下一跳设备分配的标签号,然后将流量转发给下一跳路由器,之后域中路由器基于数据包中的2.5层标签号,查询本地的LFIB进行数据包的转发,以及标签号的替换;当数据到达最后一条路由器,将弹出标签号;

五、标签号

标签被压入在2层与3层之间,称为2.5层

标签的格式---32位,4个字节

前20位为标签号,2^20个标签号;其中1-15号保留,作为特殊编号;

第21-23位exp,3位8个数,为优先级,用于QOS策略使用;

第24位为栈底位,该位为1标识该标签为最后一层标签;MPLS最大可以在一个数据包中封装3次标签;

普通的MPLS 一层标签 MPLS VPN 两层 MPLS TE 3层

TTL 生存时间 在第一次压入标签时,将当前数据包中的3层TTL复制到标签中;之后查询一次标签TTL减一,在最后一跳设备弹出标签时将2.5层的TTL复制到3层报头中;

六、MPLS的次末跳 -- 倒数第二跳 默认执行

优化前

优化后

边界LSR将本地的直连网段传递给MPLS域内邻居后,LDP分配标签号为3,告知倒数第二跳设备它的身份;导致倒数第二跳设备在查询LFIB表后,已知转发路径的前提下提前弹出标签,使得最后一跳路由器均只需要查询FIB表; 否则最后一跳路由器在查询LFIB表后,弹出标签还需要查询FIB;

七、MPLS的配置

  1. IP可达--- 使用路由协议全网可达
  2. 配置MPLS -- LDP

r2\]mpls lsr-id 2.2.2.2 必须先定义mpls的router-id,要为本地设备的真实ip地址,且邻居可达,因为该地址将用于建立TCP会话,建议使用环回地址 [r2]mpls 再开启mpls协议 [r2-mpls]mpls ldp 再激活LDP协议 [r2-mpls-ldp]q 之后需要在所有标签经过的接口上开启协议 [r2]interface GigabitEthernet 0/0/1 [r2-GigabitEthernet0/0/1]mpls 先开启MPLS [r2-GigabitEthernet0/0/1]mpls ldp 再激活LDP协议 当启动配置完成后,邻居间使用UDP报文组播收发hello包;之后基于hello包中的router-id地址进行TCP会话的建立; [r3]display tcp status TCPCB Tid/Soid Local Add:port Foreign Add:port VPNID State b4cf3d64 167/6 3.3.3.3:646 4.4.4.4:50858 0 Established b4cf3adc 167/3 3.3.3.3:50806 2.2.2.2:646 0 Established 当tcp会话建立后,邻居间基于TCP会话再建立邻居关系,生成邻居表: \[r3\]display mpls ldp peer 再然后基于本地的FIB表,默认华为仅针对32位的主机路由生成标签号;存储于LIB表中,之后邻居间共享LIB表; \[r3\]display fib 查看FIB表(0X0---表示不打标签) ![](https://file.jishuzhan.net/article/1780807290278907905/fc2fdbfc6acd767a1c1cebf80353d5c5.webp) \[r3\]display fib verbose 查fib的最详信息 ![](https://file.jishuzhan.net/article/1780807290278907905/9b4698210a65dbacc32a9b29994fce55.webp) ![](https://file.jishuzhan.net/article/1780807290278907905/bfde9315114a97d42f6692be53bf09cf.webp) \[r4\]display mpls ldp lsp 查看LIB表,装载本地和邻居为各条路由分配的标签号 最后路由器将LIB和FIB集合,生成最佳路径的标签转发规则---LFIB \[r4\]display mpls lsp 查看LFIB表 **注:默认华为仅针对32位主机路由分配标签** [r3]mpls [r3-mpls]lsp-trigger all 开启功能,将针对fib表中所有路由进行标签号的分配 \[r2\]tracert -v -a 2.2.2.2 56.1.1.2 ![](https://file.jishuzhan.net/article/1780807290278907905/ea2cd54eebb471340a106b259906f66c.webp) ### 八、使用mpls解决BGP的路由黑洞 MPLS协议并不会为通过BGP协议学习的路由条目分配标签号; 而是在访问这些BGP路由目标网段时,在流量中压入到达这些网段的BGP下一跳设备地址的标签号; 例:R2从BGP邻居5.5.5.5 学习到6.6.6.0 网段的路由;R2在访问6.6.6.0 时,将在数据包中压入到达5.5.5.5ip地址的标签号,来穿越中间没有运行BGP协议的设备;实现打破路由黑洞; ![](https://file.jishuzhan.net/article/1780807290278907905/bb0b884eddf52c4d1cbac1cc27e8a846.webp) R1到R6,首先流量到达R2上,R2查FIB表 ![](https://file.jishuzhan.net/article/1780807290278907905/c0bbea7369566619c17c812fc473aa62.webp) 查看详细FIB详细信息,查看标签号 ![](https://file.jishuzhan.net/article/1780807290278907905/93a033e16666b8b254b32860787e1fe8.webp) 由于R3收到的包带有标签号,此时查LFIB表 ![](https://file.jishuzhan.net/article/1780807290278907905/ed2dae0e8775ab7b64c5b08905224da5.webp) 同理R4查LFIB![](https://file.jishuzhan.net/article/1780807290278907905/745871a28e85e482dbf7f3446d8e9051.webp) 到R5时,没有标签,此时查R5的FIB表 ![](https://file.jishuzhan.net/article/1780807290278907905/e29552819db55054af7e18af6fd302ad.webp) 最终流量从GE0/0/1出,并且没有标签号,到达目标网段,解决BGP黑洞 **注:华为设备默认不为BGP协议执行下一跳标签机制,cisco默认执行;** **华为设备需要开启 route recursive-lookup tunnel 路由基于隧道进行递归查找** VPN---虚拟专用 模拟点到点专线 缺点:1、安全问题 2、带宽问题 宽带---访问互联网(企业/家用) 专线---点到点互通 ### 九、MPLS VPN 模拟真正的专线,不能直接上网需要拉宽带 为什么最接近专线----1、在整个公网传输中,路由完全隔离(路由安全) 2、流量会打MPLS的标签,标签中有个EXP(策略位)位,运营商会为 MPLS 的流量单独做一个策略,一旦遇到MPLS流量全部优先转发,保证 运营商承诺的带宽 1. CE将私有路由传递到PE端 2. PE端在收到不同CE发送过来的相同网段路由时,使用RD值进行区分---格式X:X 32位 3. PE端将附上RD的私有路由不能直接装载于本地公有路由表中,需要放置到对应的VRF(虚拟路由转发)空间内;之后再路由付RT值,用于传递到对端PE设备,对端区分信息; **VPNV4路由=普通IPV4路由+RD+RT** 1. VPNV4路由需要MP-BGP来进行传递;对端基于RT值,将路由装载到对应的VRF空间内,再共享给对应的CE; 2. 控制层面工作完成后,数据层面需要基于MPLS来工作,由于数据层面不能携带RD/RT值; 故mpls将在数据包中压入两层标签,外层标签用于穿越中间设备,打破BGP路由黑洞; 内层标签用于对应VRF空间;![](https://file.jishuzhan.net/article/1780807290278907905/8c944daa24cb92f48a82d06e08c567e7.webp) 控制层面: R1和R6两个CE端将流量通过静态或动态协议将发送到R2这个PE端时,R2会通过RD值进行区分,并放入对应的VRF(虚拟路由转发)空间内,由于R2和R4建立BGP邻居(不能用公网中所运行的协议进行传输,1.因为R2,R3,R4的协议是公有协议;2.普通的路由协议不能用来传,因为此时是VPNV4路由而不是IPV4路由,需要用MPBGP来传 ),R2会将流量转发给R4,R4通过RT值进行区分,并放入对应的VRF空间内,转发给目标网段。 数据层面: R5和R7将流量发给R4,R4会查VRF路由表,由此知道下一跳是R2,数据层面需要基于MPLS来工作,由于数据层面不能携带RD/RT值;故mpls将在数据包中压入两层标签,外层标签用于穿越中间设备,打破BGP路由黑洞;内层标签用于对应VRF空间; ###### 配置方法: ###### 1.ISP部分 1. IGP路由 2. MPLS域 3. 配置MPLS VPN [r2]ip vpn-instance a 创建名为a的vrf空间 [r2-vpn-instance-a]ipv4-family 进入IPV4的配置模式下 [r2-vpn-instance-a-af-ipv4]route-distinguisher 1:1 RD值 [r2-vpn-instance-a-af-ipv4]vpn-target 1:1 RT值 必须对端的PE端一致 [r2]interface GigabitEthernet 0/0/0 进入链接CE端的接口 [r2-GigabitEthernet0/0/0]ip binding vpn-instance a 关联到vrf空间,不在普通路由表中 [r2-GigabitEthernet0/0/0]ip address 192.168.2.2 24 配置私有ip地址 **注:在关联到vrf空间前不能配置接口ip,否则该地址的直连路由将进入公有路由表;** \[r2\]display ip routing-table vpn-instance a 查看空间内的私有路由表 ![](https://file.jishuzhan.net/article/1780807290278907905/b25da8ae08031c492c0a1528dc39b1ed.webp) \[r2\]ping -vpn-instance a 192.168.2.1 正常测试将在公有路由表中查询记录;该命令为基于VRF空间 a进行路由查询 ###### 2.PE与PE间建立MP-BPG邻居关系 [r2]bgp 2 [r2-bgp]router-id 2.2.2.2 先和对端建立正常BGP邻居关系,可用于传递正常的公网路由 [r2-bgp]pe 4.4.4.4 as-number 2 [r2-bgp]pe 4.4.4.4 connect-interface LoopBack 0 [r2-bgp]pe 4.4.4.4 next-hop-local 同时还需要再在IPV4的家族模式中,与对端建立一个VPNV4的关系,用于传递VPNV4路由 [r2-bgp]ipv4-family vpnv4 [r2-bgp-af-vpnv4]peer 4.4.4.4 enable \[r2-bgp\]display bgp vpnv4 all peer 查看mp-bgp邻居关系 ###### 3.CE端与PE端交互路由 静态: CE端直接编写静态路由即可; PE端编写到VRF空间内的静态路由 \[r2\]ip route-static vpn-instance a 192.168.1.0 24 192.168.2.1 将本地vrf空间内的静态和直连路由重发布到BGP协议传递到对端的PE [r2]bgp 2 [r2-bgp]ipv4 vpn-instance a [r2-bgp-a]import-route direct [r2-bgp-a]import-route static display bgp vpnv4 vpn-instance a routing-table 查看mp-bpg的BGP表 OSPF: CE端正常启动OSPF即可 PE端,启动VPNV4专用的ospf协议 [r4]ospf 2 vpn-instance a [r4-ospf-2]area 0 [r4-ospf-2-area-0.0.0.0]network 192.168.3.1 0.0.0.0 之后使用双向重发布,实现路由共享 [r4]bgp 2 [r4-bgp]ipv4-family vpn-instance a [r4-bgp-a]import-route ospf 2 [r4]ospf 2 vpn-instance a [r4-ospf-2]import-route bgp \[r4\]display mpls lsp vpn-instance a 查看双层标记的内层标签号 ![](https://file.jishuzhan.net/article/1780807290278907905/306320c88da0c10536d7f9b6d8c407d9.webp)

相关推荐
ZeroNews内网穿透34 分钟前
服装零售企业跨区域运营难题破解方案
java·大数据·运维·服务器·数据库·tcp/ip·零售
果子⌂1 小时前
容器技术入门之Docker环境部署
linux·运维·docker
神的孩子都在歌唱1 小时前
常见的网络攻击方式及防御措施
运维·服务器·网络
深度学习04071 小时前
【Linux服务器】-安装ftp与sftp服务
linux·运维·服务器
岑梓铭2 小时前
计算机网络第九章——数据链路层《局域网》
网络·笔记·计算机网络·考研·408
小白爱电脑3 小时前
什么是2.5G交换机?
运维·网络·5g·千兆宽带
?ccc?3 小时前
容器技术技术入门与 Docker 环境部署
运维·docker·容器
时时刻刻看着自己的心4 小时前
docker启动报错
运维·docker·容器
我科绝伦(Huanhuan Zhou)4 小时前
华为泰山服务器重启后出现 XFS 文件系统磁盘“不识别”(无法挂载或访问),但挂载点目录仍在且无数据
运维·服务器·华为
阿沁QWQ4 小时前
UDP的socket编程
网络·网络协议·udp