mpls
- MPLS:多协议标签交换——ISP使用
交换方式:
- 包交换:依赖报文中的ip地址进行数据转发
- 标签交换:基于2.5层的标签号进行数据转发
- MPLS—多协议—无论网络层运行何种协议,2.5均可运行标签交换
当下的主要应用:
- 解决BGP的路由黑洞问题
- MPLS VPN
- MPLS TE(流量工程)
- 使用MPLS的前提是设备基于CEF工作:(CEF是思科全新的路由交换技术)
- 启动CEF后,表格可以被ASIC(硬件芯片)直接调用
- CEF解决了递归的问题,便于MPLS生成标签转发表格
- CEF工作后生成FIB表,只有FIB可以存储标签表
控制层面:交互路由信息(路由协议收敛);进行标签号的分发;
数据层面:根据路由表转发用户数据报文;基于标签号进行数据转发,压入标签、弹出标签;
-
控制层面:通过IGP或EGP交互路由条目,生成路由表,然后CEF基于路由表生成FIB表;MPLS使用TDP/LDP基于FIB表中的每一条信息(本地所有的路由条目)生成一个标签号,然后告知所有邻居;
RIB->CEF ——>标签绑定表 NEFIB(下一跳转发表) MIB
NEFIB 解决黑洞问题本质上bgp路由表中的下一跳会被分配给更新源的LSP,在通过bgp转发数据时,bgp更新源的下一跳会分配到一个tunnel id该tunnel id与更新源的LSP tunnel id一致。
例如去b要走3,然后就会查询tunnel id ,查完tunnel id 会匹配LSP的tunnel id。
该工作完成后路由器上生成:
0)路由表
1)FIB表—转信息数据库= CEF基于路由表生成
2)LIB表—标签信息数据库(本地和邻居关于所有学习到的路由条目生成的标签号)
3)LFIB表–标签转发信息数据库----将FIB表和LIB进行结合 -
数据层面:普通的数据包将基于FIB表转发;若数据包中存在标签号基于LFIB进行转发;标签的压入和弹出也是在数据层面完成的;
标签转发表 LFIB LIB
LFIB是执行数据的弹标签(pop),压标签(push)
LIB是执行数据的交换标签(swap)
MPLS中LSP是通过短而定长的字段判断,从而实现
标签的压入可以压入多层,标签可以通过判断栈底位1,0判断是否普为栈底。
标签分配思科默认从16开始,0-15为特殊标签。其中1为隐式空标签。
例如:3标签的下一跳弹出机制:当在本地发现有C(链路层自发发现路由)路由,就会为该路由分配一个固定为1的隐式空标签,当该标签被传递给邻居路由器时,该路由会为交换到该标签的数据从接口发出时弹出标签3 这个机制打破了为每一个FEC分配一个不同的标签。该机制大大的加快了MPLS的转发效率。
-
MPLS的数据封装于2层和3层间,故称为2.5层
-
MPLS的数据包格式:
前20位为标签号:存在2^20个号码,其中0-15号保留;
21-23位为8个优先级,用于QOS;
25-32位TTL----当标签号被压入时,将复制3层报头的TTL值,然后每经过一个路由器减1,当标签号弹出时,复制回IP报头中;
第24位为栈底位—为1标示本信息为最后一层标签信息;最多可以存在3层标签;
一层标签为普通MPLS,主要用于解决BGP的路由黑洞;
二层标签为MPLS VPN使用;
三层标签为MPLS TE使用;
使用MPLS后,二层若依然为以太网封装,那么类型号将变化:
0x8847 MPLS单播
0x8848 MPLS 多播 -
名词注解:
- MPLS domain–MPLS工作的范围
- LSR(P路由器):标签交换路由器 查看数据包中的标签号然后基于LFIB表进行转发
- Edge LSR(PE路由器):边界标签路由器;在数据层面时,MPLS 域的第一跳路由器负责标签的压入,最后一跳负载弹出;
- CE 客户端路由器,不工作于MPLS域,使用FIB表转发流量;
- FEC等价转发类 LSR为每一个前缀生成一条LSP(标签转发路径)
LSP是一种单向隧道,MPLS隧道必须要在双向都建立
- MPLS的工作过程:
当控制层面使用路由协议传递路由条目后,路由器上使用TDP/LDP为本地FIB表中每一条存在的路由条目均分配一个标签号,装载于LIB表中,同时传递给邻居,LIB中还记录邻居传递到本地标签号;之后路由器基于本地的FIB和LIB表生成LFIB—标签转发表—标签号的最佳路径对应;
数据层面工作时,第一跳路由器负责标签的压入,中间路由器基于标签号转发流量,进行标签号的替换,最后一跳路由器负责标签的弹出;
注:入标签号为本地分配的标号,出标签为下一跳(下游)分配的标签号;
存在上下游路由器概念,基于数据层面定义;
路由表的控制层面和数据层面
- 路由选择部分也叫做控制平面(软件),其核心构建时路由选择处理机
分组转发部分也叫做数据平面(硬件),核心是硬件处理芯片和交换结构。 - 数据在转发时不查路由表,查的是转发表。转发表是通过路由表生成的。
- 路由表与转发表
这里的表都是用来保存路由信息,路由通常由路由协议和路由管理模块维护,包括更多的信息(IP地址/IP子网、下一跳、路由度量、超时时间等);转发表是基于路由表产生的,路由器实际转发时使用转发表(只包括IP地址/IP子网和下一跳/出接口);高性能路由器转发表通常都用硬件来实现,有利于高速查找。 - 一次路由,多次交换
转发表从路由器处理器下发至接口线卡缓存,一次查表多次路由,接口种类多,配置灵活;该体系结构的路由器主要是数据在第一次到达时生成转发表,然后将转发表从路由处理器下发到接口线卡缓存,一次查表多次路由,这种结果一定程度上释放了路由器处理器使得其有限次参于路由的转发,但是在路由状况不断变化的环境中,ip路由表的改变会使得转发表无效,线卡缓存需要不断从路由处理器中同步转发表,性能优势会收到很大的限制。
配置
-
单播路由协议 --路由表
-
CEF —FIB
-
(可选,建议配置)–修改MTU值; 链路两端一致;
普通MPLS–1504 MPLS VPN–1508 MPLS TE-1512
r1(config)#interface s1/1
r1(config-if)#mtu ?
<64-17940> MTU size in bytes 修改接口MTU值 -
开启MPLS ----在标签号所有需要经过的接口上配置
r2(config)#interface s1/1
r2(config-if)#mpls ip 开启某个接口的MPLS协议
-
MPLS协议在工作时,存在两种封装:
1、TDP cisco私有 TCP/UDP 711 hello包基于UDP传输,标签信息基于TCP传输
2、LDP 公有 TCP/UDP 646 hello包基于UDP传输,标签信息基于TCP传输
Cisco ios 版本12.4(3)以下设备默认使用TDP,以上使用LDP; -
r2(config)#mpls label protocol ? 修改封装协议
ldp Use LDP
tdp Use TDP (default) -
协议开启后,邻居间使用hello包建立邻居关系,生成邻居表:
r2#show mpls ldp neighbor 存在RID,RID的选举规则同OSPF一致
注:RID同时作为了建立TCP会话的源目ip地址;若存在环回,那么默认使用环回作为RID,此时就必须将环回宣告到路由协议中–必须可达;
r2(config)#mpls ldp router-id serial 1/1 ? 修改RID为S1/1口的地址
force Forcibly change the LDP router id 立即生效
重启设备后生效 -
当邻居关系建立后,邻居间会将基于FIB表生成的标签号传递给邻居,保存于LIB表中:
r2#show ip cef detail 查看FIB表
r2#show mpls ldp bindings 查看LIB表
-
之后将LIB表和FIB表进行结合,生成LFIB表,基于该表格进行标签流量转发;
r2#show mpls forwarding-table
VRF
- 虚拟路由转发
- 虚拟化路由引起的技术,用VRF分割路由表
- RD:区分 VRF 给进入 VRF 路一个 X:X RD 的标识,在一个路由器有效,本地参数
- RT:router-target 分为 import RT 与 export RT 区分在不同路由器上的 VRF 路由,import 觉定接收那些 VRF RT 标识的路,export 决定发出那些 VRF RT 标识的路由。全局参数
- RD 与 RT 的 export RT 值都是传递的
- RT 入方向可以存在多个值,可以接收多个 VRF 的路由
- RT 出方向只能存在一个值
- MPLS 标签分配范围:MPLS label range 100 199
- 查看双标签:show ip cef vrf x y.y.y.y/24
(带 V 标识该路由由 VPNV4 传递) - Show ip cef 查看 CEF 表
Show ip bgp vpnv4 all 查看 VPNV4 所有路由
show mpls forwarding-table 查看 CEF 的标记
Router ospf 1 vrf a //跑在vrf里的ospf
Router eigrp 100 //进程号 vrf跑eigrp
Address-family ipv4 vrf b autonomous-system 1 //as号
- 全局和VRF通信
- 用静态
Vrf->全局 ip route x.x.x.x x.x.x.x 下一跳 global
全局-> ip route x.x.x.x x.x.x.x 出接口 - 用tunnel
tunnel中可以使用tunnel vrf x 可以使得tunnel的出接口用vrf的接口。也就是说隧道可以在全局路由表,而出接口可以是使用vrf接口。
- 远端VRF之间如何通信
控制平面:
- 路由传递
CE-PE_VRF通过路由协议邻居之间传递
PE-VRF内部IGP-VRF重发布到BGP-VRF以及BGP-VRF重发布到IGP-VRF或者BGP-VRF的邻居传递
PE-PE之间BGP VPNV4邻居关系
PE_VRF——PE_VRF之间有BGP vpnv4分配,vpnv4邻居传递 - 数据平面
形成MPLS转发 表双标签转发
内层标签由bgp-vpnv4分配,决定去往哪个vrf
外层标签由idp分配,决定去哪个PE
- 控制平面所需表
- 数据平面最终执行表
- bgp的vpnv4所需传递的必要参数:
- 路由前缀
- RD
- route-tagert export
- Lable
附: