HCIP- ICT实战进阶ex1-MPLS

科技资讯 投稿 8600 0 评论

HCIP- ICT实战进阶ex1-MPLS

HCIP- ICT实战进阶ex1-MPLS

0 前言

在早年设备性能低下的时期, 路由表查询速度不高导致转发性能低下, 旨在提高路由器转发速度的MPLS(Multi-Protocol Label Switching, 多协议标签交换)被提出, 与传统IP路由方式相比, MPLS在数据转发时, 只在网络边缘分析IP报头, 在网络内部采用更为高效的标签(Label)转发, 节约了处理时间。

VPN(Virtual Private Network, 虚拟私有网络)、流量工程、QoS(Quality of Service, 服务质量)等新兴应用中得到青睐. 同样, MPLS也是医治BGP黑洞的一剂良药。

1 MPLS概述

MPLS(Multi-Protocol Label Switching, 多协议标签交换)是一种IP骨干网技术, MPLS在无连接的IP网络上引入面向连接的标签交换概念, 将第三层路由技术和第二层交换技术相结合, 充分发挥了IP路由路径选择的灵活性和二层交换mac转发的简洁性。

MPLS并非一种业务或者应用, 它实际上可以看做一种隧道技术, 这种技术不仅支持多种高层协议与业务, 而且在移动程度上可以保证信息传输的安全性。

1.1 MPLS报文

MPLS封装

一或多个MPLS头部, 然后再封装一个二层报头, 可以将它称为"2.5层协议"

MPLS数据报文结构

报文内容 长度 说明
Label(标签头部) 20bit 唯一标识去往同一目的地址报文分组, 只有本地意义
Exp 3bit 扩展位, 现通常为CoS(Class of Service), 在设备阻塞时发送优先级高的报文
S 1bit 栈底标识, MPLS为多层标签, S=1表示为最底层标签, 即最靠近IP报头的那个MPLS头部
TTL 8bit 同IP报文中的TTL
标签类型 取值范围 说明
特殊标签 0 -> 15 意义特殊, 我在下边展开讲讲
静态标签 16 -> 1023 手工配置的MPLS标签
动态标签 1024 -> (10^20)-1 协议动态分配的MPLS标签

特殊标签:

    0: 表示已经到了MPLS网络与IPv4网络边缘(如上图的RTD与RTE), 需要将标签剥离后转发进IPv4网络
  • 1: 表示当前标签不做数据转发, 请采用下一层MPLS报头中的标签进行转发, 大概是处于安全性的考量
  • 2: 标签0的IPv6版本
  • 3: 表示我的下一台设备是MPLS网络中的边界设备

MPLS报头

如果是在MPLS网络中转发, 那么二层报头的上层协议类型应该为MPLS协议

    如果二层为以太网协议, 则MPLS协议的标签为type=0x8847
  • 如果二层为PPP协议, 则MPLS协议的标签为type=0x8281
    IPv4的标签为type=0x0800
  • IPv6的标签为type=0x86DD

1.2 MPLS基本网络结构

MPLS基于标签进行转发, 进行标签交换和报文转发的网络设备称为LSR(Label Switching Router,标签交换路由器), 由LSR构成的网络区域称为MPLS域(MPLS Domain), 那些位于MPLS域边缘的LSR称为LER(Label Edge Router, 边缘路由器), 区域内部的LSR称为核心LSR(Core LSR)

当IP报文进入MPLS网络时, MPLS入口的LER分析IP报文内容并且为这些IP报文添加上合适的标签, 以供核心LSR根据标签进行转发; 当IP报文离开MPLS网络时, 出口LER会弹出标签。

LSP(Label Switched Path, 标签交换路径), LSP是一个单向路径, 与数据流的方向一致, 如下图LSP的入口LER被称为入节点(Ingress), 位于LSP中间的LSR被称为中间节点(Transit), LSP出口的LER称为出节点(Egress); 根据LSP的方向, MPLS报文由Ingress发往Egress, 按照LSP的方向划分为上下游节点。

注: 其实很多三层交换机也支持MPLS

1.3 MPLS基本体系结构

    控制平面: 负责产生和维护路由信息/标签信息。

    • 路由信息表RIB(Routing Information Base): 由IP路由协议生成, 用于选择路由, 不负责转发;
    • 标签分发协议LDP(Label Distribution Protocol): 负责标签的分配, 标签转发信息表的建立、标签交换路径的建立和拆除等工作;
    • 标签信息表LIB(Label Information Base): 由标签分发协议生成, 用于选择路由.
  • 转发平面: 即数据平面, 负责报文的转发。

      转发信息表FIB(Forwarding Information Base): 通常初学者表达的路由表其实应该是这个, 从RIB提取必要的路由信息生成, 负责普通IP报文的转发;
  • 标签转发信息表LFIB(Label Forwarding Information Base): 简称标签转发表, 由标签分发协议LDP在LSR上建立LFIB, 负责带有MPLS标签报文的转发,

注: 如果是普通IP网络中转发信息表FIB是直接由路由信息表生成, MPLS网络中的边缘设备LER才需要结合路由信息表RIB和标签分发协议LDP来生成转发信息表FIB

1.4 转发等价类FEC

转发等价类FEC(Forwarding Equivalence Class). 属于相同FEC的报文在转发过程中被LSR相同方式处理。

举个例子, 在传统IP转发中, 到同一条路由的所有报文就是一个转发等价类, 这就是基于目的地址的一个分类。

2 LSP建立

    静态LSP: 同手工配置的方式为各个FEC分配标签, 并建立转发隧道
  1. 动态LSP: 通过标签发布协议动态建立转发隧道
    如果是动态LSP, RTD会为前往X网络的FEC分配一个标签为D, 并将这个标签发送给RTC使用, 使得RTC想要去往X网络时, 能够直接将数据按照Label=D向RTD发送
  • 如果是静态LSP, 则需要在RTC上配置去往X网络的标签为D, 使得RTC想要去往X网络时, 能够直接将数据按照Label=D向RTD发送

同理, 对于RTC而言, 它会向RTB发送一个去往X网络的标签C, 使得RTB想要去往X网络时, 能够直接将数据按照Label=C向RTC发送。

总结: 标签Label自下游向上游发送, 数据自上游向下游转发

2.1 静态LSP

特点:

    静态LSP是用户通过手工为各个FEC转发等价类分配标签Label而建立的, 由于静态LSP各节点上不能互相感知到整个LSP 的情况, 因此静态LSP是一个本地概念.
  • 静态LSP不使用标签发布协议LDP, 不需要交互控制报文, 因此资源开销小, 适合简单网络环境, 但是不能根据网络拓扑变化动态调整, 需要管理员干预.

配置命令

    static lsp ingress test	destination 100.1.1.0 24 nexthop 192.168.1.2 out-label 100
    

    创建名为test的静态lsp, 目的网络时100.1.1.0 24, 下一跳为192.168.1.2, 标签值为100

  1. static lsp transit test incoming-interface g0/0/0 in-label 100 nexthop 192.168.2.3 out-label 200
    

    创建名为test的静态lsp, 与上游设备连接的接口是g0/0/0, 入标签为100, 下一跳为192.168.2.3 , 出标签为200

  2. static lsp egress test incoming-interface g0/0/0 in-label 200
    

    创建名为test的静态lsp, 与上游设备连接的接口是g0/0/0, 入标签为200

2.2 标签分发协议LDP

LDP(Label Distribution Protocol, 标签分发协议)是多协议标签交换MPLS的一种控制协议, 相当于传统网络中的信令协议, 负责转发等价类FEC的分类、标签分配以及标签交换路径LSP的建立和维护, LDP规定了标签分发过程中的各种情况以及相关处理。

目前, LDP作为一种应用层协议(TCP/UDP port = 646), 广泛应用在VPN服务上, 具有组网、配置简单、支持基于路由动态建立LSP、支持大容量LSP等特点。

2.3 LDP的基本概念

LDP对等体

相互之间存在LDP会话且用LDP交换标签信息的两台LSR, LDP对等体通告它们之间的LDP会话获得对方的标签。

LDP邻接体

LDP的邻接体存在两种类型:

    本地对等体(Local Adjacency): 以组播形式(224.0.0.2)发送Hello消息发现的邻接体为本地邻接体, 这是默认模式, 这里Hello报文的发送周期为5s, 老化时长为15s.
  • 远端邻接体(Remote Adjacency): 以单播形式发送Hello消息发现的邻接体称为远端邻接体, 这里Hello报文的发送周期为15s, 老化时长为45s.

