数据通信——MPLS(多标签交换技术)

引言

下面是一个新的知识点——MPLS(多标签交换技术),它是用来处理和提升路由器的三层交换和交换机的二层交换的转发速度,是一个工作在数据链路层和网络层之间的协议!

一,为什么要用MPLS?

MPLS是用来处理路由器和交换机的转发,但是为什么要用MPLS呢?

在交换机中,通过以太网帧头的MAC地址并根据转发表锁定目的MAC主机位置后,要么进行泛洪转发,要么丢弃。它查表是基于CAM芯片,这个芯片基于ASIC(应用专用集成电路)这让交换机在转发时几乎可以无限速,接近零延迟。

注:基于上述电路模块,这让交换机端到端的转发能力极强

但是路由器基于IPV4就太慢了,路由器收到数据包,先根据包头的源目地址后根据ARP解析出IP地址与MAC的映射,并且去帧头帧尾,其次基于目的MAC找路由表对应接口转发数据(路由表查表消耗大量CPU资源)且如果路由表是转发去往一个网络的数据,而想到达目的MAC所指向的主机,则需要模糊匹配且要修改TTL值(每次TTL-1)TTL改变,会重新计算校验和,重新封装数据帧,这样太慢了!!!(说的不那么详细,总而言之就是过程漫长)

早期的路由器更慢,且路由器在前期仅支持进程交换。比如R1----R2----R3----X,R1到X不仅要查询路由表,也要查询二层表(ARP封装)每一个帧都要重复这个动作。

MPLS可以为我们解决很多问题!!!

快速交换

后来有了快速交换(网流式交换)在网络中,都是以一股数据流的方式发送且它们都具备源目相同的地址和端口,一致的协议号,相同TOS字段,相同的入接口。对于一般流,我不用一个个查看他们的数据包。当我收到第一股流的首报文时,三层路由表先查看信息并查询二层表项的源目MAC地址后进行ARP封装。之后把查表后的信息整理成一个缓存并放在ASIC芯片中。从而基于ASIC芯片中缓存的内容针对一股流的所有后续报文进行一个转发决策。(这就是一次查表,多次转发)

CEF

现在使用的技术是CEF技术,这是超先进的技术,它是第三代交换技术,路由表中的路由条目放入FIB表(转发信息库)它基于ASIC芯片且不用递归表查询以寻找下一跳地址。FIB表中就包含标签(Label)随后,学习到ARP映射信息后便会加入到邻接关系表(ASIC芯片)并转发。

这就是此次要介绍的MPLS

MPLS具备几种特性:

(1)可以支持面向连接的质量服务(TCP和QOS)

(2)支持流量工程和网络负载分担

(3)可以利用MPLS构建MPLS VPN网络架构

二,MPLS报头格式

可以看到,MPLS在IP报头的前面增加了一个4字节的MPLS报头,这个报头插入在了二层数据帧和三层IP报头之间(我通常称为2.5层)。

我们也可以发现,MPLS报头的标记可以有多个。在路由中发送标签时,可携带多个标签,这个称为标签栈!以栈的存储方式排列,因此标签有三个动作:

标签弹出、标签压入、标签移除。

弹出:其中最外层标签被去掉,这个动作叫做弹出,

移除:去除所有标签叫做移除。

压入:一个标签被加入到标签栈称之为压入

一个MPLS标签中的字段含义分别为:

(1)标记值:占20位

(2)试验:占3位,这个保留用作实验

(3)S:占1位这个代表“栈”也就是这个标签在栈中的位置。S=1表示位于栈的最底部。

(4)TTL生存时间:占8位,用来防环的(防MPLS标签的环)

三,标签交换

我们之前提到过路由器是基于无连接的分组交换来转发数据的,因此路由器需要利用算法从而查询表项,向上面所描述的一样,采用模糊匹配和最长掩码匹配的方式来选择路由传递。速度很慢!MPLS则以IGP为基础,支持面向连接的质量服务来代替路由器的无连接分组转发。这样查找路由可以用更高效准确的速度完成数据传递。

我们采用标签(一系列整数)来表示一组分组流量,这就是MPLS的Label(标签)。

MPLS的标签(Label)让我们不仅可用标签来描述和处理三层(网络层)及二层(数据链路层)的信息,也可以描述标签的出入接口,QOS策略及源地址等。这样,一组去往相同网络的数据,我可以打上同一组标签,我们称之为转发等价类(FEC)

因此我可用同一路由转发标签相同的,且是同一路由条目转发的数据一条路由条目对应一个标签,后续有相同标签的话,就可通过标签完成后续报文的转发。路由通过IGP学到信息,而标签则依靠MPLS学习信息。

MPLS的控制层面协议

