一.IP vs ATM
1. IP危机
90年代中,路由器技术发展滞后于网络发展,主要表现在转发率低、无法提供QOS保证。原因:路由查找算法使用最长匹配原则,必须使用软件查找;而IP的本质就是“只关心过程,不注重结果”的“尽力而为”。当时流行一种论调:过于简单的IP技术无法承载网络未来,基于iP技术的Internet必将在几年后崩溃。通俗的说在传统IP网络中,路由查询都是基于3层RT表,在核心网络中,这样路由器需要维护庞大的路由表,这样就大大的减低了设备的性能;这样,转发的效率就非常的低了。
 
2. ATM的野心
ATM出来,不辛的是信奉唯美主义的ATM走向了另一个极端,过于复杂导致没有任何厂商能够完全支持,而且无法与IP很好的融合,在与IP的决战中最终落败,ATM只能寄人篱下,沦落到作为IP链路层的地步。
ATM技术虽然没成功,但又几点传新:
1)屏弃了繁琐的路由查找,改为简单快速的标签交换
2)将具有全局意义的路由表改为只有本地意义(本路由)的标签表
这些都可以大大提高一台路由器的转发能力
 
3. MPLS
MPLS充分吸取了ATM的精华,但也同时认识到IP又无法取而代之,所以成为IP的承载层。但为了与一般链路层有所区别,将地位在2.5层的位置。可以承载其他协议的报文,故称为"multiprotocol"于1997年正式形成标准MPLS(Multiprotocol Lable Switch)。
MPLS实际上就是一种分类转发的技术,它将具有相同转发处理方式(目的地相同FEC—Forwarding Equivalence Class 转发等价类),给具有相同属性的一类报文分配标签。对于一条FEC来说,沿途所有的设备都必须具有相同的路由(前缀和掩码必须完全先同)才可以建成一条LSP。也就是说,使用MPLS转发的所有沿途的路由器都不能做聚合或者汇总。
Cisco IOS的三种交换方式:
①Routing Table-driven switching: process switching 进程交换
②Cache-driven switching: fast switching 路由器接口默认是这种交换–ip route cache(启用命令)
③Topology-drivern switching: CEF switching(prebuilt FIB table)
MPLS必须先启用CEF,因为只有在CEF的FIB表中才能插入标签.
CEF是唯一一种提供MPLS标签插入的转发机制, cef主要靠三层的路由表和邻接表生成一张转发库(FIB和ADJ),CEF主要的作用是完成3层和二层转发表的映射。CEF形成FIB,而标签分发协议根据FIB来分发标签
Router(config)#ip cef
MPLS常用标签分发协议:
TDP—cisco专有标准,以播地址发包,使用UDP711端口
LDP—业界标准,基本上就是TDP一样的东东
TDP和LDP只能基于FIB表中的条目来打标签,实际上在MPLS中是LFIB表
TDP和LDP既基于UDP,也基于TCP,
TDP发现邻居发UDP-711,源目都是,建邻居用TCP-711,目的端口,源端口随机,以后发包都是TCP
LDP发现邻居发UDP-646,源目都是,建邻居用TCP-646,目的端口,源端口随机,以后发包都是TCP

二.MPLS体系结构 (Major Components of MPLS Architecture)
1.MPLS的两个层面
①Control plane
Exchanges Layer 3 routing information and labels; (注意一定要是3层RT表收敛了,然后才可以分发标签)
附:三层RT表的是收敛基于路由协议(OSPF,EIGRP,ISIS,BGP..)
标签分发协议有:TDP, LDP, BGP, and RSVP(注:LDP & TDP只对IGP学到路由条目分标签)
②Data plane
Forwards packets based on labels
注:数据层面FLIB表的生成要依赖于控制层面LIB和FIB表的收敛。
2.MPLS的2种模式
①Frame-mode
②Cell-mode(现网中很少用了)
3.MPLS 标签格式/Label Format (Ref: p159)
MPLS
MPLS uses a 32-bit label field that contains the following infomation:
20-bit Label (0-15保留,标签最小可用是16)
3-bit EXP: experimental field (做服务质量调整的)
1-bit S: bottom of stack indicator 用于标识是否是栈底,表明MPLS的标签是可以嵌套的。路由器检测包的时时候,如果先检测到这个S值为0,说明这不是栈底,以后还是MPLS报头。如果S值为1,说明这是最后一个MPLS包头了,以后的是三层信息;理论上MPLS可以无限嵌套,但它还是受限于MTU。这些嵌套功能可以简单的实现功能的扩展,一个例子就是MPLS/×××
8-bit time-to-live (TTL) field -- prevent data looping
Label Stack--p160
路由器是通过分析二层包头中的类型字段判断某个包是IP包或是Label包
[Ethernet][Label][IP][TCP][HTTP][FCS]
Ethtertype:
Unlabeled IP unicast PID = 0x0800
Labeled IP unicast PID = 0x8847
Labeled IP multicast PID = 0x8848
Note: The Label is generated when the routing table is completed. It is specified for each route. For BGP, MPLS doesn't specify Labels. One label is for one route.
 
