一篇带你精通MPLS

发布时间:2024年01月21日

前言导入

MPLS:多协议标签交换

多协议

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

包交换

  • 包为网络层的PDU,故包交换就是基于IP地址进行数据转发;也就是路由器的路由行为。(路由器和终端基于3层的IP地址数据转发的路由行为)

原始包交换

查两张表
在包交换过程中,数据包每经过一个路由器,路由器需要查两张表:路由表(RIB)+ARP表

快速包交换

第一次查两张表,之后的每一次查一张表
一次路由,多次交换(一个数据流的第一个数据包进行原始交换,过程中生成转发规则缓存,该数据流剩余的数据包全部基于缓存中的规则进行转发)

特快交换,FIB表

查一张表
无需路由,直接交换(路由表RIB----->FIB表,ARP表---->ADJ表;其中FIB表是已经递归好的路由表并且是纯二进制表格,可以被物理硬件直接读取,不需要编译)
CEF:Cisco特快交换,为Cisco私有技术;非Cisco厂商设备均存在和CEF转发机制相同的技术

路由表转换为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      类型号

标签交换

  • 路由器基于2.5层的标签号进行路由行为

在数据包的2.5层压入标签号,路由器基于2.5的标签号查询本地的LFIB表,即可进行数据转发。(第一跳路由器压入标签号,最后一跳弹出标签)
数据包在进入到的MPLS的域内后,将在第2层和3层中间压入标签号,使得域内的路由器在转发该数据包时,基于2.5层的标签号仅需要查询本地的一张LFIB表(标签转发信息数据库)
FIB+LIB=LFIB;LFIB表的信息齐全:标签号,MAC地址等等

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

MPLS存在的意义

  • 解决BGP的路由黑洞
  • MPLS VPN
  • MPLS TE 流量工程

另外:随着包交换的加速,使得今天的MPLS技术也开始基于FIB表工作,来提高MPLS的工作效率(FIB表允许存标签号,这就是LFIB表要和FIB合作的原因)

MPLS的工作过程

控制层面:路由协议工作,生成RIB,RIB再生成FIB表,流量的方向即为控制流量
数据层面:设备基于路由表访问目标,产生数据流量,与控制层面方向相反

控制层面工作过程

1.在没有MPLS时控制层面仅生成RIB(路由表)和FIB(转发信息数据库),FIB是基于RIB生成的
2.MPLS协议会启动TDP(Cisco)或LDP(公有),直连设备间建立邻居关系 (LDP要为FIB表中的每一条路由分配一个标签号,每一个目标网段分配一个标签号)
在这里插入图片描述
这个LIB表是要上下传递的,只上下邻居传递

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

总结:MPLS协议需要在直连邻居间使用router-id地址来进行TCP会话,故前提条件为:router-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协议生成)

数据层面传输过程

1.没有MPLS协议,基于FIB表正常转发即可
2.名词解析

  • MPLS domain:MPLS的工作半径
  • edge LSR(PE):边界标签交换路由器,工作MPLS域的边缘,连接域外设备 (运行MPLS的第一台设备)
  • LSR(P):标签交换路由器,整体工作MPLS域内

3.当流量进入到第一台PE设备时,在没有特快交换之前,路由器基于目标IP地址查询本地的RIB;之后还要在LIB表中对应才能确定流量是否应该压入标签,需要两张表的查询;在存在特快交换时,流量进入第一台PE时,直接查询FIB表,若表中关联标签号,将直接确定是否压入标签;流量再到P路由器上,接收到的流量中若存在标签则基于LFIB表转发,若没有标签则基于FIB表转发即可;流量从最后一台边界离开MPLS域时将弹出标签

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

MPLS标签号

标签被压入2层3层之间,称为2.5层
在这里插入图片描述
标签的格式:32位,4个字节
在这里插入图片描述

  • 前20位为标签号,2^20个标签号;其中数值1-15为保留,用作特殊编号
  • 第21-23位exp,3位二进制,为优先级,用于QOS策略使用
  • 第24位为栈底位,该位为1标识该标签为最后一层标签;MPLS最大可以在一个数据包中封装3次标签,(普通的MPLS一层标签,MPLS VPN两层标签,MPLS TE三层标签)
  • TTL:生存时间,在第一次压入标签时,将当前数据包中的3层TTL复制到标签中,之后查询一次标签TTL减1,在最后一跳设备弹出标签时将2.5层的TTL复制到3层报头中

MPLS的次末跳

倒数第二跳 (默认执行)

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

在这里插入图片描述

注:FIB表存储标签号,这就是FIB和LFIB合作的原因
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

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 g0/0/0
[R2-GigabitEthernet0/0/0]mpls    先开启mpls
[R2-GigabitEthernet0/0/1]mpls ldp  再激活LDP协议
当启动配置完成后,邻居间使用UDP报文组播收发hello包,之后基于hello包中的router-id地址进行TCP会话的建立
[R2]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会话再建立邻居关系,生成邻居表
[R2]display mpls ldp peer

再然后基于本地的FIB表,默认华为仅针对32位的主机路由生成标签号,存储于LIB表中,之后邻居间共享LIB表
[R2]display fib   查看FIB表
[R2]display mpls ldp lsp      查看LIB表,装载本地和邻居为各条路由分配的标签号

