首页 > 其他分享 >HCIP笔记10-MPLS(1)

HCIP笔记10-MPLS(1)

时间:2024-08-27 22:57:02浏览次数:14  
标签:10 标签 MPLS FIB 转发 HCIP 路由 路由器

MPLS:多协议标签交换

多协议:可以基于多种不同的3层协议来生成2.5层的标签信息;

包交换--包为网络层的PDU,故包交换是基于IP地址进行数据转发;就是路由器的路由行为;原始的包交换:数据包进入路由器后,路由器需要查询本地的路由表(RIB-路由信息数据库),再基于下一跳或者目标ip查询本地的ARP表,才能进行数据的转发;

快速的包交换:一次路由多次交换;每个数据流中的第一个包将被基于原始包交换规则转发; 过程中生成缓存列表,记录整个通讯过程,该数据流量剩余数据包仅查询缓存记录即可;

特快的包交换:无需路由,直接交换;CEF---cisco特快交换,为cisco私有技术;非cisco厂商设备均存在和cisco转发机制相同的技术;

路由表、ARP表(记录IP地址和MAC地址的对应关系) --转换为FIB(转发信息数据库)表  流量转发过程中仅查询FIB表即可;

FIB的特点:在将路由器表转换过程中,存储递归查询结果;同时将新封装的二层地址进行绑定;

标签交换:数据包在进入到MPLS的域内后,将在第2层和第3层中间压入标签号,使得域内的路由器在转发该数据包时,基于2.5层的标签号仅需要查询本地的一张LFIB表(标签转发信息数据库);

最初在包交换仅支持原始交换时,标签的意义在于更快的查询,但随着包交换的加速,使用标签交换失去了快速查表的优势;

当下MPLS存在的意义:

1.解决BGP的路由黑洞问题  2.MPLS VPN   3.MPLS TE 流量工程

另外,随着包交换的加速,使得今天的MPLS技术也开始基于FIB表工作,来提高MPLS的工作效率;

一.工作过程

控制层面:路由协议工作,生成RIB-FIB,流量的方向即为控制流量;

数据层面:设备基于路由表访问目标,产生数据流量,与控制层面方向相反;

控制层面:

1)在没有MPLS时控制层面仅生成RIB(路由表)和FIB(转发信息数据库);FIB是基于RIB生成;

2)MPLS协议会启动TDP(cisco私有)或LDP(公有),直连设备间将建立邻居关系;

LDP--基于UDP和TCP的646端口工作;先使用udp发送组播hello包发现邻居,获取邻居IP地址,再和直连邻居建立TCP会话;邻居关系建立后;为了邻居关系的稳定,一般使用设备的环回地址来建立tcp会话;建议设置回环地址为mpls协议的router-id,该id值将携带在组播收发的hello报文中,自动进行tcp会话建立;

总结:MPLS协议需要在直连邻居间使用router-id地址来进行TCP的会话;故前提条件为:router-id必须为设备真实使用的IP地址,建议为环回地址(稳定);组播hello包在直连的物理接口上收发,来获取对端的router-id,自然也要求router-id值间路由可达;

因此正常在建立LDP的邻居关系前,路由协议已经收敛完成,RIB和FIB表已经生成;

3)MPLS在建立邻居关系后,生成邻居表;LDP协议再基于FIB表中学习到的路由条目生成标签号;

cisco设备默认基于FIB表中所有学习到的路由条目生成标签号,华为设备默认仅基于FIB表中32位掩码的主机路由生成标签号;原因在于正常32位主机路由为ospf学习的环回接口, 正常工程中只有BGP和MPLS VPN才会基于环回通讯,使用标签转发;其他普通流量还是基于特快包交换来进行;反观cisco在启动mpls以后,所有流量将基于标签转发,降低了转发效率(前提为默认)

4)标签号生成后,将存储于本地的LIB表--标签信息数据库;LIB表将在邻居间共享;

LIB表中装载本地及邻居为每条路由分发的标签号;

5)运行MPLS协议的设备,将LIB和FIB进行结合,将标签号和最佳路径的关系映射生成LFIB表 (标签转发信息数据库)

6)注:控制层面生成的表格

RIB—》FIB---》LIB---》LFIB  前两张表为路由协议工作后生成, 后两张表为MPLS 的LDP 协议生成;

数据层面:

1)没有MPLS协议,基于FIB表正常转发即可

2)名词:

MPLS domain -- MPLS的工作半径  

edge LSR (PE) --边界标签交换路由器 工作mpls域的边缘,连接域外设备

LSR (P) -- 标签交换路由器 整体工作MPLS域内

  1. 当流量进入到第一台pe设备时,在没有特快交换之前,路由器基于目标IP地址查询本地的RIB;之后还要在LIB表中对应才能确定流量是否应该压入标签,需要两张表的查询;

在存在特快交换时,流量进入第一pe时,直接查询FIB表,表中关联标签号,将直接确定是否压入标签:流量再到P路由器,接收到流量中若存在标签基于LFIB 表转发,若没有标签基于FIB表即可;流量从最后一台边界离开MPLS域时将弹出标签;