4.MPLS术语
①Label(标签):是一个比较短的,定长的,通常只具有本地局部意义的标识,它通常位于数据链路层封装与第三层数据封装之间,标签通过绑定过程同FEC相映射。
②FEC(Forwarding Equivalence Class,转发等价类): 对于一组报文,处理它的沿涂路由器都用一个相同的动作处理它,那么这就叫作一个FEC。即在转发过程中以等价的方式处理一组数据分组的动作。
③LSP(标签交换通道):一个FEC的数据流,在不同的节点被赋予确定的标签,数据转发按照这些标签进行。数据流所走的路径就是LSP。即在转发过程中以FEC动作处理过的分组所走的通路。
④LSR(Label Switching Router):LSR是MPLS网络的核心路由器,它提供标签交换和标签分发功能。
⑤LSER(Lable Switching Edge Router): MPLS网络边缘的路由器或交换机,进入到MPLS网络的流量由LSER分为不同的FEC,并为这些FEC请求相应的标签。它提供流量分类和标签的映射,标签的移除功能。在MPLS网络入口处LSER(Ingress Router)要变IP转发为标签转发,在MPLS网络出口处LSER(Egress Router)要变标签转发为IP转发。
 
5.MPLS vs. IP 路由/转发方式
IP是hop-by-hop逐跳转发,它在每一条都要进行相应的路由表查询,并进行最长的匹配。
MPLS只是由LSER进行相应的查询,并通过FEC分配相应的标签,并建立LSP。LSR只需要进行相应的标签查找,并对应转发就行了。
 
6.FEC
不同的地址(属于相同的网段)的IP报文,在ingress处被划分为相同的FEC,进而具有相同的标签,这样在LSR处,只需要根据标签做快速的交换即可。而对于传统的IP路由,它在每一跳处实际上都做一次重新划分FEC的过程。
如果一台路由器对于IP路由和标签交换使用了同样的CACHE功能,由于对于路由来说,在CACHE中只能记录主机路由,条目将十分有限,而标签对应的是FEC,可能是一个网段,从而可以做到很少的条目匹配大量的报文。
FEC缺点:对于一条FEC来说,沿途所有的设备都必须具有相同的路由(前缀和掩码必须完全相同)才可以建成一条LSP。也就是,MPLS转发的所有沿途设备不能做路由聚合操作。
 
7.LSR和LSER的FLIB表的构建:
  MPLS
LSR: routing protocol—-Ip routing table(FIB)—Label Distribution protocol—Label Forwarding table
说明:数据层面的构建是先是通过LDP建立标签映射关系,然后通过FIB,找到数据包的出接口,最后构成FLIB。
 
MPLS
LSER: Routing protocol—Ip routing table(FIB)—Label Distribution protocol—Ip Forwoarding table—Label forwarding table
说明:当进来的是一个IP包的时候,查的是通过ip forwarding table查FIB表,这个时候不需要分标签直接转发出去就可以了,如果进来的是标签包,查LFIB表。
 
MPLS
LIB & LFIB Setup
 
8.标签栈
MPLS ×××:2 labels (MPLS: LDP or TDP; ×××: ×××v4)
MPLS TE: 2 or more labels(MPLS: LDP or TDP;TE: 如果开启FRR,理论上没有限制,但是受到MTU的限制)
MPLS ××× TE : 3 or more labels
 
