当前位置 博文首页 > HUGO-42078367的博客:详谈-MPLS的基础和工作原理

    HUGO-42078367的博客:详谈-MPLS的基础和工作原理

    作者:[db:作者] 时间:2021-08-13 22:14

    MPLS==.>(Multple Protocol Label Switching)多协议标签交换---ISP使用

    以前的路由器需要1.查询路由表--要知道从哪个接口出去,

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2.查询 ARP表 可以知道要打上什么mac地址

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 这样来看路由器的工作效率有点低,于是就出现MPLS的初期设计??????????

    ?

    ? ? ? ? 将 R1,R2,R3,R4设定在一个 MPLS 域 。A-->B,首先进入到R1,R1给路由打上标签,比如说是17吧。然后到了R2上后,R2查询本地的LFIB 表(标签转发信息数据库表)得到去B,从F0/0 出去,在换上mac地址(X:D)。再次进入到R3上同样查询 本地的LFIB表,得到去B,从F0/0出去,换上mac地址(Z:D).之后进入R4上,去掉17号标签,从F0/0C出去,换上Mac地址(Y:D)

    注意:在当时年代下,这种提速是相对的,(R1 R4 的负担加重了,需要打标签,去标签),R2 R3 稍微轻松点。还有这种做法使 包的长度变长了。

    ?

    原始数据交换方式:

    以前的路由器需要1.查询路由表知道从哪个接口出去,

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2.查询 ARP表 可以知道要打上什么mac地址

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?这样来看路由器的工作效率有点低,

    传统数据交换方式:一次路由,多次交换---(第一次数据包查两张表,查完后,生成? cache(相当于记录),后面的包 基于查询 cache转发)

    ?

    CEF-快速转发:无需路由,直接交换---FIB +ADJ

    随着这些转发方式的提高,MPLS 没有市场前景,大部分被 out了

    ?

    MPLS起死回生的原因:

    ? ? ? ?1.解决BGP的路由黑洞问题

    ? ? ? ?2.MPLS VPN是 最接近于专线的

    ? ? ? ? 3.MPLS TE(流量工程)

    ?

    PDU--协议数据单元

    包交换:依赖报文中的IP地址进行数据转发

    标签交换:基于2.5层的标签号进行数据转发;

    MPLS---多协议---无论网络层运行何种协议,2.5均可运行标签交换;

    ?

    使用MPLS的前提是设备基于CEF工作==>寓意着 MPLS也升级了,以前的MPLS 跟 CEF 是相互矛盾的

    1. 启动CEF后,表格可以被ASIC(硬件芯片)直接调用。因为CEF表格是 纯二进制 表格
    2. CEF解决了递归的问题,便于MPLS生成标签转发表格
    3. CEF工作后生成FIB表,只有FIB可以存储标签表;

    ?

    控制层面:交互路由信息(路由协议收敛);进行标签号的分发;

    数据层面:根据路由表转发用户数据报文;基于标签号进行数据转发,压入标签、弹出标签;

    ?

    控制层面:通过IGP或EGP交互路由条目,生成路由表,然后CEF基于路由表生成FIB表;MPLS使用TDP(思科 私有)/LDP(共有)基于FIB表中的每一条信息(本地所有的路由条目)生成一个标签号,然后告知所有邻居;

    该工作完成后路由器上生成:

    1.路由表

    2.FIB表---转发(forward)信息数据库== ?CEF基于路由表生成,主要是解决递归查找

    3.LIB表---标签信息数据库(本地和邻居关于所有学习到的路由条目生成的标签号)

    4.LFIB表--标签转发信息数据库----将FIB表和LIB进行结合

    ?

    老版MPLS 自己来基于路由 生成标签表

    新版的MPLS 基于CEF ,自己省事多了

    ?

    ?

    ?

    数据层面:普通的数据包将基于FIB表转发;

    ? ? ? ? ? ? ? ? ? ?若数据包中存在标签号基于LFIB进行转发;标签的压入和弹出也是在数据层面完成的;

    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 多播

    ?

    名词注解:

    ?

    1. MPLS domain--MPLS工作的范围
    2. LSR(P路由器):标签交换路由器? 查看数据包中的标签号然后基于LFIB表进行转发
    3. Edge LSR(PE路由器):边界标签路由器;在数据层面时,MPLS 域的第一跳路由器负责标签的压入,最后一跳负载弹出;
    4. CE 客户端路由器,不工作于MPLS域,使用FIB表转发流量;

    MPLS的工作过程:

    数据层面:

    ?

    ?

    1.?MPLS协议--TDP/ LDP 先建立邻居关系-生成邻居表

    2.当控制层面使用路由协议传递路由条目后,

    3.路由器上使用TDP/LDP为本地FIB表中每一条存在的路由条目均分配一个标签号,

    4.同时将标签号传递给给所有邻居,装载于LIB表中--记录着本地 及邻居分配的 所有号码标签

    5.之后TDP/LDP 基于本地的FIB和LIB表生成LFIB---标签转发表---标签号的最佳路径对应;包含着 入标签--对应的出标签--下一跳--- 源 目mac

    ?

    数据层面工作时,1.第一跳路由器负责标签的压入,

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2.中间路由器基于标签号转发流量,进行标签号的替换,

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 3.最后一跳路由器负责标签的弹出;

    注:入标签号为本地分配的标号,出标签为下一跳(下游)分配的标签号;

    ? ? ? ? ?存在上下游路由器概念,基于数据层面定义;

    ?

    MPLS的优化: PHP次末跳 -----倒数第二跳;默认执行

    ?未优化的情况下:

    ?

    ????这个小问题出现在最后一条路由器上,当收到路由后,此时会把标签给弹掉,但是弹掉之后没有该干什么呢?自己本身不知道,于是又去查询路由表,得到是怎么走,然后在转发!!(这个就相当于 最后的路由器 必须查询两张表---先查标签,在查路由表)

    有优化的:

    ?

    ?优化之后,就可以在倒数第二跳路由器上就把标签给弹掉了,最后一台路由器直接查询 FIB 就可以知道从哪出去!!!

    ?

    最后一跳路由器在默认情况下:1.需要查看LFIB表

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2.后再查看FIB表,然后转发数据;

    PHP可以使倒数第二跳在已知出接口、下一跳等信息时便将标签号弹出,然后基于出接口转发流量;导致最后一跳路由器仅查看FIB表;

    ?

    最后一跳路由器,将本地直连路由传递给邻居时使用标号3来告知对方为倒数第二跳;

    非直连路由正常分配标签号;针对域外的非直连路由,域内的最后一跳路由器需要查询两张表;建议PE路由器直接连接用户,不再连接其他路由器;

    ?注:pop 标示仅弹出最上层标签---仅仅只是倒数第二跳;

    ??????? untagged 弹出所有标签---意味了离开MPLS domain;

    ?

    配置:

    ?

    1. 单播路由协议? --路由表
    2. CEF????????? ---FIB
    3. (可选,建议配置)--修改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值

    ?

    1. 开启MPLS ----在标签号所有需要经过的接口上配置

    ? ? ? ? ? ? ? ? r2(config)#interface s1/1

    ? ? ? ? ? ? ? ? ?r2(config-if)#mpls ip? 开启某个接口的MPLS协议

    ?

    ? ? ? ? ? ? ?当命令一敲完,TDP/LDP 就开始工作了

    ? ? ? ? ? ? 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 ?? 修改封装协议

    ?

    ?

    协议开启后,邻居间使用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?? 立即生效

    ? <cr>???????????????????????????????? 重启设备后生效

    ?

    当邻居关系建立后,邻居间会将基于FIB表生成的标签号传递给邻居,保存于LIB表中:

    r2#show ip cef detail? 查看FIB表

    r2#show mpls ldp bindings 查看LIB表

    之后将LIB表和FIB表进行结合,生成LFIB表,基于该表格进行标签流量转发;

    ?

    r2#show mpls forwarding-table

    ?

    在R1没有基于标签转发,因此就没show 出来:

    ?

    ?

    在R2上show 就可以

    ?

    ?

    cs
    下一篇:没有了