MPLS基本介绍
IP 转发原理
- 利用路由协议(静态\RIP\OSPF等)生成路由表
- 根据目的IP地址进行转发:A访问B
- 在IP报文转发的过程中,目的IP地址保持不变
MPLS转发原理
在二层报头与三层报头之间插入MPLS报头,可以插入多个MPLS头部,这种标签模式也被称为帧模式(Frame Mode)
MPLS 包头结构
通常,MPLS报头有32Bit,其中有:
- 20Bit用作标签(Label)
- 3个Bit的EXP, 协议中没有明确,通常用作COS
- 1个Bit的S,用于标识是否是栈底,表明MPLS的标签可以嵌套。
- 8个Bit的TTL
名词解释
标签(Label)
标签是一个比较短的,定长的,通常只具有局部意义的标识,这些标签通常位于数据链路层的数据链路层封装头和三层数据包之间,标签通过绑定过程同FEC相映射。
FEC
Forwarding Equivalence Class,FEC(转发等价类),是在转发过程中以等价的方式处理的一组数据分组。
可以通过地址、隧道、COS等来标识创建FEC,
目前看到的MPLS中只是一条路由对应一个FEC。通常在一台设备上,对一个FEC分配相同的标签。
由于沿途所有的设备都必须具有相同的路由(前缀和掩码必须完全相同)才可以建成一条LSP
所以使用MPLS转发的所有沿途设备上,对于要使用标签转发的路由,都不能做路由聚合的操作。
LSP
标签交换通道。一个FEC的数据流,在不同的节点被赋予确定的标签,数据转发按照这些标签进行。数据流所走的路径就是LSP。
LSR
Label Switching Router,LSR是MPLS的网络的核心交换机,它提供标签交换和标签分发功能。
LSR只会选择最优路由下一跳的路由器所通告的标签映射消息进入 MPLS转发表
LER
Label Switching Edge Router,在MPLS的网络边缘,进入到MPLS网络的流量由LER分为不同的FEC,并为这些FEC请求相应的标签。它提供流量分类和标签的映射、标签的移除功能。
LDP标签数据库
LDP标签数据库中包含所有邻居所通告的标签映射消息
工作过程
数据包如何转发至目的地
PUSH动作:在边缘设备上根据FIB转发表向IP报文中插入MPLS报文头。这个是边缘路由器的操作
SWAP动作:中间传输设备收到标签报文后, 按照MPLS转发表中相关表项对报文中的标签进行替换
POP动作:倒数第二跳的设备收到标签报文后, 按照MPLS转发表中相关表项对报文中的标签进行弹出。
PHP:倒数第二跳弹出,
最后的设备到达MPLS的网络边缘按路由转发
=====================================================
LER:IP报文进入时,查找标签转发表,给IP报文打标签操作(PUSH)
IP报文离开时,对标签报文进行弹出操作(POP),按IP路由进行转发。
LSR:负责对标签报文进行快速的标签交换操作(SWAP)
控制层面
功能:负责产生和维护路由信息以及标签信息。
1、MPLS工作前,控制层面生成RIB和FIB(FIB基于RIB生成)
2、MPLS协议会启动TDP(cisco私有协议端口749)/LDP协议(公有协议646),直连设备之间将建立邻居关系
LDP:基于UDP和TCP的646端口工作;先使用UDP组播发送hello包发现邻居,获取对端邻居的IP地址,再基于此IP地址和邻居建立TCP会话,邻居建立后,为保证邻居关系稳定,一般建议用环回地址建立TCP会话,建议设置环回地址MPLS协议的router-id,该ID值将携带在组播的Hello包中,基于此RID进行TCP会话建立。
总结:MPLS协议需要在直连的邻居间使用RID进行TCP会话建立,所以前提条件就是RID必须为设备的真实的环回接口IP地址,组播的hello包在直连的物理接口上收发,来获取对端的RID,也必须满足环回之间路由可达
3、MLSP在建立完成邻居关系后,会生成邻居表,LDP协议会在基于FIB学习到目标路由条目生成标签号。
注意:华为设备基于FIB表中的32为掩码的主机路由生成标签。
原因就在于正常的32位主机路由位OSPF学习到的环回接口,正常实际下工程中只有BGP协议建立时会使用环回接口,华为此设定的意义就在于只有BGP流量(黑洞)使用标签转发,但是其他普通的流量还是基于设备的特快交换–FIB进行转发
4、标签生成后,将存储在本地的LIB–标签信息数据库,而此LIB会在LDP;邻居间尽享共享,LIB表中分配的标签号会告知本地的邻居。
5、运行MPLS协议的设备会将LIB和FIB进行整合,将标签和最佳路径关系生成LFIB表(标签信息转发数据库),数据转发时基于此LFIB表使用进行标签转发。
数据层面
功能:设备基于路由表访问目标,产生的流量
1、没有MPLS协议,基于FIB正常转发
2、如果存在MPLS协议,由第一台设备打标签,其他设备基于LFIB进行转发,最后一台设备拆标签,完成数据转发过程
LDP协议原理配置
LDP协议邻居建立
发现邻居阶段
- 使用UDP报文
- 源和目的端口都是UDP 646
会话建立阶段
- 使用TCP报文,端口也是646
- 单播一对一。
默认情况下,transport-address大的作为发起方。默认transport-address等于router-id
router-id和ospf router-id 选举是一样的【手动选举&自动选举】
保证transport-address地址可达
① 运行IGP协议
②手动指定物理地址为router-id
如果需要router-id与transport-address不一致的话,需要接口模式下使用下列命令来修改transport-address
(config-if)#mpls ldp discovery transport-address interface【指定当前接口】
(config-if)#mpls ldp discovery transport-address x.x.x.x【单独指定transport-address】
配置
LDP协议配置
R1(config)#ip CEF【路由器默认开启show run | s ip cef 】
R1(config)#mpls label protocol ldp
R1(config)#mpls label router-id loopback 0
R1(config)#mpls label range 100 199 /选配:修改本地所产生的标签数 值的范围,默认是16~220/
R1(config)#interface ex/x【发送LDP hello报文,物理接口启用mpls ip】
R4(config-if)#mpls ip
高级特性
#路由环路的预防
R1(config)#mpls ip propagate-ttl
关闭TTL复制功能:保护MPLS内网。
当外网的用户,trancert时是看不到MPLS内部网络的结构
#LDP邻居认证
R2(config)#mpls ldp neighbor x.x.x.x password xxx
测试
验证是否收到对方的LDP Hello
验证LDP协议阶段1 是否有建立,查看哪些邻居有收到本路由器发送的LDP hello
R4#show mpls ldp discovery
Local LDP Identifier:
4.4.4.4:0
Discovery Sources:
Interfaces:
Ethernet0/0 (ldp): xmit
Ethernet0/1 (ldp): xmit/recv
LDP Id: 2.2.2.2:0
查看本路由哪些接口启用LDP
R4#show mpls interfaces
Interface IP Tunnel BGP Static Operational
Ethernet0/0 Yes (ldp) No No No Yes
Ethernet0/1 Yes (ldp) No No No Yes
验证LDP的邻居
验证LDP协议阶段2,会话建立阶段,查看本路由器和哪些设备建立了LDP session
R4# show mpls ldp neighbor
Peer LDP Ident: 2.2.2.2:0; Local LDP Ident 4.4.4.4:0
TCP connection: 2.2.2.2.646 - 4.4.4.4.62868
State: Oper; Msgs sent/rcvd: 79/77; Downstream
Up time: 00:54:24
LDP discovery sources:
Ethernet0/1, Src IP addr: 24.24.24.2
Addresses bound to peer LDP Ident:
2.2.2.2 23.23.23.2 25.25.25.2 26.26.26.2 24.24.24.2
查看LDP设置
R4# show mpls ldp parameters
LDP Feature Set Manager: State Initialized
LDP features:
Basic
IP-over-MPLS
TDP
IGP-Sync
Auto-Configuration
TCP-MD5-Rollover
Protocol version: 1
Session hold time: 180 sec; keep alive interval: 60 sec //阶段 2
Discovery hello: holdtime: 15 sec; interval: 5 sec //阶段 1
Discovery targeted hello: holdtime: 90 sec; interval: 10 sec
Downstream on Demand max hop count: 255
LDP for targeted sessions
LDP initial/maximum backoff: 15/120 sec
LDP loop detection: off
查看LDP标签库
R4#show mpls ldp bindings
lib entry: 1.1.1.1/32, rev 18 //该前缀的路由条目
local binding: label: 21 //本地为该前缀绑定的标签
remote binding: lsr: 2.2.2.2:0, label: 19 //邻居为该前缀通告的标签映射信息
lib entry: 2.2.2.2/32, rev 2
local binding: label: 16
remote binding: lsr: 2.2.2.2:0, label: imp-null
lib entry: 3.3.3.3/32, rev 16
local binding: label: 20
remote binding: lsr: 2.2.2.2:0, label: 18
lib entry: 4.4.4.4/32, rev 4
local binding: label: imp-null
remote binding: lsr: 2.2.2.2:0, label: 16
lib entry: 5.5.5.5/32, rev 28
local binding: label: 26
remote binding: lsr: 2.2.2.2:0, label: 24
lib entry: 6.6.6.6/32, rev 26
local binding: label: 25
remote binding: lsr: 2.2.2.2:0, label: 23
lib entry: 13.13.13.0/24, rev 24
local binding: label: 24
remote binding: lsr: 2.2.2.2:0, label: 22
lib entry: 14.14.14.0/24, rev 6
local binding: label: imp-null
查看MPLS转发表
R4#show mpls forwarding-table
Local Outgoing Prefix Bytes Label Outgoing Next Hop
Label Label or Tunnel Id Switched interface
//Local tag(Label):本地为路由表中的每一条IGP路由所绑定的标签(Label Allocation),因此对于本地而言,Local Label是唯一的
//本地在前缀所对应的标签映射消息中携带Local Label通告给其他LDP邻居(Label Distribution)
//Outgoing tag (Label):LDP邻居通告给本地的标签映射消息中所包含的标签。Outgoing tag(Label)可能是相同的,因为每个LDP邻居仅在本地为前缀Allocation唯一的Label,因此两个邻居很有可能为同一前缀Allocation相同的Label,这样就出现了两个LDP邻居为本地通告了同 一前缀、相同标签的标签映射消息,即在MPLS转发表中出现相同的Outgoing tag(Label)。
16 Pop Label 2.2.2.2/32 0 Et0/1 24.24.24.2
17 Pop Label 23.23.23.0/24 0 Et0/1 24.24.24.2
18 Pop Label 25.25.25.0/24 0 Et0/1 24.24.24.2
19 Pop Label 26.26.26.0/24 0 Et0/1 24.24.24.2
20 No Label 3.3.3.3/32 0 Et0/0 14.14.14.1
21 No Label 1.1.1.1/32 0 Et0/0 14.14.14.1
22 No Label 16.16.16.0/24 0 Et0/0 14.14.14.1
23 No Label 15.15.15.0/24 0 Et0/0 14.14.14.1
24 No Label 13.13.13.0/24 0 Et0/0 14.14.14.1
25 23 6.6.6.6/32 0 Et0/1 24.24.24.2
No Label 6.6.6.6/32 684 Et0/0 14.14.14.1
26 24 5.5.5.5/32 0 Et0/1 24.24.24.2
No Label 5.5.5.5/32 0 Et0/0 14.14.14.1