飞道的博客

MPLS(多协议标签交换)

387人阅读  评论(0)

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

包交换:包为网络层的的PDU,包交换是基于IP地址进行数据转发,就是路由信息的路由行为。

原始的包交换:数据包进入路由器后,路由器需要查询本地的路由表(FIB路由信息数据库),再基于下一跳或者目标IP查询本地的ARP表,才能进行数据的转发。

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

特快的包交换:无需路由,直接交换;CEF—Cisco的特快交换(私有技术),其他厂商均存在相同的技术。路由表、ARP表---转换为FIB(转发信息数据库)表;流量的转发过程仅查询FIB表即可。FIB表:在将路由器表转换过程中,存储递归查询的结果;同时将新封装的二层地址进行绑定。

标签交换:数据包在进入到MPLS的域后,将在第二层和第三层中间压入标签号;使得域内的路由器在转发数据包时,仅基于2.5层的标签号查询本地的LFIB(标签转发信息数据库)即可。

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


 

 控制平面:IP路由协议->RIB(路由表)、LDP、LIB表

       RIB(路由信息表):路由表有IP路由协议生成,用于选择路由。

       LDP(标签分发协议):负责标签的分配、标签转发信息表的建立、标签路径的建立和拆除等工作。

       LIB(标签信息表):由标签分发协议生成,用于管理标签信息。

过程:

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协议生成;

转发平面:(即数据平面)FIB表、LFIB表

       FIB(转发信息表):从RIB(路由信息表)中提取必要的路由信息生成,负责普通IP报文的转发。

       LFIB(标签转发信息表):简称标签转发表,由标签分发协议建立LFIB,负责转发带MPLS标签报文的转发。

 MPLS路由器上,报文的转发过程:

过程:

1)当收到普通的IP报文时,查找FIB表,,如果tunnel ID为0×0,则进行普通IP转发;当收到报文后,查找FIB表,Tunnel ID为非0×0,压入标签,进行MPLS转发。

2)当收到带有标签的报文时,查找LFIB表,如果对应的出标签是普通标签,则进行MPLS转发;查找LFIB表,如果对应的出标签是特殊标签,如标签3,则将报文的标签去掉,进行IP转发。


 LSP(标签交换路径)的建立:

1、静态LSP:用户通过手工方式为各个转发等价类分配标签建立转发隧道。

需要管理员为各路由器手工分配标签,原则:前一节点出标签等于下一个节点入标签的值。

2、动态LSP:通过标签发布协议动态建立转发隧道。

Egress路由器RTD为本地存在的路由分配标签,并将路由和标签的绑定关系主动发送给上游邻居路由器RTC;RTC收到下游邻居的路由和标签的绑定关系后,将其记录到LIB中,并将自己分配的标签和路由的绑定关系发送给上游邻居路由器RTB;RTB执行相同的动作将标签和路由的绑定关系发送给上游邻居路由器RTA,RTA为ingress路由器,没有上游邻居,因此动态LSP完成建立。

注:MPLS报文由Ingress发往Transit,则Ingress是Transit的上游节点,Transit是Ingress的下游节点;同理,Transit是Egress的上游节点,Egress是Transit的下游节点。 

LDP(标签分发协议)邻居发现:

LDP的hello消息使用UDP封装,周期发送(5s),使用组播224.0.0.2为目的IP地址(发送给网络中的所有路由器);hello消息中有transport address字段,该字段与设备配置的LSD-ID一致,表面对端建立邻居关系时使用的IP地址。如果该字段为直连接口IP地址,则直接建立邻居关系;如果该字段地址是loopback接口地址,则需要保证接口IP地址路由可达性。

LDP邻居的建立:

1.两个LSR之间互相发送hello消息,双方使用传输地址建立LDP会话。

2.传输地址较大的一方作为主动方,发起TCP连接。

3.TCP连接建立后,有主动方发送初始化消息协商建立LDP会话的相关参数。包括LDP协议版本、标签分发方式、Keepalive保持定时器的值、最大PDU长度和标签空间等。

  1)被动方收到初始化消息后,如果接受相关参数,则发送初始化消息,同时发送Keepalive消息给主动方。

  2)如果被动方不能接受相关参数,则发送Notification消息终止LDP会话的建立。

  3)主动方收到初始化消息后,接受相关参数,则发送Keepalive消息给被动方RTA。               

  4)如果主动方不能接受相关参数,则发送Notification消息给被动方终止LDP会话的建立。

  5)当双方都收到对端的Keepalive消息后,LDP会话建立成功。LDP会话建立成功后,进行FEC的创建与标签的分发。

标签的发布方式:

1、DU(下游自主方式):无需等待上游的消息,直接向邻居分配标签。收敛时间相对于DOD方式较短。 (华为默认使用)

2、DOD(下游按需方式):上游向下游发送标签请求消息,下游收到消息后,才会向上游发送标签映射消息。

标签的分配控制:

1、independent(独立标签分配控制方式)

本地可以自主地分配一个标签绑定到某个IP分组,并通告给上游,无需等待下游的标签。

2、ordered(有序标签分配控制方式)

只有当本地已经具有此IP分组的下一跳的标签时,该LSR才可以向上游发送此IP分组的标签。(华为默认使用)这样做是为了避免下游IP分组的标签还未分配,上游已经分配,数据开始转发会造成丢失。

标签的保持方式:

1、liberal(自由标签保持方式)

从邻居接收到的标签映射关系,无论邻居是不是自己的下一跳都保留。(华为默认使用)

2、conservative(保守标签保持方式)

从邻居接收到的标签映射关系,只有邻居是自己的下一跳才保留。

MPLS数据的转发过程:

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

RTA收到访问100.1.1.1的数据包时,若进入时为普通的IP报文,查询FIB表,对应的tunnel ID 为非0×0,确定压入标签,封装已分配的标签号1027进行MPLS转发。若进入时为带标签的数据包,则查询LFIB表,封装已经分配的1027标签号进行转发。

注意:进入路由器时,入标签应该为本地路由器分配的编号,出标签因为下游设备分配的标签号。

问题:当数据包传到Egress节点时还是需要查询两次表才能进行真确的路由转发,有什么方法改进吗?

PHP(倒数第二跳弹出)默认执行,Egress路由器将本地直连网段传递给MPLS域,LDP分配的标签号为3(也称为隐式空标签3),来告知倒数第二跳设备;当报文来到倒数第二跳设备,查询LFIB表,已知转发路径后,弹出标签,使得Egress路由器只需查询FIB即可。否则最后一台路由器在查询LFIB表后,弹出标签还需要查询FIB表。


MPLS目前的应用:

1、使用MPLS解决BGP的路由黑洞。(华为设备)

普通的MPLS在解决纯BGP路由黑洞时需要手动开启递归,route recursive-lookup tunnel在没有开启递归时,路由器会查FIB表(路由表),找到出接口发送报文,对端收到报文由于没有运行BGP,不知道下一跳是谁,就会丢弃报文;当配置递归命令后,路由会优先递归到LSP隧道,这样路由就会进入,MPLS的隧道中,当报文传递到未运行BGP的路由器上,会在MPLS的隧道中依靠标签号来进行转发。

2、MPLS VPN 技术。

https://blog.csdn.net/weixin_43997530/article/details/106022733


转载:https://blog.csdn.net/weixin_43997530/article/details/104501875
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场