MPLS
Multi Protocol label switching 多协议标签交换
MPLS最早由思科公司设计,是为了提高路由器的转发效率。因为早期没有硬件转发技术。
MPLS通过在IP包中插入一个标签,利用标签在路由器上转发IP包,而不再是查路由表转发,提高了转发效率。
MPLS可以支持非IP的技术,并且由于它是在二层和三层头之间插入一个标签,所以被称为2.5层技术
MPLS的其它应用:
1、MPLS-VPN
2、MPLS-TE
3、MPLS-QOS
MPLS的本质---MPLS实际上是一种分类转发的技术,它将具有相同转发处理方式(目的地相同、使用的转发路径相同、有相同的服务等级)的分组归为一类,这种类别就叫转发等价类。同一类的数据包在路由器上有相同的转发决定。
FEC(forwarding equivalence class 转发等价类)------就是具有相同特性的一类报文。其实就是一组按相同方式、经相同路径、每跳转发处理行为均一致的IP包。
FEC的缺点:要求所有的路由器上去往特定目的地的路由必须相同,prefix和mask必须完全一致。当然就不能在网络内做汇总了。
注意:在思科路由器上启用MPLS必须先启用CEF,因为要在CEF的FIB表中插入标签
几个名词:
Label Assign-------路由器为自已FIB中的路由分配标签
Label Distribute-------路由器将自已产生的标签分发给自已的邻居
LSP--------标签交换路径
LSR(标签交换路由器)-------只要路由器运行了MPLS,就成为LSR路由器
边界LSR路由器---------边界LSR路由器负责压标签和弹标签
MPLS分帧模式和信元模式(ATM中使用)两种
帧模式的MPLS就是在基于帧封装的接口上使用的MPLS
标签控制模式:
independent control(独立控制):LSR出现FEC,立即与Label关联,不等待下游的LSR的Label,以最快速度建立LSP。
ordered control(有序控制):上游LSR要等待下游LSR的Label,才能建立LSP。
标签分配模式:
downstream-on-demand(自主分发):上游LSR通过Lable request向下游的LSR请求Label
unsolicited downstream(按需分发):下游LSR自动将Label通知给邻居
标签保留方式:
Liberal Retention(自由保留):LSR会保留所有LSR分配的Label
Conseviative Retention(保守保留):LSR只保留下游LSR(最优的)分配的Label
MPLS的两种模式:
帧方式的MPLS使用"独立控制/自主分发/自由保留",帧模式中一个标签32bit。
ATM(信元模式)的MPLS使用"有序控制/按需分发/保守保留"
per-platform
per-interface
标签字段的构成:
MPLS的标签共32bit,分为四个字段
Label EXP S TTL
1~19 20~22 23 24~31
Label---------------------------------0~15号标签被保留,最小的可用标签是16
EXP(实验/优先级位)-----------类似Qos
S(栈底位)--------------------------MPLS可以打几层标签,此位置0表示本标签不是最后一个标签,置1表示本标签是最后一个标签
TTL----------------------------------这个一看就知道啦,就是将IP包头中的TTL移到这里
标签是打在二层帧头和三层IP包之间,所以MPLS也被称为2.5层技术
正常情况下,二层帧的TYPE字段是0x0800,表示上层是IP
在MPLS中,二层帧的TYPE字段是0x8847(单播包),0x8848(组播包)
在以太帧中:type类型为ox8847 表示这是一个单播的标签帧
type类型为0x8848 表示这是一个组播的标签帧
LSR(标签交换路由器)
LSR就是能够根据打在数据包上的标签进行3层包转发的MPLS节点
LSR必须能同时工作于控制层面和数据层面。控制平面主要负责交换路由选择信息,数据平面主要负责实际的包转发操作。在MPLS中,包转发操作基于标签。虽然每台LSR都有路由表,但路由表并不用来做常规的路由选择操作。
LSR分为两种:
1、内部LSR
2、边缘LSR
对标签的处理有四种方法--
1、PUSH //压入,当数据进入MPLS Domain时压入标签
2、SWAP //当MPLS Domain内的路由器由到打了标签的数据包时,交换标签
3、POP //弹出,当数据离开MPLS Domain时弹出标签
4、untagged //表示弹出所有标签
LSP--label switching path //标签交换路径
用户的边界网关通常标注为CE
SP的边界网关通常标注为PE,内部的路由器标注为P
传递标签所用的协议:
要实现标签交换,首先就要产生标签,并且在网络中将标签分发出去,用来产生标签,分发标签的协议有两种:
TDP---cisco专有标准,以广播地址发包,使用UDP711端口
LDP---标签分发协议,业界标准,基本上就是TDP一样的东东
两者的特点与区别:
TDP和LDP只能基于FIB表中的条目来打标签
只对IGP路由分标签,不对BGP路由分标签
TDP发现邻居用UDP-711端口,源目都是,建邻居用TCP-711,目的端口,源端口随机,以后发包都是TCP
LDP发现邻居用UDP-646端口,源目都是,建邻居用TCP-646,目的端口,源端口随机,以后发包都是TCP
TDP的hello包是发向广播地址
LDP的hello包是发向组播地址224.0.0.2
以下几个协议也可以分标签:
BGP:
是对BGP路由分标签
MP-BGP:
是对MPLS-VPN路由分标签
RSVP-TE:
是对MPLS TE分标签
MPLS的运作过程
1、在MPLS区域中,每一台LSR首先要运行路由协议,形成路由表
2、接着运行LDP,之后LSR会为路由表中的每一个目的地分配一个标签,这些标签只有本地意义,并被存在LIB库中。
3、接着每一个LSR会向其邻接对等体通告自已的标签。
4、每一个LSR根据收到的标签(出标签)与自已发出的标签(出标签)关联起来,构成LFIB
5、收到的标签还会被插入FIB表,与目的网络关联起来。
注意:MPLS只为IGP路由分标签,不为BGP路由分标签,BGP路由使用下一跳地址的IGP标签来传递数据。
LIB-FIB-LFIB
注意LIB与FIB、LFIB的区别,重要
FIB //CEF技术自动生成的表项,在MPLS中,FIB表会为每个目的地对应上标签。
LIB(标签信息库) //路由条目和自已为路由所分配标签的对应表,还有邻居分配给我的标签。
LFIB(标签转发信息库) //每一个入标签和下一跳以及出标签的对应表,是标签的转换表,所以叫标签转发表。
路由器会把LIB表中给每个路由条目分配的标签告诉自已的每一个邻居
同时路由器会把别人给的标签也放入LIB表
由此得出以下定理:
自已的入标签是分配给别人用的,自已的出标签是别人给我用的。
路由器会信任路由条目的下一跳给自已分配的标签,其实就是FIB表中的下一跳标签
FIB on B
network next-hop interface
X C 47 去一个网络的下一跳
LIB on B
network LSR label
X C 47 自已分配出去的标签以及其它路由器给我的标签
LFIB on B
label action next-hot
25 47 C 标签的转换表
POP|PUSH
边界第一跳LSR路由器会查LIB表,最后一跳LSR路由器会查路由表进行转发。
内部的LSR路由器只会查LFIB表
上游和下游的概念是针对数据来说的:
数据包的源:upstream 上游
数据包的目地:downstream 下游(数据包的目地一定是路由的始发地)
MPLS网络的转发过程:
分三步:
1、在网络的入口边缘LSR(标签交换路由器)收到IP分组后,将分组归为某个转发等价类(FEC),并使用该FEC对应的出站标签标记该分组。对于基于目标的单播IP路由选择,FEC对应于一个目标子网,分组分类工作是对转发表执行传统的第三层查找。
2、核心LSR收到带标签的IP分组,并根据标签转发表,用相同的FEC对应的出站标签代替输入IP分组中的入站标签,也就是做标签交换。
3、当该FEC的出口边缘LSR收到标签分组后,它删除标签并对得到的IP分组执行传统的第三层查找。
PHP:倒数第二跳弹出
一个优化技术
在倒数第二跳就不再打标签,直接发给最后一个路由器,省得它再去查标签,去标签
最后一个路由器会发一个值为3(保留)的标签给自已的邻居,就是POP的意思
注意这个倒数第二跳是一个绝对的概念
实际上PHP就是---路由器对自已的直连路由,会向自已的邻居发送一个POP标签。
MTU值的修改
修改二层的MTU会影响三层的MTU(实际上以太网的MTU固定的,改不了)
修改三层的MTU不会影响二层的MTU
int s0
mtu 2000 //修改二层的MTU,以太口的二层MTU是固定的,改不了
int e0
ip mtu 1496 //修改三层MTU,不能超过二层的MTU
int e0
mpls mtu 1504 //在以太网上用这一命令指定二层帧大小,=TAG标签+三层包的字节数,其实应该就是开启了对小巨帧的支持,这时允许二层的MTU超过1500
LDP介绍:
LDP协议很类似于动态路由协议,它会让路由器之间先建立邻居关系,然后针对路由条目产生标签,再将标签分发出去。
LDP的工作过程分几个阶段:
1、LDP的第一阶段:Discovery //LDP发现邻居用UDP-646端口,源目端口一样
2、LDP的第二阶段:Sessions //建邻居时目的端口用TCP-646,源端口随机,以后通信都是TCP
3、Keeplive //邻居建立好以后,只要发keeplive维持TCP连接即可
4、Notification
router-id
路由器运行LDP后,会自动产生一个router-id ,产生的规则如下:
router-id产生的顺序:
1、手工指定
2、如果没有手工指定,会自动选择IP最大的环回接口
3、如果没有环回接口,会自动选择IP最大的物理接口
transport-address
transport-address类似于BGP中的更新源地址,在建立LDP的TCP连接时,是用双方的transport-address来建立的
当一台路由器运行LDP后,每个接口都会自动选择一个transport-address地址,然后使用这个地址去和邻居建立联系,两个邻居之间的transport-address必须可达,否则建立不了邻居关系。默认情况下,transport-address是使用LDP router-id。你也可以为接口指定一个transport-address。
LDP对等体之间建邻居关系时,一定是由地址大的一方去向地址小的一方发出连接来建立。
注意:transport-address每个接口可以不同,并且被用作transport-address的接口可以不运行LDP,只需UP即可,但必须peer可达。
在手工改动transport-address时,有可能还要把原来的接口down掉,否则可能改不过来
在hello包中有一个optional TLV:
Optional TLV:
transport-address
-----------------------------------------------------------------------------------------
实验:配置MPLS
配置MPLS的几个步骤:
1、启用CEF
2、指定使用的标签分发协议 (可选)
3、MPLS LDP router-id lo0 (可选)
4、MPLS label range 200 299 (可选)
5、运行LDP
6、修改MTU值 (可选)
基本命令:
ip cef
int s0/0
mpls ip //在接口下启用MPLS
扩展命令:
rouer(config)#mpls label protocol ldp //指定起用LDP(国际标准)
rouer(config)#mpls ldp router-id lo0
rouer(config)#mpls label range 200 299 //指定路由器分配标签的范围,需要重新建立TCP连接
int s1/1
mpls ldp discovery transport-address interface //指定用自已接口IP做transport-address,这个地址是用来和邻居建邻居关系的地址,也可以指定用别的接口,默认每个接口会使用router-id的接口IP去做transport-address,来建邻居关系。
查询命令:
show mpls interfaces //查看启用MPLS的接口
show mpls ldp neighbor //查看LDP的邻居表
show mpls ldp bindings //查看LIB表,LIB(TIB) 这里的TIB是cisco自已的叫法,其实就是LIB
show mpls forwarding-table //查看标签转发表LFIB(TFIB)
show ip cef detail //查看详细信息
注意:LFIB表中第二列显示POP tag表示只弹出顶层标签, untagged 表示弹出所有标签
只会显示最优下一跳路由器分配的标签
show mpls ip binding //可以直接看到一条路由的入标签和出标签 LIB
show mpls forwarding-table 查看LFIB
show ip cef //查看FIB表
show ip cef 2.2.2.0 //查看FIB表中一条明细
show ip cef detail //查看详细信息
show adjacency
show adjacency detail
show mpls ldp discovery detail //可看到transport-address
show mpls forwarding-talbe labels 304 detail
show mpls ldp parameters //查看LDP的配置参数
show tag-switching tdp neighbor 原来在TDP中使用的命令
show mpls ldp neighbor 查看MPLS邻居