当你启用MPLS时,它会告诉路由器我要打上标签,收到数据的时候,若带标签,根据标签进行转发。(具体为:查询标签转发信息库LFIB后,查询MPLS邻域内的路由表!)

接下来介绍几个东西:TDP,LDP,BGP,RSVP(他们属于MPLS的控制层面协议)

LDP

TDP现在不怎么用了,LDP(标签分发协议)用的更多,RSVP(资源预留协议)也是。我们重点讲述LDP!!!

LDP利用路由转发表来建立LSP

LDP通过逐跳方式建立LSP时,利用沿途各启动MPLS路由器的路由转发表中的信息来确定下一跳,而路由转发表中的信息一般是通过IGP、BGP等收集的。LDP并不直接和各种路由协议关联,只是间接使用这些已知的路由信息。

LDP有三个功能:标签转发,标签通告,标签保持

标签转发

针对路由表中的直连以及IGP获取路由产生的标签。标签为本地行为。本地指的是你产生你的标签,我产生我的标签。路由器只识别本地分发标签。

如R1----R2----R3----X,R1把去往X的网络信息传递给了R2,R2如何知道去往X的网络呢?因此R1要给数据添加标签,添加R2分发给X网络的标签,在R2给R3时要进行标签替换,替换为R3对X网络分发的标签。每一跳都要进行替换,否则无法识别Label(这就是MPLS的上下游之分,去往下一个路由器为下游,去往上一个路由器的为上游)因此,我需要邻居信息让我知道我该打谁的标签进行传输。

标签通告

结合上述结论,我要进行标签通告,将本地意义的标签告诉邻居,你需要通过我到达目的路由,因此把我的标签要打上去。

标签保持

可能会出现我分发了标签给你,但我不知道你需不需要用到我给你的标签,如果该标签我用不上,我可以不接受,但也有全部接受的可能。因此我随时要保证在需要标签的时候你能及时给我。因此LDP必须运行并对标签进行邻居间的持续保持。

特殊标签

特殊标签:0为显式空标签,3为隐式空标签。最下游的路由器为最末端路由器。如果你是边界路由也是如此。因此,它在这时会分发标签0或者3通告给上游运行MPLS的路由器,以表示我是末端路由了。

若我收到了LDP邻居发送来的关于某条路由分配的标签值为3,则表明了我发送前往该目标网段的数据给该邻居时,我会将该标签弹出,再将内层数据转给邻居。

若我收到了邻居关于某条路由分配的标签值为0,我在向该网段传递数据时候,会带上标签头(标签值为0),一并发给邻居,这个最后的运行MPLS路由器接收到信息后会移除这个标签0。

PHP:次末跳的标签的弹出/移除/压入(最末跳会告诉次末跳,将标签为0或3的给我,一般都会设置为3,PHP是默认生效的)。标签0告诉上游邻居在把报文发送给我时,外层标签换成0。交换和弹出都针对外层,内层无影响。

LDP的三个表

LDP存在三个表:LIB表(标签信息库),LFIB(标签转发信息库),LDP邻居表

LIB为一条描述路由的本地标签和远程标签(直连邻居路由器的标签)的信息库,相当于是数据库,但是单靠LIB是无法做出任何转发决策的。

LFIB由FIB(转发信息库),LIB(标签信息库)和LDP邻居表共同产生。

  某个数据在去往某个网络时,它会得知到达该网络的出入标签是什么,出接口和下一跳等信息是什么,目的网络前缀和掩码是什么,它会将上述信息详细记录下来。其中FIB表有出接口和下一跳的信息,LIB表有本地标签(入标签)和远程标签(出标签)的信息。先查看FIB表后再查看LIB表。

  那LDP邻居表呢?LDP邻居表记录着被隐藏地址,在建邻居的同时,你的邻居会尝试把它的路由器的所有接口的IP地址都发给你(这就是被隐藏地址)你通过所有隐藏地址得知我将把信息给我的哪个邻居。

LDP状态机

NON EXISTENT状态:

该状态类似BGP的Idle状态,为LDP会话的最初状态。在此状态双方发送Hello消息,选举主动方,在收到TCP连接建立成功事件的触发后变为INITIALIZED状态。

INITIALIZED状态:

在该状态下分主动方与被动方两种情况,主动方将发送Initialization报文,转向OPENSENT状态,等待回应的Initialization消息;

被动方在此状态等待主动方发给自己Initialization消息,如果收到的Initialization报文的参数可接收,则发送Initialization和KeepAlive转向OPENREC状态。

主动方和被动方在此状态下收到任何非Initialization消息或等待超时,都会转向NON EXISTENT状态。

OPENSENT状态:

此状态为主动方发送Initialization报文后的状态,在此状态等待被动方回答Initialization消息和KeepAlive消息,如果收到的Initialization消息中的参数可以接受则转向OPENREC状态;

