文章目录
CCNP9:MPLS 虚拟网络专线 的【原理、配置】、MPLS的【原理、优化、配置】、MPLS解决BGP路由黑洞
一、MPLS(多协议标签交换):
我们之前说过一个AS内部在运行BGP协议时,如果有AS没有运行BGP协议,那么该设备的存在就会导致路由黑洞,因为在数据层面它没有路由。
为了更好的解决路由黑洞,我们就使用这个技术:MPLS
1、早期的MPLS:
有关名词:
包交换:依赖报文中的IP地址进行数据转发(基于3层IP地址进行路由)。
标签交换:在二层与三层的中间,人为的添加一个2.5层出来。之后路由器查看不再使用3层,而是基于2.5层进行转发(基于2.5层标签号路由)
在没有CEF技术的时候,假设当要去往1.1.1.0/24这个网段,它的标签号是17,去这个网段的出接口为F0/0,源、目MAC分别是X、Y。这些都需要MPLS自己解决,需要看路由器的路由表、ARP表,
早期的MPLS最初的意义是让中间的设备仅仅在于查一张表,这样能够相对较快,随着CPU的运算能力的不断提升,包交换方式从原始到传统(一次路由多次交换)、到最后的CEF快速的数据交换方式出现,MPLS在速度方面的优势已经完全没有了,几年之后它就在这方面被淘汰了。
但至于今天MPLS不但保留而且非常流行的原因是:MPLS在有些方面是不可以被替代的,它有以下主要应用:
①解决BGP的路由黑洞,运营商首先要考虑。
②实现MPLS 虚拟网络专线,它是所有 虚拟网络专线中最接近于专线的。
③做MPLS TE 流量工程
2、相关理论:
(1)现在的MPLS使用的前提是设备基于CEF工作:
是因为CEF有以下作用:
①启动CEF后,表格(二进制数)可以被ASIC(硬件芯片)直接调用
②CEF解决了递归问题,便于MPLS生成标签转发表格。
③CEF工作后生成FIB表,只有FIB可以存储标签表。
(2)控制层面:
这个我会一会儿详细的讲,现在只有脑海中留个印象就可以了。
用于交互路由信息(路由协议收敛),进行标签号的分发,就是为相应的路由分对应的标签。
(3)数据层面:
根据路由表转发用户数据报文,基于标签号进行数据转发,压入标签、弹出标签。
3、MPLS的基本工作原理:
(1)控制层面:
R4把去往B的路由给R3时(或者我们可以理解为通过IGP/EGP交互路由条目时),R3首先生成路由表,路由表生成之后就会生成ARP表。
接着CEF基于路由表解决了递归问题生成FIB表。然后 TDP(私有)/LDP(公有)基于CEF表格中的每一个目标网络号生成标签号,进而形成一张表格LIB表,最后将FIB表和LIB表相结合生成LFIB表。
总结一下这些表:
表 | 注解 |
---|---|
路由表 | 通过交互获取路由条目时,首先生成。 |
FIB表 | 转发信息数据库,这个一般情况下就有,由CEF基于路由表并解决递归生成。 |
LIB表 | 标签信息数据库(本地和邻居关于所有学习到的路由条目生成的标签号) |
LFIB表 | 标签转发信息数据库(LFIB=FIB+LIB),包含目标网络号、标签号、出接口、[源、目]MAC。 |
但是上面的FIB表不完整,我们知道R3会把去往B网段的路由还会发给R2,同理R2也会建立一张LFIB表,R2对于该网段也会生成一个标签,这里假设为20。
(2)数据层面:
那么对于完整的LFIB表来说,去往某网段,还应该包括进来的标签号,替换的标签号,出接口,新的源、目MAC。
例:R3的LFIB里记录了去1.1.1.0网段时,进来的标签号为20,出去替换的标签号为27,出接口,以及出接口的新的源、目MAC
这张图是A访问B的时候:
这样子做,R2、R3就比较省事只用查一张表,R1、R4是查两张表。
(3)MPLS工作过程总结:
当控制层面使用路由协议传递路由条目后,路由器上使用TDP/LDP为本地FIB表中每一条存在的路由条目均分配一个标签号,装载于LIB表中,同时传递给邻居。
LIB中还记录邻居传递到本地标签号,之后路由器基于本地FIB和LIB表生成LFIB(标签转发信息数据库——记录标签号的最佳路径对应关系)
数据层面工作时,第一跳路由器负责标签的压入,中间路由器基于标签号转发流量,进行标签号的替换,最后一跳路由器负责标签的弹出。
注:入标签号为本地分配的标号,出标签为下一跳(下游)分配的标签号。基于数据层面定义,存在上下游路由器概念。
4、MPLS细化:
(1)MPLS的数据封装:
MPLS的数据封装与2层和3层之间,故称为2.5层。
(2)MPLS的数据包格式:
下面这部分就是打进去的东西,总长度为32位(4个字节)。
位数 | 名字 | 作用 |
---|---|---|
0-19 | Label 标签号 |
存在2^20个号码,其中0-15号保留,一个标签号对应一条路由。 |
20-22 | EXP 优先级 |
存在2^3=8个优先级,用于QOS |
23 | S 栈底位 |
为1标识本信息为最后一层标签信息,最多可以存在3层标签 |
24-31 | TTL 生存时间 |
当标签号被压入时,将复制3层报头的TTL值,然后每经过一个路由器减1,当标签号弹出时,将现在TTL的标签号复制回 IP 报头中。 |
一层标签为普通MPLS,主要用于解决BGP的路由黑洞。
二层标签为MPLS 虚拟网络专线使用。
三层标签为MPLS TE 使用。
使用MPLS后,二层若依然为以太网封装,那么类型号将变化:
0x8847 MPLS单播
0x8848 MPLS多播
5、有关MPLS名词注解:
名词 | 注解 |
---|---|
MPLS domain | MPLS工作的范围 |
LSR (P路由器) |
标签交换路由器,查看数据包的标签号,然后基于LFIB表进行转发 |
Edge LSR (PE路由器) |
边界标签路由器,在数据层面时:MPLS域的第一跳路由器负责标签的压入,最后一跳负责弹出。 |
CE 客户端路由器 |
不工作于MPLS域,使用FIB表转发流量。 |
二、MPLS的优化(次末跳):
MPLS的优化,又叫做PHP的次末跳(次末跳:倒数第二跳),默认执行。
最后一跳路由器,在默认情况下需要查看LFIB表后再查看FIB表(由于最后一跳路由器在LFIB表中确实找不到下一跳了,因此它需要弹标签,弹完标签后就会查FIB表)
之后再转发数据,PHP次末跳可以使倒数第二跳在已知出接口、下一跳等信息时便将标签号弹出,然后基于出接口转发流量。导致最后一跳路由器发现没有标签了,那么它就仅查看FIB表。
最后一跳路由器,将本地直连路由传递给邻居时使用标号3来告知对方为倒数第二跳。
非直连路由正常分配标签号,针对域外的非直连路由,域内的最后一跳路由器需要查询两张表。因此建议PE路由器直接连接用户,不再连接其他路由器。
标识 | 注解 |
---|---|
pop | 标识仅弹出最上层标签,仅仅只是倒数第二跳(PHP的另一种解释) |
untagged | 弹出所有标签,意味离开了MPLS domain。 |
三、MPLS的配置:
1、首先要有路由
2、Cisco默认开启CEF:
R2(config)#ip cef
3、修改MTU,链路两端需一致(可选,建议配置),凡是标签涉及到的接口建议都配置MTU:
MPLS | 建议MTU |
---|---|