存在标签号的流量,进入路由器时,入标签表应该为本地路由器分配的编号,出标签为本地的下游 (下一跳) 设备分配的标签号; 上下游的概念基于数据层面进行标定;

二、标签号

标签被压入再2层和3层之间,称为2.5层

标签的格式---32位 4个字节

前20位是标签号,2^20个标签号;其中1-15号保留,作为特殊标签号;

第21-23位exp, 3位8个数,为优先级,用于QOS策略使用;

第24位为栈底位,该位为1标识该标签为最后一层标签;MPLS 最大可以在一个数据包中封装3次标签;

普通的MPLS 一层标签      MPLS VPN 两层          MPLS TE 3层

TTL 生存时间 在第一次压入标签时,将当前数据包中的3层TTL复制到标签中:之后查询一次标签 TTL  减一,在最后一跳设备弹出标签时将2.5层的TTL 复制到3层报头中;

三、MPLS 的次末跳 - 倒数第二跳 默认执行

边界LSR将本地的直连网段传递给MPLS域内邻居后,LDP分配标签号为3,告知倒数第二跳设备它的身份,导致倒数第二跳设备在查询LFIB表后,已知转发路径的前提下提前弹出标签,使得最后一跳路由器只需要查询FIB表;否则最后一跳路由器在查询LFIB表后,弹出标签后还需要查询FIB表;

标签:10,标签,MPLS,FIB,转发,HCIP,路由,路由器
From: https://blog.csdn.net/2301_81411842/article/details/141614540

相关文章

  • 【Leetcode_Hot100】普通数组
    普通数组53.最大子数组和56.合并区间189.轮转数组238.除自身以外数组的乘积41.缺失的第一个正数53.最大子数组和方法一:暴力解依次遍历数组中的每个子数组,进而判断res的最大值超时classSolution{publicintmaxSubArray(int[]nums){intres=0;......
  • 从混乱到有序:10款建筑项目管理软件推荐
    国内外主流的10款建筑企业项目管理系统对比:PingCode、Worktile、广联达、泛普软件、建文软件、Asana、Trello、Basecamp、Jira、Monday.com。在建筑行业,找到一个能够高效管理时间、成本和资源的项目管理系统常常是一项挑战。这种系统的选择不仅影响项目的流程和效率,还直接关......
  • stm32f103c8t6 程序编译后的 Program Size: Code=xxx RO-data=xxx RW-data=xxx ZI-dat
            之前在裸机跑一些简单的项目内存完全够用,就不会涉及到内存方面的问题。最近在学FreeRTOS时,将大容量的stm32f103rct6代码移植到小容量的stm32f103c8t6上时,就遇到了内存不足的问题,所以才注意到这些东西。    那么在我们编译后看到的这些东西到底......
  • Java10 集合
    集合集合集合接口等级:Collection:单例集合接口,将数据一个一个存储,存储的是值。ArrayList类:泛型集合Linkedlist集合:Vector集合:Stack集合:Vetor的子类Set接口:存储是无序的,且集合中的元素不可重复Hashset集合:Linkedhashset:是有序不重复的set集合,继承于hashsetTreeset:排序,去......
  • MySQL 2003 - Can’t connect to MySQL server on ' '(10060)
    2003-Can’tconnecttoMySQLserveron''(10060) 一般是以下几个原因造成的:1.网络不通畅2.mysql服务未启动3.防火墙未开放端口4##云服务器的安全组规则未设置  一般是以下几个原因造成的:1.网络不通畅:【mysql-u-p,看看能不能登陆】2.mysql服务未启动:......
  • Vue3的学习---10
    10.Vuex10.1Vuex简介10.1.1Vuex概述Vuex是Vue.js应用程序的状态管理模式+库。它作为中央存储库,用于管理应用程序中所有组件的状态,并以可预测的方式进行状态变更。Vuex的设计理念是基于Flux架构,主要由以下几个核心概念组成:State(状态):存储应用程序的所有状态数据。......
  • L1-104 九宫格 分数 20
    #include<bits/stdc++.h>usingnamespacestd;intarr[10][10];intmain(){intn;cin>>n;for(intt=1;t<=n;++t){for(intj=1;j<=9;++j)for(intk=1;k<=9;++k) cin......
  • L1-103 整数的持续性 分数 20
    #include<bits/stdc++.h>usingnamespacestd;#defineintlonglongintfunc(intn){intres=0;while(n>=10){inta=n;vector<int>num;while(a){num.push_back(a%10);......
  • 给自己复盘用的tjxt笔记day10
    领取优惠券开发流程页面原型分析,接口统计,数据库设计,生成代码,引入枚举状态接口开发查询发放中的优惠券根据页面原型和接口分析和前端设计的要求,获得四要素@OverridepublicList<CouponVO>queryIssuingCoupons(){//1.查询发放中的优惠券列表List<Coupon>......
  • 【29期】Java集合框架 10 连问,你有被问过吗?
    1.HashMap和HashTable的区别?HashMap不是线程安全的HashMap是map接口的实现类,是将键映射到值的对象,其中键和值都是对象,并且不能包含重复键,但可以包含重复值。HashMap允许nullkey和nullvalue,而HashTable不允许。HashTable是线程安全CollectionHashMap是HashTa......