如果参数不能接受或Initialization消息超时则断开TCP连接转向NON EXISTENT状态。

OPENREC状态:

在此状态不管主动方还是被动方都是发出KeepAlive后的状态,在等待对方回应KeepAlive,只要收到KeepAlive消息就转向OPERATIONAL状态;如果收到其它消息或者KeepAlive超时,则转向NON EXISTENT状态。

OPERATIONAL状态:

它是LDP Session成功建立的标志。在此状态下可以发送和接收所有其它的LDP消息。在此状态如果KeepAlive超时或者收到致命错误的Notification消息(Shutdown消息)或者自己主动发送Shutdown消息主动结束会话,都会转向NON EXISTENT状态。

LDP会话建立过程

(1)互发Hello消息,Hello消息中包括LDP-ID和Transport Address。双方将用Transport Address建立LDP会话,收到Hello消息后再进一步比较Transport Address确定由谁作为主动方发起TCP连接。

Transport Address大的一方将作为主动方发起TCP连接。被动方等待对方发起连接。在下图中将由LSR-B作为主动方发起TCP连接。

(2)TCP连接完成后由LSR-B发送Initialization消息来协商参数,包括:LDP协议版本、Label分发方式、HoldTime、接收者的LSR-ID等。

(3)如果接收Initialization的LSR-A发觉对方的参数自己不能接受,则发送Notification消息结束会话:否则的话由LSR-A回应Initialization消息同时也发KeepAlive消息,两个消息可以在一个报文中同时携带。

(4)如果LSR-B接受Initialization消息中携带的参数则发送KeepAlive,LDP会话成功建立。可以在同一个报文中携带KeepAlive消息和其它Session消息,如Address消息和Label mapping消息。

四,标签的分发、通告和保持

分发

标签有两种分发方式:

第一种是自由分发:只要我路由表中出现一个路由条目,我就会进行分发,我在分发时不会关心我邻居是否已经拥有该标签,也不关心邻居是否需求该标签。

第二种分发方式是:一定是我下游的邻居有了该路由,并且该邻居针对其分发了标签并通告了。只要出现了,我就进行分发,这就是第二种分发方式。

通告

标签通告有两种特性:

第一种:我不管你是否需要,全部发送给你

第二种:如果我针对一条路由产生了标签,你要向我请求才会发送,不然我就留着(标签是可通告的,告诉你我有标签,但是不发给你)

保持

保持也有两种方式:

第一种:来者不拒,你发给我,我永久保留

第二种:我根据路由的下一跳确定,判断你针对该路由发给我的标签是否有用,有用的话我就只会保留它,此外我不会接受任何其它标签。因此我的LIB表中只有下游邻居的标签和本地的标签。

五,MPLS的路由器

当路由器不管通过什么样的接口(无论是否启动了MPLS)只要收到了IPV4数据,一定是要查询FIB表的,若收到了MPLS报文,但接口没启动MPLS,那么会丢弃。在此引入了一个新概念,启动了MPLS的路由器中,我们分为:LSR(标签交换路由器)和Edge LSR(边界标签交换路由器)

LSR和Edge LSR只要拥有了路由转发表项和标签信息库,便同时具备了交换标签和路径选择的作用。

六,MPLS工作流程

MPLS的标记交换在第二层实现,依据标记在第二层用硬件进行转发。

LSR要在转发开始前构造转发表(LDP的表项)此时MPLS需要IGP路由协议来帮助建立表项。

首先,MPLS域中的各个LSR使用专门的标记分配协议(LDP)交换报文,由IGP协议配合从而找出和特定标记相对应的路径,这个就是LSP(标签交换路径)。同时,我也会在此时通告我的标签,标签会在此时保持状态。

随后,当一个IP分组进入到MPLS域时,入口处的LSR会给他打上标记,并按照转发表传递给下一个LSR,直到所有LSR分配完毕。当分组每经过一个LSR,LSR便要做两件事:一个是转发,另外就是要更新MPLS标签。具体为将入标签更换为我的出标签(标签对换)这个出标签是我下游LSR的入标签。标签在数据传输完成前,标签状态会一直保持。

最后,当IP的分组报文到达边界的Edge LSR时,MPLS的出口处的LSR会通知次末跳路由器我是Edge LSR,请把MPLS的出标签替换为0或者3再给我,通过php把MPLS标签弹出。当Edge LSR收到次末跳发来的带有0或者3的标签,移除所有标签后或者直接把IP分组交付给非MPLS的主机和路由器。

后续 

MPLS有一个缺点——太贵了。这个体现在MPLS VPN上。基于MPLS的VPN是现在以及未来仍然主流的网络架构设计方案。下面我们讲述完VPN后就要讲述MPLS VPN了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咕噜跳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值