LDP会话

LDP会话用于LSR之间交换标签映射、释放等信息, 只有存在对等体才能建立LDP会话, LDP会话同样分分为两种类型:

    本地LDP会话(Local LDP Session): 建立会话的两个LSR之间是直连的, 使用keepalive消息维持;
  • 远端LDP会话(Remote LDP Session): 建立会话的两个LSR之间可以是直连的, 也可以是非直连的, 使用keepalive消息维持.

LDP消息类型

LDP协议主要使用四类消息

消息类型 作用 举例 协议
发现(Discovery) 通告和维护网络中LSR的存在 Hello消息 UDP
会话(Session) 建立、终止和维护LDP对等体之间的会话 Initialization消息、keepalive消息 TCP
通告(Advertisement) 创建、改变和删除FEF的标签映射 Label Mapping Message消息 TCP
通知(Notification) 提供建议性消息和差错通知 TCP

LDP邻居发现

  1. LSR-ID大的一方发起TCP三次握手建立TCP连接;

  2. 如果协商失败或者会话期间出现错误则会直接回复一个notification消息, 并终端LDP会话。

标签发布方式

    下游自主方式DU(Downstream Unsolicited):

    (默认模式)。

  1. 下游按需方式DoD(Downstream on Demand):

    如下图所示, 对于目的地址为192.168.1.1/32的FEC, 上游(Ingress)向下游发送标签请求消息, 下游(Egress)收到标签请求消息后, 才会向上游发送标签映射消息。

标签分配控制方式

    独立标签分配控制方式(Independent):

    结合标签发布方式:

    • 独立+自主:

    • 独立+按需:

  • 有序标签分配控制方式(Ordered):

    (默认模式)

      有序+自主(默认模式):

  • 有序+按需:

同样配一份图解:

标签保持方式

LSR收到的标签映射可能来自下一跳邻居, 也可能来自非下一跳邻居。

    自由标签保持方式(Liberal)(默认模式)

  • 保守标签保持方式(Conservative)

目前支持的标签发布方式+标签控制方式+标签保持方式:

    DU+Ordered+Liberal(默认方式)
  1. DoD+Ordered+Conservative

2.4 LDP建立LSP的过程

    缺省情况下, 网络的路由改变时, 如果有一个边缘节点(Egress)发现自己的路由表中出现了新的主机路由, 并且这与路哟不属于任何现有的FEC, 则改白能源节点需要为这一路由建立一个新的FEC;
  1. 如果MPLS网络中的Egress有可供分配的标签, 则为FEC分配标签, 并主动向上游发出标签映射消息, 标签映射消息中包含分配的标签和绑定的FEC等信息;
  2. Transit收到标签映射消息后, 判断标签映射的发送者(Egress)是否为该FEC的下一跳, 如若是, 则再起标签转发表中增加相应的条目, 然后主动向上游LSR发送对于指定FEC的标签映射消息.
  3. Ingress收到标签映射消息之后, 判断标签映射的发送者(Transit)是否为FEC的下一跳, 如若是, 则在标签转发表增加相应的条目, 这是完成了LSP的建立, 接下来就可以对该FEC对应的数据报文进行标签转发.

2.5 动态LSP

动态LSP的特点:

    组网配置简单, 易于管理和维护;
  • 支持基于路由动态建立LSP, 网络拓扑发生变化时, 能及时反映网络状况.

配置命令

    在设备上设置MPLS LSR-ID信息

    mpls lsr-id 1.1.1.1
    

    该LSR-ID默认情况下会被作为传输地址使用, 请确保这个地址能被MPLS内的设备ping通。

  1. mpls
    mpls ldp
    
  2. 在物理接口上开启MPLS功能和LDP协议

    int g0/0/0
    	mpls
    	mpls ldp
    

    没了, MPLS的基本配置就123这么简单

  3. display mpls ldp session	#查看会话是否建立成功(会话), op为正常状态
    display mpls ldp lsp	#查看LDP是否正常分配标签信息(标签数据库)
    display mpls lsp	#查看当前设备LSP建立情况(转发表)
    
  4. 修改传输地址

    int loop3
    	mpls ldp transport-address
    
  5. 建立远端邻接体

    mpls ldp peer-remote test	#邻接体命名
    peer-remote 172.16.1.2		#邻接体地址
    
  6. 弹出的标签信息

    mpls
    	label advertise impicit-null	#表示当前设备开启倒数第二跳弹出机制, 标签为3
    	label advertise expicit-null	#表示当前设备开启最后一跳弹出机制, 标签为0或2
    	label advertise non-null	#表示当前设备使用正常标签弹出机制, 标签为正常数值
    

