MPLS:多协议标签交换---ISP应用
包交换:基于数据包中的IP地址进行路由;
标签交换:基于2.5层的标签进行数据转发; 多协议:无论网络层运行什么协议;
当下的主要应用:
- 解决BGP路由黑洞 2)MPLS VPN 3)MPLS TE(流量工程)
使用MPLS首先需要开启CEF:
- 启动CEF可以被ASIC(硬件芯片)直接调用转发
- CEF解决了递归问题,对应MPLS的标签生成非常重要
- CEF生成FIB表,而TDP/LDP只能基于该表进行标签的分发;
- 普通的路由表中不允许存在其他协议的参数,只有CEF可以提供MPLS的标签保存
控制层面:交换路由信息;标签的分发(MPLS不为BGP的路由进行标签分发)
数据层面:根据路由转发用户数据;标签的压入和弹出,基于标签号进行数据的转发
控制层面:通过IGP或者EGP交互路由信息,在交互路由信息基础上,通过TDP/LDP为所学习到的路由条目生成标签号,同时将标签告知邻居;
该层面工作完成后------生成:
- FIB转发信息数据库
- LIB标签信息数据库(本地和邻居对各条路由条目生成的标签号)
- LFIB标签信息转发数据库--将FIB表和LIB进行结合
数据层面:普通的IP数据包,基于FIB表转发;若存在标签号基于LFIB转发流量;
MPLS的数据包封装于2层和3层之间,称为2.5层
标签数据格式:32位
前20位为标签号:存在2^20个号码,其中0-15号被保留;故正常分发第一个号码为16号
20-22位:8个优先级,可用于进行QOS
第23位:栈底位,为1,标示本层标签为最后一层;最多可以存在3层标签信息;
TTL:当标签压入时,复制IP报头中的TTL值到标签中,当标签被弹出时复制TTL值到IP包头中;
一层标签:普通的MPLS流量
二层标签:MPLS VPN
三层标签:MPLS TE
使用MPLS后,二层若为以太网,其type 字段:
0X8847 MPLS单播
0X8848 MPLS 多播
名词注解:
- mpls domain -----MPLS工作的范围
- LSR(P路由器):标签交换路由器 查看数据包中的标签号基于LFIB进行数据转发
- Edge LSR(PE路由器):边界标签路由器;在数据层面工作时,第一跳路由器负责标签
的压入,最后一跳路由器负责标签的弹出;
- CE 客户端路由器,不工作于MPLS域,使用FIB表转发流量
- 上游路由器,下游路由器 基于数据层面进行区分
MPLS工作原理:
在控制层面传递路由条目的同时,MPLS的TDP/LDP将基于每条条目进行标签号的分发,然后传递给邻居;上游设备传输流量时,压入下游设备分发的标签号;
MPLS的优化:PHP次末跳 倒数第二跳;默认执行
最后一跳路由器在默认情况下需要查看LFIB后再查看FIB表,然后转发数据;PHP可以使倒数第二跳路由器在已知出接口等信息时,将标签弹出,就流量转发给最后一跳路由器;使最后一跳仅查看FIB表;
最后一跳,到达某个目标为本地直连时,及视为本地是该目标的最后一跳路由器;基于该网段分配给上游路由器标签号3;来告知对端为倒数第二跳;
注:PHP仅弹出最上层标签; pop 标示仅弹最上层标签
Untagged MPLS域标记,弹出所有标签;
配置:
- 单播路由
- CEF
- 开启MPLS
- (可选,建议配置) 修改MTU大小,因为标签的压入后将增大数据包,可能由于默认的MTU值,导致数据被重新分割,影响转发速度
r1(config)#int s1/1
r1(config-if)#mtu 1504 直连两端必须配置为一致
r2(config)#interface s1/1
r2(config-if)#mpls ip 开启某个接口的MPLS
华为
四、MPLS的配置
1、IP可达--- 使用路由协议全网可达
2、配置MPLS – LDP
[r2]mpls lsr-id 2.2.2.2 必须先定义mpls的router-id,要为本地设备的真实ip地址,且邻居可达,因为
该地址将用于建立TCP会话,建议使用环回地址
[r2]mpls 再开启mpls协议
[r2-mpls]mpls ldp 再激活LDP协议
[r2-mpls-ldp]q
之后需要在所有标签经过的接口上开启协议
[r2]interface GigabitEthernet 0/0/1
[r2-GigabitEthernet0/0/1]mpls 先开启MPLS
[r2-GigabitEthernet0/0/1]mpls ldp 再激活LDP协议
开启隧道递归[r2]route recursive-lookup tunnel
当启动配置完成后,邻居间使用UDP报文组播收发hello包;之后基于hello包中的router-id地址进行TCP会话的建立;
[r3]display tcp status
TCPCB Tid/Soid Local Add:port Foreign Add:port VPNID State
b4cf3d64 167/6 3.3.3.3:646 4.4.4.4:50858 0 Established
b4cf3adc 167/3 3.3.3.3:50806 2.2.2.2:646 0 Established
当tcp会话建立后,邻居间基于TCP会话再建立邻居关系,生成邻居表:
[r3]display mpls ldp peer
开启[r2]route recursive-lookup tunnel
再然后基于本地的FIB表,默认华为仅针对32位的主机路由生成标签号;存储于LIB表中,之后邻居间共享LIB表;
[r3]display fib 查看FIB表
[r4]display mpls ldp lsp 查看LIB表,装载本地和邻居为各条路由分配的标签号
最后路由器将LIB和FIB集合,生成最佳路径的标签转发规则—LFIB
[r4]display mpls lsp 查看LFIB表
注:默认华为仅针对32位主机路由分配标签
[r3]mpls
[r3-mpls]lsp-trigger all 开启功能,将针对fib表中所有路由进行标签号的分配
分发的协议存在两种:
- TDP cisco私有 TCP/UDP 711 hello包基于UDP传输,标签信息传输基于TCP
- LDP 公有 TCP/UDP 646 hello包基于UDP传输,标签信息传输基于TCP
Cisco ios版本12.4(3)以下设备默认使用TDP,以上默认LDP
设置mpls标签范围
R2(config)#mpls label range 200 1044
r2(config)#mpls label protocol ? 修改工作协议
ldp Use LDP
tdp Use TDP (default)
协议开启后,邻居间使用hello包建立邻居关系,生成邻居表;
r2#show mpls ldp neighbor 存在RID,RID的选举规则同OSPF一致;
注:RID也是数据包发送的目标ip地址,故若RID不能被访
问到,那么邻居关系将不能建立;若配置了环回,那么环回需
要宣告到单播路由协议中;
也可以修改RID为本地物理接口;
r2(config)#mpls ldp router-id serial 1/1 ? 修改该接口ip地址为RID
force Forcibly change the LDP router id 即可生效
<cr> 重启后生效
当邻居关系建立后,基于FIB表,生成LIB表:
MPLS将基于本地所有学习到的路由条目分发一个标签号,FIB中基于本地和邻居分配给每条条目的所有编号;
当LIB生成后,将LIB和FIB表进行结合,生成LFIB表来转发流量;
r2#show mpls forwarding-table
入标签为本地分配
出标签标签为下游分配
普通的MPLS解决BGP的路由黑洞问题:
MPLS将不为通过BGP学习到的路由条目分发标签号;
但是在访问BGP学习的目标时,封装该目标BGP下一跳地址所在网段的标签号;
使中间未运行BGP协议的路由器,基于标签号将流量转发到BGP的下一跳处,来避免路由黑洞;
MPLS VPN:
通过公网来传递私网的路由条目,由ISP负责;
- CE端和PE端的路由传递
- 如何区分不同的CE传递过来的相同路由----RD
RD---路由区分器----一个64位16进制的数值 X:X 1:1
- ISP路由器不能将CE端的路由装载到本地的普通路由表中,提供VRF空间
VRF:虚拟路由转发----在PE上配置,基于不同的CE端生成各种的路由表
- VRF中的路由不是普通路由,普通路由协议不能将其进行传递,必须使用MP-BGP来传递
VPNV4路由===IPV4路由+RD+RT值
- RT值,用于区分不同的目标接收者 RT值的格式同RD值,但RD为数值,RT为社团属性
- 使用MPLS可以解决路由黑洞,但当数据层面流量到达目标地址所在BGP路由器时,由于数据层面流量不能携带RD/RT值,故在弹出标签后,导致流量无法对应到不同CE端的VRF空间;因此,使用双重标签;外标签用于解决路由黑洞,将流量转发到CE端所连PE,内层标签用于对应不同的VRF空间;
配置:
- ISP的部分
[1]单播路由
[2]CEF
[3]MPLS
[4]定义VRF空间,同时关联所连接的CE端接口,再同时定义RD/RT
r2(config)#ip vrf openlabxian 创建空间名为openlabxian
r2(config-vrf)#rd 1:1 RD值
r2(config-vrf)#route-target 1:1 RT值
r2(config-vrf)#exit
r2(config)#interface s1/0 进入关联接口
r2(config-if)#no ip address 因为该接口将归属于VRF空间,故原IPV4地址需要排除
r2(config-if)#ip vrf forwarding openlabxian 关联空间
r2(config-if)#ip address 12.1.1.2 255.255.255.0 配置该接口ip地址,该接口所在路由将转移
到VRF空间内
r2#show ip route vrf openlabxian 查看该空间内的路由条目
r2#ping vrf openlabxian 12.1.1.1 使用该空间的路由来进行通信
注:当流量从某VRF空间所关联接口进入,那么将查询该VRF内的路由条目;
非VRF空间所关联接口进入,查看普通IPV4路由表
【5】MP-BGP---两个PE上配置
使用MP-BGP来传递VRF空间内的路由条目
先建立IPV4的BGP邻居关系,再建立MP-BPG关系
r2(config)#router bgp 1
r2(config-router)#b router-id 2.2.2.2
r2(config-router)#neighbor 4.4.4.4 remote-as 1
r2(config-router)#neighbor 4.4.4.4 update-source loopback 0
r2(config-router)#address-family vpnv4 进入家族模式
r2(config-router-af)#neighbor 4.4.4.4 activate 建立MP-BGP邻居关系
r2(config-router-af)#neighbor 4.4.4.4 send-community 开启社团属性传递性, 否则RT将不
能被传递
- CE端将私网路由传递给PE端
【1】静态
CE端,配置缺省静态指向ISP即可
PE端配置到CE端私网的静态路由
r2(config)#ip route vrf openlabxian 192.168.1.0 255.255.255.0 serial 1/0 12.1.1.1
出接口和下一跳必须同时存在;
r2(config)#router bgp 1 再将本地VRF空间内的直连和静态路由重发布到BGP协议中
r2(config-router)#address-family ipv4 vrf openlabxian
r2(config-router-af)#redistribute static
r2(config-router-af)#redistribute connected
r2#show ip bgp vpnv4 vrf openlabxian
Network Next Hop Metric LocPrf Weight Path
Route Distinguisher: 1:1 (default for vrf openlabxian)
*> 12.1.1.0/24 0.0.0.0 0 32768 ?
*> 192.168.1.0 12.1.1.1 0 32768 ?
【2】RIPV2
CE端正常启动和配置RIPV2
PE端配置:
r2(config)#router rip
r2(config-router)#version 2
r2(config-router)#no auto-summary
r2(config-router)#address-family ipv4 vrf openlabxian
r2(config-router-af)#network 12.0.0.0
r2(config-router-af)#redistribute bgp 1 metric 1
r2(config)#router bgp 1
r2(config-router)#address-family ipv4 vrf openlabxian
r2(config-router-af)#redistribute rip
【3】EIGRP
CE端正常配置EIGRP协议
PE端配置:
r4(config)#router eigrp 1 启动时,需要使用本地真实的AS号
r4(config-router)#no auto-summary
r4(config-router)#address-family ipv4 vrf openlabwu
r4(config-router-af)#autonomous-system 90 在VRF内建邻时告知CE端所使用AS号
r4(config-router-af)#network 45.0.0.0
r4(config-router-af)#redistribute bgp 1 metric 1544 100 255 1 1500
r4(config)#router bgp 1
r4(config-router)#address-family ipv4 vrf openlabwu
r4(config-router-af)#redistribute eigrp 90 导入时使用私有AS号
【4】OSPF
CE端正常配置
PE端
r2(config)#router ospf 1 vrf openlabxian
r2(config-router)#router-id 2.2.2.2
r2(config-router)#network 12.1.1.2 0.0.0.0 a 0
r2(config-router)#redistribute bgp 1 subnets
r2(config-router)#exit
r2(config)#router bgp 1
r2(config-router)#address-family ipv4 vrf openlabxian
r2(config-router-af)#redistribute ospf 1
注:若两端的PE上实施不同的OSPF虚拟进程号,那么路由条目显示5类学习;
若两端均为OSPFI协议,且虚拟进程号相同,那么路由条目为1类、3类
Show ip bgp vpnv4 all summaryv展示vpnv4的邻居
先在全局下 MPLS label rang 100 199 控制标签范围
华为
- isp
- ip可达
- 建立bgp邻居关系
- 启用mp-bgp 也就是mpls
- bgp传递社团属性
[r2]bgp 100
[r2-bgp]ipv4-family vpnv4
[r2-bgp-af-vpnv4]peer 4.4.4.4 enable
[r2-bgp-af-vpnv4]peer 4.4.4.4 next-hop-local
- 在pe上创建虚拟空间
[r2]ip vpn-instance 1
[r2-vpn-instance-1]route-distinguisher 1:1
[r2-vpn-instance-1-af-ipv4]vpn-target 1:1 export-extcommunity
EVT Assignment result:
Info: VPN-Target assignment is successful.
[r2-vpn-instance-1-af-ipv4]vpn-target 2:2 import-extcommunity
IVT Assignment result:
Info: VPN-Target assignment is successful.
绑定在连接ce的接口
[r2]interface g0/0/0
[r2-GigabitEthernet0/0/0]undo ip address
[r2-GigabitEthernet0/0/0]ip binding vpn-instance 1
[r2-GigabitEthernet0/0/0]ip address 12.1.1.2 24
pe上进行rip宣告
[r2]rip 1 vpn-instance 1
[r2-rip-1]verify-source 2
[r2-rip-1]version 2
[r2-rip-1]network 12.0.0.0
在ce端正常启动rip
ospf
[r4]ospf 2 vpn-instance 2
[r4-ospf-2]area 0
[r4-ospf-2-area-0.0.0.0]network 45.1.1.1 0.0.0.0
双向重发布
[r2]bgp 100
[r2-bgp]ipv4-family vpn-instance 1
[r2-bgp-1]import-route rip 1
[r2]rip 1 vpn-instance 1
[r2-rip-1]version 2
[r2-rip-1]network 12.0.0.0
[r2-rip-1]import-route bgp