随着ASIC技术的发展,路由查找速度已经不是阻碍网络发展的瓶颈。这使得MPLS在提高转发速度方面不再具备明显的优势。
但由于MPLS结合了IP网络强大的三层路由功能和传统二层网络高效的转发机制,在转发平面采用面向连接方式,与现有二层网络转发方式非常相似,这些特点使得MPLS能够很容易地实现IP与ATM、帧中继等二层网络的无缝融合,并为流量工程TE(Traffic Engineering)、虚拟专用网VPN(Virtual Private Network)、服务质量QoS(Quality of Service)等应用提供更好的解决方案。
在传统的IP转发机制中,路由器是基于CPU(软转发)和模糊匹配的方式进行数据转发,转发效率非常低;MPLS目的就是取代传统IP的转发机制;通过在IP数据包前添加标签,在路由器上形成LFIB表,路由器在数据转发时基于ASIC精确匹配标签进行转发,从而大大提高了三层的转发效率。
注:随着ASIC技术的发展,当前路由器的硬件性能和速率都比较高了,MPLS的优势已经不是很明显了;现在MPLS的优势主要体现于其扩展应用方面,如MPLS-VPN、MPLS-TE流量工程和服务质量QoS。
一、工作原理
MPLS是一项旨在网络中提高IP包转发速率的技术,它需要在一个传输网络中整体部署(运营商内网)。
对于部署了MPLS的网络,会在网络入口处的路由器上对进入流量进行分类,然后为不同类别的流量打上一个标签。
流量进入网络后就被打上了不同的标签;网络内部的路由器在收到流量的时候,是按照标签来进行流量转发的,不再去查找IP路由表;流量发出网络时就被移除标签。
MPLS的报头和报文封装:
Layer2/MPLS*x/IPv4/DATA/FCS,可包含多重标签
标签长度:20bits,取值0-1048575,0-15是特殊标签,其他正常使用。
EXP(试验位)长度3bits,用于二层QOS
S(标记位)长度1bit,用于表示是外层标签/内层标签。
TTL长度8bits
MPLS有两种封装模式:帧模式和信元模式(ATM)。
帧模式封装是直接在报文的二层头部和三层头部之间增加一个MPLS标签头,以太网/PPP采用这种封装模式。
二、路由器的交换机制
1、进程交换:路由器针对收到的每个数据包都需要进行三层和二层表项的查询,其中三层表项查询是为了确定出接口和下一条,二层表项查询(ARP)是为了获取目的MAC地址实现二层的重新封装;并且是基于CPU进行查询,效率很低。
2、快速交换:也称为网流式交换(一次路由多次交换或一次查表多次转发)。
基于数据流进行转发,路由器可以基于流量的七元组(源目IP地址、源目端口号、协议号、ToS字段、相同的入接口)进行数据流归纳。
将满足相同七元组条件的数据包形成一股流,在进行数据转发的时候提取这股流的第一个数据包查三层表确定出接口查二层表确定封装信息,并把转发第一个数据包使用的出接口和封装信息整合形成一个cache并缓存在ASIC芯片中,针对这股流的后续数据包不再进行三层数据查询直接基于ASIC缓存的cache进行转发。
3、思科急速转发CEF:思科私有转发机制,路由器启用CEF,会形成两张表,保存在ASIC中。
三、转发信息库FIB
是一张三层表,装的是经过优化的路由条目,基于路由表进行下载得到的,主要优化了下一跳地址,在下载前将所有路由的非直连下一跳地址整合为直连的下一跳。
路由表条目发生变更的时候FIB表也会自适应进行改变,在确定出接口后,FIB中还有资源联动邻接表,可以确定二层封装信息。
邻接表Adjaceny Table:
是一张二层表,装的优化后的供数据封装的二层信息
注:在思科设备上,如果启用MPLS一定要先启用CEF,路由器运行MPLS需要进行标签插入,而路由器的IP路由表不支持标签插入,只有FIB支持标签插入,启用CEF之后才会有FIB表。
转发等价类FEC:
MPLS是一种数据层面的分类转发技术,它将具有相同转发处理方式(优选相同的目的地址、相同的出接口、相同的VPN目的地址、相同QOS)的分组归为一类打上标签,这种类别就称为FEC转发等价类。
路由器可以基于路由条目进行标签分发,属于一个FEC的流量具有相同的转发方式、转发路径和转发待遇。
但是并不是所有拥有相同标签的报文都属于一个FEC,因为这些报文的EXP值可能不相同,执行方式可能不同,因此他们可能属于不同的FEC。
注:做完MPLS后就不能在MPLS域内做路由汇总或聚合,由于不同的路由器上的路由条目不一样会导致数据层面的黑洞;同时还要注意OSPF中环回口掩码问题。
四、MPLS架构
控制层面:使用静态或动态路由选择协议产生路由,形成FIB路由表。
控制层面:标记分发协议TDP(思科私有/前身)、标签分发协议LDP(公有)、MP-BGP、资源预留协议RSVP。
标签分发,基于FIB路由表中的路由条目进行标签创造并加入FIB路由表。
标签分发只具有本意义,两台路由器关于同一条路由条目可以分发不同的标签。
路由器需要将本地产生的关于一条路由条目的标签通告给邻居,实现标签共享;
当收到邻居发送过来的关于一条路由条目所对应的标签时,会形成LIB拓扑表;
邻居双方标签共享完成后,本地形成一张LFIB表供后续进行标签数据转发。
数据层面:根据LFIB表转发带MPLS标签的报文以及转发普通IPv4报文。
五、MPLS的工作过程
标签压入:给数据包添加标签;边界标签交换路由器通过外部接口收到一个IPv4数据包,路由器查找FIB表发现为了转发这个数据包需要通过连接MPLS的接口发走并根据FIB表中压入邻居分发的标签(思科优化机制一次查表即可)。
标签交换:MPLS域内的路由器收到一个带有标签的数据包,就不再查看三层报头的目的IP地址;路由器会根据标签转发信息库LFIB中下一跳邻居分发给该路由的标签进行标签添加然后转发出去。
标签弹出:删除最外层的标签;标签移除:删除协议栈中的所有标签
边界标签交换路由器R1收到从内到外的流量,路由器收到带有标签的报文只能查询LFIB,路由器查找LFIB不能确认转发信息,路由器查表失败退而求其次尝试将标签移除根据三层报头目的IP地址查询FIB进行转发。
思科路由器为了优化LSR标签移除,开发出了PHP(倒数第二跳标签弹出或次末跳标签弹出),路由器会根据路由判断自己是不是倒数第二跳路由器,倒数第二跳路由器收到最后路由器发送的一条路由条目的标签是3,倒数路由器在将报文发给最后一跳路由器的时候会将标签移除。
LFIB:标签转发信息库,基于标签的路由表;包含内容如下,路由条目/本地分发的标签/邻居分发的标签/出接口/下一跳
FIB:标签信息库/拓扑表,关于一条路由条目本地分发的标签是什么,邻居分发的标签是什么。、
FIB:转发信息库,启用CEF生成的基于IPv4的路由表。
标签交换路径LSP:流量在MPLS域内进行转发时经过的路径,这条路径在转发流量之前就已经通过控制层面协议确定并建立的,流量会在特定的LSP上传递;由于PHP机制的存在,LSP不一定会端到端保持一致。
入标签:接收到的路由携带的标签,为本地产生的标签
出标签:发送给邻居路由携带的标签,为邻居产生的标签
本地标签local label:关于一条路由条目,本地分发的标签
远程标签remote label:关于一条路由条目,邻居分发的标签
MPLS的上游和下游:根据数据层面路由流向,离路由源越近的路由器为下游路由器,离数据发送者越近的路由器为上游路由器,下游路由器一跳一跳的把路由传递给上游,与此同时上游路由器把标签一跳一跳的传递给下游。
六、MPLS环路检测和处理
IGP环路检测机制和处理
TTL环路检测
帧模式的MPLS中使用TTL
信元模式的MPLS中无TTL
LDP环路检测机制
距离向量法:通过检测TLV中是不是包含自身的Router ID,如果包含,则丢弃
最大跳数法:通过检测TLV中设置LSP最大跳数
MPLS对TTL的处理方式:默认使用方式一
方式一:实现不对外隐藏MPLS域内的网络结构
方式二:实现对外隐藏MPLS域内的网络结构
MPLS解决BGP数据层面黑洞的原理:
R4--R2--R1--R3--R5
当一台路由器使用一条BGP路由转发从外到内报文的时候,会针对这条BGP路由的下一跳地址查询对应的IGP路由,根据IGP路由的远程标签封装数据,R2在给R1发送的时候会携带关于3.3.3.0的标签,因为R1为倒数第二跳路由器,R1在给R3发送数据的时候会弹出标签,R3根据EBGP路由进行数据转发。
标签分发协议LDP:
端口号使用TCP和UDP的646,通过UDP建邻居,邻居建立后通过TCP发送更新及其他各种报文;支持认证。
LDP报头/报文封装:Layer2/IPv4/TCP或UDP/LDP/FCS
LDP Header:
Version:版本,当前版本号为1。
PDU Length:长度,表示除了Version和PDU Length以外的其他部分的总长度。
LDP Identifier:前4bit表示Router ID,后2bit表示LSR的标签空间是路由器空间还是接口空间(路由器空间关于一条路由条目只有一个标签,标签少,占用资源也少;接口空间关于一条路由条目的一个出接口分配一个标签,接口空间占用资源多,但提高了安全性)。
LDP message:
U:Unknown Message bit。当LSR收到一个无法识别的消息时,该消息的U=0时,LSR会返回给该消息的生成者一个通告,忽略该无法识别的消息。
Type:表示具体的消息类型,目前,LDP定义的常用的消息有Notification,Hello,Initialization,KeepAlive,Address,Address Withdraw,Label Mapping,Label Request,Label Abort Request,Label Withdraw,Label Release。
Message Length:M ID、M Parameters和Optiona的总长度。
Message ID:用来唯一标识一个消息。
Mandatory Parameters和Optional Parameters分别为可变长的该消息的一定要的参数和可选的参数。
LDP消息类型:
1.Discover message:通告自身存在并自动建邻居,组播地址224.0.0.
2.Session message:建立TCP连接,协商参数等,建立或拆除连接
3.Advertisement message:生成,通告及删除标签
4.Notification message:通告告警和错误信息
LDP状态机:
路由器运行LDP也需要选举RID,默认使用环回口的最大地址,如果没有环回口,使用物理接口的最大地址,一般都是手工指定.
路由器在发送LDP hello报文的传输地址(Transport Address)不是物理接口的IP地址,而是Router ID;所以路由器在建立LDP邻居的时候使用的Router ID值一定要可达(直连建邻居)。
在路由器的LDP邻居表中,路由器关于邻居的标签信息都是基于路由器的环回口地址.
而在FIB表中,所有转发信息都是基于直连接口的下一跳地址。为了将环回口和直连接口下一跳地址关联起来,路由器在通过LDP建立邻居后会将本地所有其他接口的IP地址发送给邻居,除了环回口的其他地址默认处于隐藏状态。
路由器启用MPLS之后会自动启用LDP协议;周期性发送hello建立LDP邻居;
标签分发:对FIB表中的每一条IGP的路由条目来说,每一台运行LDP协议的LSR都会自动分发本地标签;
独立的Independent:收到IGP路由,不管有没有收到下游路由器发送的标签都会分发本地标签。
有序的Ordered:收到IGP路由,只有收到下游路由器发送的标签才能分发本地标签。
标签通告:LSR将该分配的标签分发通告给所有的LSR邻居,这些接收到的标签转换为远程标签,之后邻居将该远程标签和本地标签存储于标签信息库LIB;
按需通告DU:不管有没有收到邻居的标签请求,形成标签映射主动向邻居发送。
请求通告DoD:不主动给邻居发送标签映射,在收到邻居发送的标签通告请求根据邻居发送的请求映射给邻居发送对应的标签信息。
标签保持:通常一台LDP路由器会有多个LDP邻居,那么这些邻居都会给路由分配标签然后将这些标签传给自己,在所有捆绑某一特定前缀的远程标签中,LSR只使用其中一个远程标签来确定该前缀的出站标签。
而LSR从下游邻居收到的远程标签中选择FIB表中到达该前缀的下一跳的标签,LSR用这样的信息来创建它自己的标签转发信息库LFIB。
保守Conservative:只有下游邻居发送的关于下一跳路由的标签才会接收,关于其他路由的标签不接收。
自由Libral:邻居发送的标签都接收,只有关于路由下一跳的标签才加入LFIB
LDP的特性:
二层Type字段描述MPLS协议单播0x8847;MPLS协议组播0x8848
一台路由器不能为不同的路由分发相同的标签,每条路由条目对应一个本地唯一的标签,但是0-15标签被保留;
标签0-显式空标签,收到邻居发送的路由,自己将标签移除;
标签1-路由器报警标签;
标签3-隐式空标签,邻居发送时路由时先将标签移除;
建立LDP建立邻居时,传输地址大的一端的主动发送目的端口号646给对端
LDP基本发现机制:发现直接连接在同一链路上的LSR邻居。
LDP扩展发现机制:发现非直连的LSR邻居,只能使用单播建邻居。
LDP可以给直连路由、静态路由和通过IGP路由协议学习的动态路由分发标签。
BGP路由的标签由BGP自身分发,BGP只为VPNv4路由和VPNv6路由分发标签。
不是基于BGP路由的前缀分发标签,针对BGP路由的下一跳对应的IGP分发标签。
RSVP既可以进行资源预留,也能够分发标签;在MPLS TE中可以基于Qos进行标签分发。
MPLS-VPN:
采用MPLS技术在运营商宽带IP网络上构建企业IP专网,实现跨地域、安全、高速、可靠的数据、语音、图像多业务通信,并结合差别服务、流量工程等相关技术,将公众网可靠的性能、良好的扩展性、丰富的功能与专用网的安全、灵活、高效结合在一起,为用户提供高质量的服务。
MPLS-VPN网络主要由CE路由器、PE路由器和P路由器等3部分组成;
1、PE路由器:运营商的边缘路由器设备,与用户的CE路由器直接相连,负责VPN业务接入,处理VPNv4路由,是MPLS三层VPN的主要实现者;
2、CE路由器:用户网络边界路由器设备,直接与运营商网络相连,它“感知”不到VPN的存在;
3、P路由器:运营商核心路由器设备,负责快速转发数据,不与CE直接相连。
控制层面:
虚拟路由转发VRF(Virtual Routing Forwarding):
PE路由器为了解决不同的客户使用相同的私有地址的问题,针对每一个客户单独创建一张独立的VRF路由表。
VRF路由表支持命名,VRF名称只具有本地意义,当PE路由器把连接CE的接口和VRF关联以后,控制层面和数据层面都是基于VRF路由表进行数据转发(VRF只能关联到连接CE路由器的接口)。
PE路由器为了将VRF路由发送给对端的PE路由器,需要使用MP-BGP进行数据转发。
首先两台PE路由器之间先建立VPNv4邻居,PE路由器使用MP-BGP进行数据转发的时候,先将VRF路由转换成VPNv4路由(x:y路由条目)添加到VPNv4 BGP表中。
一台路由器可以有多个VRF表但VPNv4 BGP表只有一个,这样可能会出现路由重复的状况,为避免路由重复,路由在加入BGP路由表前需要添加RD。
路由区分符RD(Route Distinguishers):在VPNv4 BGP表中标识VRF路由条目
路由目标RT(Route Targets):就是BGP中的扩展团体属性,让对端PE路由器收到公网传递的VPNv4路由的时候能知道将该路由添加到哪个VRF路由表中。
导出:PE将VRF路由添加到VPNv4 BGP表中的时候携带的RT值
导入:PE收到VPNv4路由之后将带有RT值的路由加入本地对应的VRF路由表
VPNv4路由:携带了RT和RD属性的IPv4私网路由,然后通过BGP来传递
BGP针对VPNv4路由使用MP-BGP再进行标签分发
Layer2/VPNv4路由下一跳地址的IGP路由标签|VPNv4标签/IPv4/DATA/FCS
以上就是MPLS组网指南,无缝融合IP与二层网络的介绍。如果你还有其他问题,欢迎进行咨询探讨,希望桂哥网络的专业的解决方案,可以解决你目前遇到的问题。桂哥网络提供全球主机托管、服务器租用、MPLS VPN、SD-WAN等方面的专业服务,资源覆盖全球。欢迎咨询。