MPLS多协议标签交换

MPLS理解:

MPLS:多协议标签交换

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

    正常的数据包在交换的过程中需要解开三层封装看路由,但是MPLS在3层与2层之间打了一个标签,这时只需要查看标签而不需要再向上解封装。没有将整个数据包进行拆除。
    
    注意:在进行标签转发之前需要有一次路由行为。

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

几种包转发模式:

原始的包交换

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

快速的包交换:

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

    第二次走的时候直接查缓存,就不需要再去查询路由表和ARP表了。

特快的包交换(CEF):

CEF:

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

之前的转发需要路由表,ARP表进行转发;但在CEF(特快的包交换)中会查询 :FIB表

                                —— FIB表(转发信息数据库),流量转发过程中仅查询FIB表即可;

	在CEF中,它将路由表变为RIB(路由信息数据库),其实就是将路由表简化了。它将ARP表变为了Adj表。
	并且CEF将RIB和Adj进行了结合,结合为了FIB表(转发信息数据库)。 
								-----FIB是一张二进制表。
								
	由于FIB又为二进制表,所以转发变的更快了。

无需路由,直接交换 ---------它的前提是你要保证你的路由是可达的,后续仅不需要查看路由表和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

​                  701CE7662A97 68EFBD1D24C5  0800          新的二层封装

​                  目标MAC               源MAC              类型号



MPLS的转发:

        标签交换:数据包在进入到的MPLS的域内后,将在第2层和3层中间压入标签号;使得域内的路由器在转发该数据包时,基于2.5层的标签号仅需要查询本地的一张LFIB表(标签转发信息数据库)

    FLIB(标签转发信息数据库)=LIB+FIB
    LIB---标签信息数据库 
    FIB---转发信息数据库

当下MPLS存在的意义:

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

当下MPLS存在的意义:

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

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

MPLS的工作过程:

MPLS工作过程分为两个层面:

控制层面:路由协议工作,生成RIB,流量的方向即为控制流量;

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

控制层面:

第一步:

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

第二步:

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

------------------(TDP和LDP可以看作MPLS协议下面的子协议)

    MPLS是部署在运营商的,具有可靠性,所以MPLS基于TCP进行工作的。
    
    所以,MPLS会进行三次握手,并且需要进行握手的双方路由可达。之后建立邻居关系。并且在MPLS中会自动建立邻居。

    注意:刚开始在路由可达的情况下,LDP协议使用UDP报文获取对方的MPLSL-LS2-id(建立邻居的前提是要认识)。
    注意:在MPLS里面身份标识叫做 MPLSL-LS2-id (其实就是router-id)
	总结:MPLS使用TCP进行3次握手的自动建立邻居,但是TCP的3次握手速度比较慢,而MPLS追求的是速度。所以在开始前使用LDP协议,使用UDP组播报文来获取对方的MPLSL-LS2-id。当两边都获取了对方的MPLSL-LS2-id后使用TCP自动建立邻居。
	注意:MPLS只能直连之间建立邻居,不能非直连建立,因为MPLS基于标签的转发实际上还是在路由层面的基础上进行的。
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表已经生成;

第三步:

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

cisco设备默认基于FIB表中所有学习到的路由条目生成标签号。

华为设备默认仅基于FIB表中32位掩码的主机路由生成标签号

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

    在华为中就不会将你所有的路由生成标签了。正常的情况下跑的是CEF(特快包交换)。它只针对BGP路由黑洞和MPLS VPN等。

第四步:

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

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

第五步:

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


注:控制层面生成的表格

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


数据层面:

1): 没有MPLS协议,基于FIB表正常转发即可

2): 名词:MPLS domain – MPLS的工作半径 (MPLS域)        

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

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

                CE ------ 与PE相连接的一端。

3):

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

当存在特快交换时,流量进入第一pe时,直接查询FIB表,表中关联标签号,将直接确定是否压入标签;流量再到P路由器,接收到流量中若存在标签基于LFIB表转发,若没有标签基于FIB表即可;

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

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

如下图:对于16路由器来说,它是17的上游,17是它的下游。 当从19号路由器出去时会将2.5层的MPLS标签剥离。

MPLS标签格式:

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

Laybel标签的格式---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层报头中;

	为什么在2.5层中存在TTL值?
	存在TTL值主要的目的就是为了防环。因为在MPLS转发的过程中不会看三层,所以三层的TTL值不起作用,只能在2.5层中也添加一个TTL值。

  • 23
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值