最后路由器将LIB和FIB集合,生成最佳路径的标签转发规则-LFIB表
[R2]display mpls lsp  查看LFIB表

注:默认华为仅针对32位主机路由分配标签
[R2]mpls
[R2-mpls]lsp-trigger all  开启功能,将针对FIB表中所有路由进行标签号的分配

[R2]tracert  -v  -a 2.2.2.2  56.1.1.2

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

MPLS解决BGP的路由黑洞

MPLS协议并不会为通过BGP协议学习的路由条目分配标签号;
而是在访问这些BGP路由目标网段时,在流量中压入到达这些网段的BGP下一跳设备地址的标签号;

  • eg:R2从BGP邻居5.5.5.5学习到6.6.6.0网段的路由,R2在访问6.6.6.0时,将在数据包中压入到达5.5.5.5IP地址的标签号,来穿越中间没有运行BGP协议的设备,实现打破路由黑洞;

注:华为设备默认不为BGP协议执行下一跳标签机制,Cisco默认执行;

华为设备需要开启
[R2]route recursive-lookup tunnel      路由基于隧道进行递归查找

在这里插入图片描述

MPLS VPN

  • CE将私有路由传递到PE端
  • PE端在收到不同CE端发送过来的相同网段路由时,使用RD值进行区分(格式 X:X 32位,16进制)
  • PE端将附上RD的私有路由且不能直接装载于本地公有路由表中,需要放置到对应的VRF(虚拟路由转发)空间内;之后再在路由上付RT值,用于传递到对端PE设备上,对端区分信息
  • VPNV4路由=普通IPV4路由+RD+RT
  • VPNV4路由需要MP-BGP来进行传递;对端基于RT值,将路由装载到对应的VRF空间内,再共享给对应的CE
  • 控制层面工作完成后,数据层面需要基于MPLS来工作,由于数据层面不能携带RD/RT值,故MPLS将在数据包中压入两层标签,外层标签用于穿越中间设备,打破BGP路由黑洞;内层标签用于对应VRF空间

在这里插入图片描述
在这里插入图片描述

MPLS VPN配置

1.ISP 部分
2.IGP路由
3.MPLS域
4.配置MPLS VPN

[r2]ip vpn-instance a1  创建名为a1的VRF空间
[r2-vpn-instance-a1]ipv4-family     进入IPV4的配置模式下
[r2-vpn-instance-a1-af-ipv4]route-distinguisher 1:1  RD值
[r2-vpn-instance-a1-af-ipv4]vpn-target 1:1  RT值,必须和对端的PE值一致
[r2]interface g0/0/0     进入链接CE端的接口
[r2-GigabitEthernet0/0/0]ip binding vpn-instance a1  关联到VRF空间
[r2-GigabitEthernet0/0/0]ip address 192.168.2.2 24  配置私有IP地址
注:在关联到VRF空间前不能配置接口IP,否则该地址的直连路由将进入公有路由表
[r2]display ip routing-table vpn-instance a1  查看空间内的私有路由表
[r2]ping -vpn-instance a1 192.168.2.1   正常测试(不带-vpn-instance a1)将在公有路由表中查询记录,该命令为基于VRF空间a1进行路由查询

5.PE与PE间建立MP-BGP邻居关系

[r2]bgp 2
[r2-bgp]router-id 2.2.2.2    先和对端建立BGP邻居关系,可用于传递正常的公网路由
[r2-bgp]peer 4.4.4.4 as-number 2
[r2-bgp]peer 4.4.4.4 connect-interface loopback 0
[r2-bgp]peer 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邻居关系

6.CE端与PE端交互路由
如果是静态路由

CE端直接编写正常静态路由即可
PE端编写到VRF空间内的静态路由
[r2]ip route-static vpn-instance  a1  192.168.1.0 24 192.168.2.1

将本地VRF空间内的静态和直连路由重发布到BGP协议中,传递到对端的PE上
[r2]bgp 2
[r2-bgp]ipv4-family vpn-instance a1
[r2-bgp-a1]import-route direct
[r2-bgp-a1]import-route static

[r2]display bgp vpnv4 vpn-instance a1 routing-table  查看MP-BGP的BGP表

如果是动态路由

CE端正常启动OSPF即可
PE端,启动vpnv4专用的ospf协议
[r2]ospf 2 vpn-instance a1
[r2-ospf]area 0
[r2-ospf-2-area-0.0.0.0]network 192.168.3.1 0.0.0.0
之后使用双向重发布,实现路由共享
[r2]bgp 2
[r2-bgp]ipv4-family vpn-instance a1
[r2-bgp-a1]import-route ospf 2

[r2]ospf 2 vpn-instance a1
[r2-ospf-2]import-route bgp

[r2]display mpls lsp vpn-instance a1 查看双层标记的内层标签号
[r2]rip 1 vpn-instance a1
[r2-rip-1]version 2
[r2-rip-1]network 192.168.2.0

在这里插入图片描述

bt下载

文章来源:https://blog.csdn.net/huaz_md/article/details/135684688
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。