9.MPLS的动作
① impose: insert a label or a stack of labels on an ingress packet
② swap: swap a label with next-hop label or a stack of labels in the core
③ pop: remove a label on egress packet
④ untag
⑤ agg
impose—swap—pop、untag、agg
特殊的:递归(如果出现该动作,说明配置有问题)
 
10.分标签协议
Unicast IP routing —any IGP—unicast IP routing table— LDP or TDP— LFIB
MPLS TE —OSPF or IS-IS—Unicast Ip routing Table—LDP/RSVP(RSVP要求底层协议是ISIS或OSPF,而且必须是主干区域area 0 or L2)—-LFIB
QOS —any IGP—Unicast ip routing table—- LDP or TDP—–LFIB
MPLS ×××—Any IGP—Unicast ip routing table—-LDP/×××v4—-LFIB
 
11.次末跳弹出机制(PHP - Penultimate Hop Popping)
主要是为了避免多次查表;
在倒数第二跳就不再打标签,直接发给最后一个路由器,省得它再去查标签,去标签;最后一个路由器会发一个值为3(保留)的标签给自已的邻居,就是POP的意思
注意这个倒数第二跳是一个绝对的概念;实际上PHP就是—路由器对自已的直连路由,会向自已的邻居发送一个POP标签。
 
12.LDP(Label Distribution Protocol)
这是一个MPLS动态的生成标签的协议,存在有多种标签生成协议可以实现这种标签的生成与分发,最常用的就是LDP。
LDP既然是一个动态的标签生成协议,它就与一些动态的路由协议有着相同之处:
①报文
②邻居自动发现和维护机制
③一套标签计算算法,用来根据搜集到的信息计算最终结果。
LDP消息:
Discovery(发现消息):用于通行和维护网络中的LSR的存在。
Session(会话消息):用于建立,维护和结束LDP对等实体之间的传话连接。
Advertisement(通告消息):用于创建,改变和删除特定FEC-标签绑定信息。
Notification(通知消息):用于提供消息通告和差错通知。
LDP会话建立过程:
LSR1  ———————————————>  LSR2
<———————————————
邻居发现:通过互发HELLO报文(UDP:646/IP:224.0.0.2)
<———————————————
建立TCP连接:由地址大的一方主动发起(TCP:646)
<———————————————
初始化session,由master发出初始化消息,并携带协商参数
———————————————->
由slave检查参数能否接受,如果能则发送初始化消息,并携带协商参数。
并随后发送keepalive消息
<———————————————
master检查参数能否接受,如果能则发送keepalive消息
———————————————->
相互收到keepalive消息,会话建立。
期间收到任何差错消息,均关闭会话,断开TCP连接。
LDP State Machine(LDP状态机):
①non existent
②initialized
③opensent
④openrec
⑤operational
 
13.标签分配和管理
标记分发方式:
DOD(Downstream On Demand)下游按需标记分发
DU(Downstream Unsolicited)下游自主标记分发
DU标签分发:
①下游路由器主动跟据自己直连的网络发布标签映射消息。
②标签分配方式中也存在水平分割。
③标签是设备随机自动生成的,16以下为系统保留。
标记控制方式:
Odered:有序方式标记控制
Independent:独立方式标记控制
标签保留方式:
保守方式
自由方式
数据包的源:upstream 上游
数据包的目地:downstream 下游(数据包的目地一定是路由的始发地)
以一条LSP上,沿数据包传送的方向,相邻的LSR分别叫上游LSR(upstream LSR)和下游LSR(downstream LSR)。下游是路由的始发者。
 
14.LDP标签保留方式(选择方式)
即我从多个邻居收到到同一目的地的标签时,我怎么选择,使用哪一个标签转发的过程。
①自由方式(Liberal retention mode)
保留来自邻居的所有发送来的标签
优点:当IP路由收敛,下一跳改变时减少了LSP收敛时间
缺点:需要更多的内存和标签空间。
此为当今比较流行的方式。
②保守方式(Conservation retention mode)
只保留来自下一跳邻居的标签,丢弃所有非下一跳邻居发来的标签。
优点:节省内存和标签空间。
缺点:当IP路由收敛,下一跳改变时LSP收敛慢。
 
