目录
一、MPLS多协议标签交换概述
1、MPLS是什么
2、MPLS-VPN
3、MPLS起源
(1)、MPLS解决的问题
MPLS解决了三层转发短板问题。
(2)、交换机转发流程
(3)、路由器转发流程
(4)、交换机和路由器转发区别
(5)、MPLS对路由器转发的优化
(6)、现阶段MPLS用途
二、深入了解MPLS
1、三种交换机制
(1)、进程交换(路由器时期短板)
(2)、快速交换
(3)、CEF
2、MPLS的术语
(1)、FEC全forwarding equivalence class 等价转发类
3、MPLS的限制
4、根据MPLS域路由器种类划分
5、LDP和TDP区别
6、LFIB标签转发信息库
(1)、标签对于路由器分类
(2)、标签工作流程
(3)、TDP/LDP两个功能
(4)、LDP/TDP物理属性
7、MPLS小细节
IPv4中带有多协议基本就是GRE(GRE特点:不管你三层使用的什么被路由协议,不论IPv4或IPv6)
- MPLS数据层面的交换技术,也可以说是转发技术。
- MPLS本身就是一个数据层面的交换技术,MPLS VPN是他的后一级。
- MPLS协议核心是第三个单词L,L叫lable标签。
- MPLS整个技术就是围绕lable来进行。
- MPSL经过不断升级后,最后经常使用的产物就是MPLS VPN。
VPN分类:覆盖型VPN、对等体到对等体VPN,解决的问题是一样的都是让内网使用私有地址的主机能够不经过PAT直接用私有地址跨域访问。
- MPLS是一种业务,得向当地运营商申请,特点是适合小白企业。
- MPLS不用担心网络质量问题,可以要求流量Qos。
- IPsec因为不花钱,所以无法保证流量业务质量。
- 理解MPLS的控制层面和数据层面,再去理解MPBGP结合MPLS所形成的VPN架构。
MPLS解决了三层转发短板问题。
交换机查表转发是查CAM表,CAM表集成在ASIC芯片(应用专用集成电路,在背板里,基于硬件转发就是基于限速(没有任何延迟))
路由器查表转发基于三层报头查ip routing-table IP路由表,IP路由器基于CPU调用(转发基于软件)。
基于软件查表转发对CPU消耗大,基于硬件对CPU基本没消耗,基于软件调用CPU比较复杂转发有延迟增加转发时间,减少转发效率。
交换机根据DMAC查表转发是精确匹配(最简单逻辑进行匹配)。
路由器根据DIP查表,因为去往一个又一个广播域,主机位是置零的,置零匹配不置零的,是模糊匹配,牵扯一个X,路由器叫TCAM三重CAM(三重CAM:有0匹配,有1不匹配,有X可以匹配可不匹配)。
MPLS的优化:给路由器换一个转发高效的方式,类似交换机一样的转发,这个时候提出MPLS。
MPLS转发过程:发之前加一个4Byte的封装,封装中包含一个标签,是阿拉伯数字,有了标签不查路由表,查LFIB标签转发信息库,标签领域中的路由表,拿LFIB表路由器能做到精确匹配,甚至比交换机的CAM表还要效率高。路由表基于CPU驱动,LFIB基于芯片驱动,查LFIB不消耗CPU资源可以做到限速。
MPLS在现如今优势越来越小了,但是用的越来越广了,因为研发人员基于MPLS研发了两种技术:
1、MPLS VPN(运行商专属业务,几乎不花成本提供多元化业务):IPv4地址不够用,所以出现这个技术。
2、MPLS TE:能实现运营商内网部署多个路径,MPLS TE能做到最大限度的路径负载均衡。(像部署PBR一样,路由器收到路由不是这样走的,但我能强行要求你路由按我的来。)
进程交换(路由器时期短板):基本没人用了,指路由器运行路由协议获悉路由条目,通过ARP等等获悉二层的封装信息,收到数据是不分流的,基于收到的每一个数据包做路由表查询,通过路由表查询找转发出接口,路由器收到数据进行三层和二层查询,三层确定出接口和下一跳,二层进行重新封装…..
快速交换:和进程交换相比是一个里程碑式的升级。也叫网流式转发,基于流量的七元组:(源目IP地址、源目端口号、协议号、Tos字段、相同的入接口形成的就是一股数据流),第一个数据包查三层表确定出接口,查二层表确定封装协议,形成一个缓冲Cache,把Cache 缓存在ASIC芯片中,对于这个流的后续数据包查Cache就能转发。第一个包进行CPU软路由,第二个包以后都能类似交换机一样给你们做基于硬件的交换转发,也叫一次路由多次交换,一次查表多次转发。
CEF:不同厂商不一样,cisco叫思科急速转发CEF,华为和华三都有各自的叫法。
CEF思科急速转发:思科私有的交换机制,基于快速交换做升级,报文触发,启用CEF路由器就会生成两张表:
- 第一张:FIB全forwarding information base路由信息库:经过优化的路由条目,条目靠下载得到,会把路由表所有路由条目做一个整合放到FIB中,主要优化路由条目下一跳。递归表查询(查两次获三次)。
- 第二张:adiacency table邻接关系表(二层表):供数据封装的优化后的二层信息。
都能被ASIC调用。
FIB好处:当使用FIB调用数据时,没有递归表查询,基于ASIC芯片调用,对于一股流的任何数据包不用路由,能完完全全经过交换的方式来做一个查表转发,确认出接口后,FIB还有一个功能联动邻接关系表表项,能清晰告诉封装二层封装什么值。
CEF可以理解为零次路由,全部转发。
当前使用MPLS就是为了做MPLS VPN和MPLS TE,BGP担心数据层面黑洞,当使用IBGP路由转发数据时,途经没有运行BGP的路由器就会丢包(解决丢包方法:1、都启用BGP 2、直连 3、重分发 4、BGP之间做tunnel 5、最靠谱启用MPLS,基于MPLS支持解决BGP黑洞)。
关于MPLS的两个术语:
FEC全forwarding equivalence class 等价转发类:是标签存在的一个基石,同一个FEC打同一个标签,FEC做一个流量整合,每一个FEC打一个标签,一个FEC就是一个数据包的集合,相同的FEC具有相同属性。
FEC归类如下:
FEC归类如下:
- 相同的VPN目的地
- 相同的二层电路转发
- 路由器同一个接口发走
- 具有相同QoS标记
- 具有相同的源地址
MPLS是数据层面的,但是产生标签需要控制层面TDP/LDP、MP-BGP、RSVP资源预留协议。
路由器能给每一条路由条目进行标签分发,我收到一条路由条目,我看能用哪条路由条目转发,打这条路由条目所对的标签。
一组去往相同目的地的数据包属于同一个FEC,这组同一目的地数据包要打上同一个标签,去往相同目的地可以使用同一路由转发,路由器能针对路由条目中的每一条路由条目做标签转发。
- 做了MPLS域内不能做汇总路由。
- ospf的loopback接口默认以32位路由通告。
在cisco中启用MPLS的条件是:必须使用CEF的交换机制。
标签压入、标签交换机制:(研究完MPLS表项)
一般在运营商内网会启用MPLS, 内部的都启用MPLS。
Edge LSR边界标签交换路由器。
(1)、纯LSR
(2)、边界LSR(华为中叫LER):当收到从外到内的报文时,执行的是PUSH标签压入。
去掉标签有两个操作:
- 标签弹出POP:把最外层的标签去掉。(内网执行)
- 标签移除:把整个标签站里的所有标签去掉。(连外网执行这个)
接口启用MPLS就是数据层面和控制层面都启用了,通过这个接口允许收发带标签的报文,控制层面其实默认也启用了一个协议。TDP(标记分发协议)/LDP(标签分发协议)。
早期MPLS叫Tag switching是Cisco开发,标准化就成了MPLS,标准化之前用TDP,标准化之后就用LDP。当前Cisco都支持TDP和LDP。
cisco在接口敲了Mpls ip就能启用MPLS,数据层面默认开启了MPLS的工作模式,控制层面如果操作系统高于12.3就是LDP,低于就是TDP。
cisco针对MPLS有两套命令一套是针对私有,一套针对公有协议。15.X能用的只是新命令LDP。
第一步运行动态或静态获得路由
第二部通过TDP/LDP进行标签分发(控制层面协议,根据路由条目中已有的路由条目生成标签)
第三步把标签告知邻居,默认标签只有本地拥有,所以得信息共享,TDP和LDP干两件事:
(1)、针对路由表中以有路由进行标签产生,标签分发。
(2)、把我分发的标签给我的邻居做一个通告。(当运行完LDP就和运行完OSPF一样,TDP和LDP也都会在直连路由器之间建立邻居,非直连之间也能建立邻居,也会有邻居表,邻居之前会互发标签)本地保存的标签并非LFIB,而是LIB,启用CEF形成FIB,路由器收到带标签的路由会查LFIB,收到邻居发来的标签值会绑定在LIB。
LFIB标签转发信息库:基于标签的路由表,收到一个带标签的报文,只要是MPLS必须查这个表做转发(会告诉你收到带什么标签的报文后该把标签换成什么一个其它的值,并把报文通过哪个接口发走,发给哪个下一跳)。
LIB标签信息库:一个拓扑表,装着关于一条路由条目,关于一个FEC本地所产生的标签是什么,邻居所产生的标签是什么,每一个标签大家都是什么值,确定LFIB标签是什么。
FIB转发信息库:启用CEF后能被硬件调用的路由表(IPv4路由表)
一台路由器收到报文标签不是本地分发就会丢弃这个报文。(这个标签必须是本地关于某条路由条目所产生的)
入标签:接收到的报文所携带的标签,为了让我本地识别,必须是我本地产生的。
出标签:发给邻居时携带的,必须是下一跳邻居所产生的。
入标签和出标签没有关联。
默认我不知道邻居标签,有了FIB就能知道关于一条路由本地的标签是多少,邻居的标签是多少(邻居给我发更新会告诉我邻居他的某个FEC对应的标签是什么),都能获得,把本地的标签和下一跳邻居的标签做一个绑定就能形成LIB,LIB里边放置的就是一对一对的标签映射,这个标签映射告诉路由器收到带这个标签的报文通过哪个路由器接口发走发给哪个下一跳并且要把标签换成哪个下一跳的值。
路由器启用CEF生成FIB(关于一个FEC是我对应的下一跳地址)。
1、给本地路由表的每一条路由条目产生标签,这个叫标签分发。
2、把你本地产生的标签给邻居发走。
收到邻居发来的标签会放到LIB中。
基于FIB和LIB生成LFIB中的转发条目。
运行TDP/LDP路由器ID会手工指定。
两步:
1、运行IGP获取路由
2、启用TDP/LDP来针对路由表中路由进行标签分发,并且给邻居通告。
LDP不是万能,只能给路由表中部分路由进行标签分发:(重要)
1、直连路由
2、静态路由
3、通过IGP获悉路由
BGP(BGP路由自己分发标签)不会位address-family中所有路由分发标签只会为:
1、VPNv4路由
2、VPNv6路由
RSVP是在部署RSTE时使用,分发基于Qos的标签,能完成基于Qos功能的路径调整。
- TDP即使用TCP/又使用UDP 端口号711(基本没人用了)
- LDP即使用TCP/又使用UDP端口号646
- TCP优点可靠,缺陷是只支持单播。
- UDP优点灵活可以自动建邻居,缺陷不可靠。
- TCP用广播发送hello,LDP使用组播发送hello。
- 通过UDP发hello,通过TCP进行邻居的建立。
LDP最可靠的方式就是把路由器之间直连全部开启LDP,并且把它们的路由器ID宣告进IGP,能两两建邻居,只要能两两建立邻居就能通过标签,就是在接下来一段时间内有LFIB,不做路由汇总聚合、不通告ospf32位路由,关于FEC标签就是连续的。
内部LSR图例:
边界LSR图例:
路由器收到带标签的报文一定只能查LFIB,边界查LFIB查不到就会尝试把标签去掉,根据三层源目地址查LFIB,就能转发。
Cisco针对边界路由器做了PHP(倒数第二跳标签弹出/次末跳标签弹出)的优化,最后一跳路由器告诉你是倒数第二跳时,你把路由发给最后一跳时就能够直接把标签去掉,最后一跳收到没有标签的路由纯IPv4报文会查FIB,查一次FIB就能做一个精确转发。(华为也支持)
- 启用不分环境,物理层使用什么样的介质无所谓局域网链路、广域网链路都行。
- 二层启用什么样的协议也无所谓,以太网、帧中继、ppp都行。
- MPLS在封装时会给数据帧添加一个32位的标记,标记插入在二层和三层报头之间(这就是为什么叫MPLS,插完三层报头就不用看了),因为封装位置MPLS也叫2.5层1协议。
MPLS对应的单播帧类型值是:0x8847,组播帧对应:0x8848。
帧模式PMLS:数据帧中添加MPLS。
信源模式MPLS:在ATM信源上也能添加。(没人用)
帧模式标签封装图:
标签字段(重要):前20位是标签取值0到2的20次方减一。(0-15都是特殊标签规定好了用途,能DIV的就是16-2的20次方-1)
3位EXP位叫实验位,类型802.1q中qos字段,用来做qos标记,二层qos标记。
S站点标记位,用来描述是不是最后一层标签。单纯的MPLS环境打一层标签,MPLS VPN环境通常是两层标签。MPLS-TE环境中是三层标签。置0为外层标签,置1为最内层。路由器收到带有标签只会对最外层做处理。
TTL防止环路。
三层标签图:
底层是靠近三层报头,外层是靠近二层报头。只有第一个添加的S位置1,其余的S位置0。