3 MPLS转发

3.1 MPLS转发的基本概念

MPLS标签基本操作

标签转发的基本操作类型分为三种: 压入(Push)交换(Swap)弹出(Pop)

    Push: 当IP报文进入MPLS域时, MPLS边界设备在报文二层首部和IP首部之间插入一个新的MPLS报头, 其中包含有新的标签; 或者核心LSR根据需要在标签栈顶增加一个新的标签(即标签的嵌套封装);
  • Swap: 当报文在MPLS域内转发时, 根据标签转发表, 用下一跳分配的标签, 替换MPLS报文的栈顶标签;
  • Pop: 当报文离开MPLS域时, 将MPLS报文的标签剥离.

MPLS数据转发过程

先是标签分发:

    RTD为100.1.1.1/32分配了in标签1025, 并转发给了RTC
  1. RTC收到RTD的标签后将其设置为out标签, 根据这个标签有序地为100.1.1.1/32分配in标签1026, 并转发给RTB
  2. RTB收到RTC的标签后将其设置为out标签, 根据这个标签有序地为100.1.1.1/32分配in标签1027, 并转发给RTA
  3. RTA收到RTB的标签后将其设置为out标签
    RTA在收到ping的时候先是查找FIB表(转发信息表), 发现这个报文标签为null, 需要压入标签1027, 于是对报文push(1027);
  1. RTB收到ping报文, 检测到in label = 1027, 查标签转发表知道这个报文需要标签1026, 于是对报文swap (1026, 1027);
  2. RTC收到ping报文, 检测到in label = 1026, 查标签转发表知道这个报文需要标签1025, 于是对报文swap (1025, 1026);
  3. RTD收到ping报文, 检测到in label = 1025, 查标签转发表FIB表知道这个报文标签为null, 于是对报文pop();

如果MPLS域内流量很大, RTD的处理是否有存在不合理的地方?

PHP(Penultimate Hop Popping, 倒数第二跳弹出)

默认情况下设备支持PHP特性, 支持PHP的Egress节点的标签值为3(即特殊标签值)

此时RTD的out label可能是特殊标签, 也可能是动态标签。

MPLS的TTL处理模式

Uniform模式

    在入节点, IP TTL减1映射到MPLS TTL字段, 此后报文在MPLS网络中按照标准的TTL处理方式.
  • 在出节点, 将MPLS TTL减1后映射到IP TTL字段.

Pipe模式

Pipe模式(管道模式)被提出了

    在入节点, IP TTL值减1, MPLS TTL字段为固定值, 此后报文在MPLS网络中按照标准的TTL方式处理. 在出节点会将IP TTL字段减1, 即IP分组经过MPLS网络时, 无论MPLS内部经过多少跳, IP TTL只会在入节点和出节点分别减少1
  • 在MPLS VPN应用中, 处于对网络安全的考虑, 需要隐藏MPLS骨干网络结构, 这种情况下, 对于私网报文, Ingress上使用Pipe模式.

配置命令

修改TTL模式

undo ttl propagate	#pipe模式
ttl propagate	#uniform模式

4 MPLS解决BGP路由黑洞

BGP路由黑洞问题我在之前的博客有介绍过: HCIP-ICT实战进阶06-BGP基础, 想要回顾可以去瞄一眼

BGP路由黑洞: BGP能跨设备传递路由, 但数据转发需要逐台设备, 一旦网络路径上有设备未开启BGP, 就会导致需要该设备转发的数据被丢弃

MPLS解决方案: 在AS200中启用MPLS

5 最后

这段时间被期末考和课设轮流轰炸, 所以这篇博客各个部分时间跨度还挺大的, 其实MPLS准确来说应当是HCIE的内容, 所以就当是提前准备HCIE了, 另外就是24届的实习岗已经陆续放出了, 一边是要去准备面试相关的东西, 一边又要经常去海拉鲁出差, 希望我能平衡好时间吧。

编程笔记 » HCIP- ICT实战进阶ex1-MPLS

赞同 (39) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