15.标签控制方式
①有序方式(Odered)标记控制:
除非LSR是路由的始发节点,(即此路由为我的直连路由,或我自己定义的静态路由),否则LSR必须等收到下一跳的标记映射后,才能向上游发出标记映射。为了防止标签LSP中间是中断的,类似于IBGP的同步特性。
此为当今比较流行的标签控制方式。
②独立方式(Independent)标记控制:
LSR可以向上游发出标记映射,而不必等待来自LSR下一跳的标记映射消息。但这样就不能保证LSP是完整的。
 
16.LDP标签分配
采用(DU+自由+有序)的标签分配及控制方式:
①发现自己有直连接口路由时会发送标签
②标签表中会存在大量的非选中的标签。
③收到下游到某条路由的标签并且该路由生效(也就是说,本地已经存在该条路由,并且路由的下一跳和标签的下一跳相同)时会发送标签。
注:
①如果某个网络中只有部分设备运行MPLS(MPLS域嵌在IP域中),则只会对运行MPLS的设备(MPLS域)的直连路由生成标签,对于其他设备(IP域)始发的路由则不会生成标签
②如果没有标签,对于通过MPLS域的目的地址在IP域的报文如何转发?
在Ingress处,会对到来的数据包进行标签选择,如果没有匹配的标签它也不会将数据包丢弃,它还会进行相应的路由表查找,进行相应的转发。
 
17.路由环路的预防与检测
环路预防:
任何涉及到转发或是路由计算的,都有可能引发路由环路,MPLS也不例外。
但LSP的建立是依赖IP路由的,所以环路的预防也就可以直接交给IP来做,自己无需处理。
环路检测:
MPLS做为2.5层协议,它不能完全依赖于IP做环路预防,它自己也要进行相应的检测,以蔽免IP环路预防处理失败,进而发生环路。
MPLS的环路检测手段就是使用TTL,每经过一次MPLS转发,TTL减一,进而将环路带来的影响降到最小。
注:此处,只MPLS报头中的TTL减一,IP报头的TTL不减一。因为标签转发过程中,根本就不把数据包给IP层,这样才提高的转发速度,所以IP报头TTL不会减一。
 
18.MPLS的衰落
因为路由交换设备发展到了硬件转发,使用ASIC,NP等价格也相对低廉的硬件技术可以很简单的实现高速的转发,所以MPLS这种软件的转发手段就体现不出高明来了。
还有MPLS本身也存在着一些不足,最大的一个缺点就是:FEC必须在整个LSP路径上都是一致的,这本身是不符合网络的拓扑结构的。
 
19.Cicso IOS MPLS基本配置
①开启CEF
Router(config)#ip cef
②接口开启LDP或者TDP分标签协议
Router(config-if)#mpls ip
//默认开启的是LDP,也可以通过mpls label protocol [ ldp | tdp | both ]
③配置MPLS ID
Router(config)#mpls ldp router-id interface [force] 
//如果之前运行了MPLS,配置ID不会立即生效,需要重启,也可以通过加force强行生效,但是此时邻居会断一下。
④配置标签包的MTU
Router(config-if)#mpls mtu bytes
//为了防止比较大的数据包经过ISP边界骨干路由器时MPLS标签压不进去。
⑤配置TTL的繁衍(一般在PE设备上配置)
Router(config)#no mpls ip propagate-ttl [ forwarded | local ]
//防止别人用trace探测ISP内部网络拓扑。一般只要关闭forwarded就可以了,local的没必要关闭,这样方便管理。
⑥标签过滤(CISCO只支持出方向的标签过滤)
Router(config)#mpls ldp advertise-labels [for prefix-access-list [to peer-access-list]]
 
20.MPLS调试
show mpls ldp parameters
//查看本地LDP协议的一些属性
show mpls interfaces [interface] [detail]
//查看有哪些接口开启了MPLS并且使用的是LDP还是TDP
show mpls ldp discovery
//查看LDP邻居
show mpls ldp neighbor [detail]
//查看LDP建立起来的邻居关系
show mpls ldp bindings
//主要查看的LIB表,也就是LDP的数据库
show mpls forwarding-table
//查看FLIB表
show ip cef detail
//查看FIB表
----------------
参考自: http://www.open***.com/2009/05/14/study-mpls-***-notes-one.html
Reference: CCNP.Student.Guide.2006\CCNP_ISCW_Student_Guide_Version_1.0_Vol.1.pdf