MPLS基础概述&&MP-BGP实验(华为 DataCome)

2023-05-16

作用

早期网络设备性能有限,用标签来代替数量庞大的路由,随着网络设备性能提高,MPLS高速转发就不再有优势了。

MPLS支持多层标签和转发平面面向连接的特性,使其在VPN(Virtual Private Network)、QoS(Quality of Service)等方面得到广泛应用。

结构

MPLS由控制平面(control plane)和转发平面(forwarding plane)组成

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

  • 路由信息表RIB(Routing Information Base):由IP路由协议(IP Routing Protocol)生成,用于选择路由。
  • 标签分发协议LDP(Label Distribution Protocol):负责标签的分配、标签转发信息表的建立、标签交换路径的建立、拆除等工作。
  • 标签信息表LIB(Label Information Base):由标签分发协议生成,用于管理标签信息。

转发平面:即数据平面(Data Plane),负责普通IP报文的转发以及带MPLS标签报文的转发。

  • 转发信息表FIB(Forwarding Information Base):从RIB提取必要的路由信息生成,负责普通IP报文的转发。
  • 标签转发信息表LFIB(Label Forwarding Information Base):简称标签转发表,由标签分发协议在LSR上建立LFIB,负责带MPLS标签报文的转发。

转发等价类

MPLS将具有相同特征的报文归为一类,称为转发等价类FEC(Forwarding Equivalence Class)。属于相同FEC的报文在转发过程中被LSR以相同方式处理。

FEC可以根据源地址、目的地址、源端口、目的端口、VPN等要素进行划分。例如,在传统的采用最长匹配算法的IP转发中,到同一条路由的所有报文就是一个转发等价类。


标签

标签(Label)是一个短而定长的、只具有本地意义的标识符,用于唯一标识一个分组所属的FEC。在某些情况下,例如要进行负载分担,对应一个FEC可能会有多个入标签,但是一台设备上,一个标签只能代表一个FEC。

MPLS报文与普通的IP报文相比增加了MPLS标签信息,MPLS标签的长度为4个字节。MPLS标签封装在链路层和网络层之间,可以支持任意的链路层协议

  •  Label:20bit,标签值域。
  • Exp:3bit,用于扩展。现在通常用做CoS(Class of Service),当设备阻塞时,优先发送优先级高的报文。
  • S:1bit,栈底标识。MPLS支持多层标签,即标签嵌套。S值为1时表明为最底层标签。
  • TTL:8bit,和IP报文中的TTL(Time To Live)意义相同。

标签栈(Label Stack)是指标签的排序集合。如图所示,靠近二层首部的标签称为栈顶MPLS标签或外层MPLS标签(Outer MPLS label);靠近IP首部的标签称为栈底MPLS标签或内层MPLS标签(Inner MPLS label)。理论上,MPLS标签可以无限嵌套。目前MPLS标签嵌套主要应用在MPLS VPN中。

 

标签的取值范围

0~15:特殊标签。

16及以上:LDP、MP-BGP(MultiProtocol Border Gateway Protocol)等动态信令协议的标签空间。

0

IPv4 Explicit NULL Label

表示该标签必须被弹出(即标签被剥掉),且报文的转发必须基于IPv4。如果出节点分配给倒数第二跳节点的标签值为0,则倒数第二跳LSR需要将值为0的标签正常压入报文标签值顶部,转发给最后一跳。最后一跳发现报文携带的标签值为0,则将标签弹出。

1

Router Alert Label

只有出现在非栈底时才有效。类似于IP报文的“Router Alert Option”字段,节点收到Router Alert Label时,需要将其送往本地软件模块进一步处理。实际报文转发由下一层标签决定。如果报文需要继续转发,则节点需要将Router Alert Label压回标签栈顶。

2

IPv6 Explicit NULL Label

表示该标签必须被弹出,且报文的转发必须基于IPv6。如果出节点分配给倒数第二跳节点的标签值为2,则倒数第二跳节点需要将值为2的标签正常压入报文标签值顶部,转发给最后一跳。最后一跳发现报文携带的标签值为2,则直接将标签弹出。

3

Implicit NULL Label

倒数第二跳LSR进行标签交换时,如果发现交换后的标签值为3,则将标签弹出,并将报文发给最后一跳。最后一跳收到该报文直接进行IP转发或下一层标签转发。

4~13

保留

-

14

OAM Router Alert Label

MPLS OAM(Operation Administration & Maintenance)通过发送OAM报文检测和通告LSP故障。OAM报文使用MPLS承载。OAM报文对于Transit LSR和倒数第二跳LSR(penultimate LSR)是透明的。

15

保留

-

LSP的建立

动态LSP的标签发布协议

动态LSP通过标签发布协议动态建立。标签发布协议是MPLS的控制协议(也可称为信令协议),负责FEC的分类、标签的分发以及LSP的建立和维护等一系列操作。

MPLS可以使用多种标签发布协议:

  • LDP(Label Distribution Protocol)是专为标签发布而制定的协议。LDP根据IGP、BGP路由信息通过逐跳方式建立LSP。
  • RSVP-TE(Resource Reservation Protocol Traffic Engineering)是对RSVP的扩展,用于建立基于约束的LSP。它拥有普通LDP LSP没有的功能,如发布带宽预留请求、带宽约束、链路颜色和显式路径等。
  • MP-BGP(Multiprotocol Border Gateway Protocol)是在BGP协议基础上扩展的协议。MP-BGP支持为MPLS VPN业务中私网路由和跨域VPN的标签路由分配标签。

 动态LSP的基本建立过程

签由下游LSR分配,按从下游到上游的方向分发。如图,由下游LSR在IP路由表的基础上进行FEC的划分,并根据FEC分配标签,通告给上游的LSR,以便建立标签转发表和LSP。

MPLS转发

基本概念

标签操作类型包括标签压入(Push)、标签交换(Swap)和标签弹出(Pop),它们是标签转发的基本动作。

  • Push:当IP报文进入MPLS域时,MPLS边界设备在报文二层首部和IP首部之间插入一个新标签;或者MPLS中间设备根据需要,在标签栈顶增加一个新的标签(即标签嵌套封装)。
  • Swap:当报文在MPLS域内转发时,根据标签转发表,用下一跳分配的标签,替换MPLS报文的栈顶标签。
  • Pop:当报文离开MPLS域时,将MPLS报文的标签剥掉。在最后一跳节点,标签已经没有使用价值。这种情况下,可以利用倒数第二跳弹出特性PHP(Penultimate Hop Popping),在倒数第二跳节点处将标签弹出,减少最后一跳的负担。最后一跳节点直接进行IP转发或者下一层标签转发。默认情况下,设备支持PHP特性,支持PHP的Egress节点分配给倒数第二跳节点的标签值为3。

基本转发过程

以支持PHP的LSP为例

  1. Ingress节点收到目的地址为4.4.4.2的IP报文,压入标签Z并转发。
  2. Transit节点收到该标签报文,进行标签交换,将标签Z换成标签Y。
  3. 倒数第二跳Transit节点收到带标签Y的报文。因为Egress分给它的标签值为3,所以进行PHP操作,弹出标签Y并转发报文。从倒数第二跳转发给Egress的报文以IP报文形式传输。
  4. Egress节点收到该IP报文,将其转发给目的地4.4.4.2/32。
     

LSP连通性

在MPLS网络中,如果通过LSP转发数据失败,负责建立LSP的MPLS控制平面将无法检测到这种错误,加大了网络维护的难度。MPLS Ping/MPLS Tracert为用户提供了发现LSP错误、并及时定位失效节点的机制。

MPLS Ping

 LSR_1上建立了一条目的地为LSR_4的LSP。从LSR_1对该LSP进行MPLS Ping时的处理如下:

  1. LSR_1查找该LSP是否存在。如果不存在,返回错误信息,停止Ping。如果存在,则继续进行以下操作。
  2. LSR_1构造MPLS Echo Request报文,IP头中的目的地址为127.0.0.1/8,IP头中的TTL值为1,同时将4.4.4.4填入Echo Request报文中的目的FEC中。然后查找相应的LSP,压入LSP的标签,将报文发送给LSR_2。
  3. 中间节点LSR_2和LSR_3对MPLS Echo Request报文进行普通MPLS转发。如果中间节点MPLS转发失败,则中间节点返回带有错误码的MPLS Echo Reply报文。
  4. 当MPLS转发路径无故障,则MPLS Echo Request报文到达LSP的出节点LSR_4。然后检查目的FEC中包含的目的地址4.4.4.4是否为自己的Loopback接口地址,以此来确认LSR_4是该FEC的真正出口后,返回正确的MPLS Echo Reply报文。至此整个MPLS Ping过程结束。

MPLS Tracert

从LSR_1对4.4.4.4/32进行MPLS Tracert时的处理如下: 

  1. LSR_1检查LSP是否存在。如果不存在,返回错误信息,停止Tracert,否则继续进行如下处理。
  2. LSR_1构造MPLS Echo Request报文,IP头中的目的地址为127.0.0.1/8,同时将4.4.4.4填入MPLS Echo Request报文中的目的FEC中,然后查找相应的LSP,压入LSP的标签并且将MPLS TTL设置为1,将报文发送给LSR_2。此MPLS Echo Request报文中包含Downstream Mapping TLV(用来携带LSP在当前节点的下游信息,主要包括下一跳地址、出标签等)。
  3. LSR_2收到LSR_1发送来的报文后,将MPLS Echo Request中MPLS TTL减1为0后发现TTL超时,然后LSR_2需要检查是否存在该LSP,同时检查报文中Downstream Mapping TLV的下一跳地址、出标签是否正确,如果两项检查都正确,返回正确的MPLS Echo Reply报文,并且报文中必须携带LSR_2本身的包含下一跳和出标签的Downstream Mapping TLV给LSR_1。如果检查有不正确,则返回错误的MPLS Echo Reply报文。
  4. LSR_1收到正确的MPLS Echo Reply报文后再次发送MPLS Echo Request报文,报文的封装方式跟步骤2类似,只是将LSP标签的MPLS TTL设置为2,此时的MPLS Echo Request报文中的Downstream Mapping TLV是从MPLS Echo Reply报文中复制过来的。然后LSR_2收到该报文后进行普通MPLS转发。LSR_3收到此报文,标签的TTL超时,跟步骤3同样的处理方式后返回MPLS Echo Reply报文。
  5. LSR_1收到正确的MPLS Echo Reply报文后重复步骤4把LSP标签的MPLS TTL设置为3,复制Downstream Mapping TLV后发送MPLS Echo Request报文。LSR_2和LSR_3对该报文进行普通MPLS转发。LSR_4收到此报文,重复步骤3处理方式对报文进行处理,同时检查目的FEC中包含的目的IP 4.4.4.4为自己的Loopback接口地址,以此来发现已经是该LSP的出节点,因此返回不带下游信息的MPLS Echo Reply报文,至此整个MPLS Tracert过程结束。

 基于MPLS的VPN

私有网络间数据在公网上的传送

  • CE(Customer Edge)是用户边缘设备,可以是路由器,也可以是交换机或主机。
  • PE(Provider Edge)是IP/MPLS骨干网的边缘设备。
  • P(Provider)是IP/MPLS骨干网的骨干设备,不与CE直接相连。P设备只需要具备基本MPLS转发能力,不维护VPN信息。

  • PE负责对VPN用户进行管理、建立各PE间LSP连接、同一VPN用户各分支间路由信息发布。
  • PE之间发布VPN用户路由信息通常是用MP-BGP协议实现。
  • 支持不同分支间IP地址复用和不同VPN间互通。

LDP简介

LDP协议规定了标签分发过程中的各种消息以及相关的处理过程。通过LDP,LSR可以把网络层的路由信息映射到数据链路层的交换路径上,进而建立起LSP。

LDP消息类型

  • 发现(Discovery)消息:用于通告和维护网络中LSR的存在,如Hello消息。
  • 会话(Session)消息:用于建立、维护和终止LDP对等体之间的会话,如Initialization消息、Keepalive消息。
  • 通告(Advertisement)消息:用于创建、改变和删除FEC的标签映射。
  • 通知(Notification)消息:用于提供建议性的消息和差错通知。

为保证LDP消息的可靠发送,除了Discovery消息使用UDP(User Datagram Protocol)传输外,LDP的Session消息、Advertisement消息和Notification消息都使用TCP(Transmission Control Protocol)传输

LDP建立过程

1.LDP会话的建立

通过Hello消息发现邻居后,LSR之间开始建立LDP会话。会话建立后,LDP对等体之间通过不断地发送Hello消息和Keepalive消息来维护这个会话。

  • LDP对等体之间,通过周期性发送Hello消息表明自己希望继续维持这种邻接关系。如果Hello保持定时器超时仍没有收到新的Hello消息,则删除Hello邻接关系。邻接关系被删除后,本端LSR将发送Notification消息,结束该LDP会话。
  • LDP对等体之间通过LDP会话连接上传送的Keepalive消息来维持LDP会话。如果会话保持定时器(Keepalive保持定时器)超时仍没有收到任何Keepalive消息,则关闭TCP连接,本端LSR将发送Notification消息,结束LDP会话。

2.LDP LSP的建立

会话建立后,LDP通过发送标签请求和标签映射消息,在LDP对等体之间通告FEC和标签的绑定关系,从而建立LSP。

实验MP-BGP

1.P、PE之间配置OSPF,实现IGP互通。
2.PE、P上配置MPLS、MPLS LDP,建立MPLS LSP公网隧道,传输VPN数据。

mpls lsr-id x.x.x.x
mpls
mpls ldp

注意:接口使能MPLS MPLS LDP


3.PE1和PE2之间配置MP-IBGP,交换VPN路由信息。

\\以R5为例
R5-bgp]dis this
#
bgp 567
 peer 7.7.7.7 as-number 567 
 peer 7.7.7.7 connect-interface LoopBack0
 #
 ipv4-family unicast
  undo synchronization
  undo peer 7.7.7.7 enable
 # 
 ipv4-family vpnv4
  policy vpn-target
  peer 7.7.7.7 enable
#


4.PE1和PE2上配置VPN实例,分公司只与总公司通信,分公司之间不可以通信

vpn-target设计

vpn实例CE1

 1:234 输出
 2:234 3:234 4:234 输入

vpn实例CE2

 2:234 输出
 1:234 输入

vpn实例CE3

  3:234 输出
 1:234 输入

vpn实例CE4

 4:234 输出
 1:234 输入

R5:

ip vpn-instance CE1
 ipv4-family
  route-distinguisher 1:567 //唯一标识(跟OSPF RID作用一样)
  vpn-target 1:234 export-extcommunity
  vpn-target 2:234 3:234 4:234 import-extcommunity

ip vpn-instance CE2
 ipv4-family
  route-distinguisher 2:567
  vpn-target 2:234 export-extcommunity
  vpn-target 1:234 import-extcommunity

#
interface GigabitEthernet0/0/0
 ip binding vpn-instance CE1
 ip address 15.0.0.5 255.255.255.0 
#
interface GigabitEthernet0/0/1
 ip binding vpn-instance CE2
 ip address 25.0.0.5 255.255.255.0 

ip route-static vpn-instance CE1 10.1.1.0 24 15.0.0.1
ip route-static vpn-instance CE2 10.2.2.0 24 25.0.0.2


\\在BGP中引入静态路由
BGP
 ipv4-family vpn-instance CE1 
   import-route static
 #
 ipv4-family vpn-instance CE2 
   import-route static
R7

ip vpn-instance CE3
 ipv4-family
  route-distinguisher 3:567
  vpn-target 3:234 export-extcommunity
  vpn-target 1:234 import-extcommunity

ip vpn-instance CE4
 ipv4-family
  route-distinguisher 4:567
  vpn-target 4:234 export-extcommunity
  vpn-target 1:234 import-extcommunity


interface GigabitEthernet0/0/1
 ip binding vpn-instance CE3
 ip address 37.0.0.7 255.255.255.0 
#
interface GigabitEthernet0/0/2
 ip binding vpn-instance CE4
 ip address 47.0.0.7 255.255.255.0 

ip route-static vpn-instance CE3 10.3.3.0 24 37.0.0.3
ip route-static vpn-instance CE4 10.1.1.0 24 47.0.0.4

BGP
 ipv4-family vpn-instance CE3 
  import-route static
 #
 ipv4-family vpn-instance CE4 
  import-route static
#
<R5>dis ip routing-table vpn-instance CE1 P bgp 
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
CE1 routing table : BGP
         Destinations : 3        Routes : 3        

BGP routing table status : <Active>
         Destinations : 3        Routes : 3

Destination/Mask    Proto   Pre  Cost      Flags NextHop         Interface

       10.2.2.0/24  BGP     255  0          RD   25.0.0.2        GigabitEthernet
0/0/1
       10.3.3.0/24  IBGP    255  0          RD   7.7.7.7         GigabitEthernet
0/0/2
       10.4.4.0/24  IBGP    255  0          RD   7.7.7.7         GigabitEthernet
0/0/2

5.分公司B、C需要互相通信,请自行实验

vpn实例CE2

2:234 输出
3:234  1:234 输入

vpn实例CE3

  3:234 输出
  2:234 1:234 输入

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MPLS基础概述&&MP-BGP实验(华为 DataCome) 的相关文章

  • 【疑难杂症】Ubuntu安装uWsgi出现的问题

    在Ubuntu环境下安装uWsgi的时候出现了一些问题 1 xff1a 安装时出现错误 xff1a x86 64 linux gnu gcc pthread plugins python python plugin o In file in
  • 基于Hexo框架快速搭建个人博客--搭建(一)

    基于Hexo框架快速搭建个人博客 搭建 xff08 一 xff09 一 HEXO框架二 安装Node js三 安装Git四 安装Hexo五 设置主题六 本地发布文章七 总结 博客链接 xff1a 会思想的苇草i文章链接 xff1a 基于He
  • 安装UR5功能包(翻译)

    翻译地址 由于本人能力有限 xff0c 难免存在模糊或错误之处 xff0c 希望见谅和指正 如果能够对你有点帮助 xff0c 我会感到荣幸 安装 有两种方法用来安装UR5功能包 第一种是直接使用二进制包来安装 xff0c 第二种是在catk
  • 李飞飞发表研究新成果:视觉推理的推断和执行程序(HR)

    原文 论文导读 xff1a 目前进行视觉推理的方法都是通过黑箱结构将输入直接映射到输出 xff0c 而不是对潜在的推理过程进行明确建模 这样一来 xff0c 黑箱模型学习到的是利用数据内的偏置而不是学习进行视觉推理的过程 受到模块化网络的启
  • 构建Linux Samba支持任意WIN10访问(无需改策略)

    传统方式构建的Linux Samba无法直接被WIN10访问 xff0c 大多需要在要访问的WIN10系统上改变组策略 这个方法虽然可行 xff0c 但是大量WIN10系统的组策略修改较为繁琐 之所以WIN10无法访问是当SAMBA连接开始
  • VNC SERVER 安装

    1 用root用户身份运行以下命令 yum install tigervnc server 2 停用防火墙 systemctl stop firewalld service systemctl disable firewalld servi
  • Ubuntu 更换清华大学镜像源

    Ubuntu 更换镜像源 通常我们使用ubunntu的时候总是出现网络过慢导致的更新下载失败等问题 Ubuntu默认的服务器是在国外 xff0c 自然连接就很慢 这里我们更换成国内的镜像源 xff0c 这里使用清华镜像源 操作步骤如下 xf
  • C语言strtok函数的用法

    先理解strtok函数的定义 xff0c 尤其是指针方面的 xff0c 需要自己理解 原型 xff1a char strtok char s const char delim include lt string h gt 分解字符串为一组字
  • ubuntu mate18.04+树莓派4B+ROS安装详细教程

    前记 最近项目需要 xff0c 需要给树莓派4B 安装Ubuntu mate xff0c 本来是一件很简单的事情 xff0c 因为Ubuntu mate官网已经开始支持树莓派4B了 xff0c 但是实际操作后 xff0c 才发现烧录官方的桌
  • FreeRTOS可视化追踪软件 —— 破解Tracealyzer 4.2.12

    方法一 愚人节破解Tracealyzer 4 2 12 xff08 若发这里不妥 xff0c 可通知删贴 xff09 http www stmcu org cn module forum thread 620069 1 1 html 4 3
  • tensorflow2(GPU)显卡版安装

    准备工作 硬件 xff1a 一张算力3 5以上的NVIDIA显卡 查询链接 link 软件 xff1a Miniconda3 pycharm NVIDIA显卡驱动 30系列以前 xff1a cuda 10 1 cudnn 10 1 v7 6
  • elasticsearch底层引擎替换之索引创建+文档添加

    最近在改elasticsearch的源码 xff0c 真的蛋疼 xff0c 现在先记录一下遇到的问题 首先 xff0c 我们在做的是替换掉elasticsearch的底层引擎 xff0c 也就是把lucene替换成我们自己的引擎 这个工作起
  • Winform 集成零散dll进exe的方法

    Winform程序经常需要引用一些第三方控件 xff0c 这些控件大多以DLL的形式提供 另外 xff0c 一般USB桥芯片的官方提供 net操作类库也都是DLL形式提供的 因此一个稍大的项目中往往有一大堆的零散的DLL文件 xff0c 而
  • vncserver 使用遇到的问题

    今天使用vncserver遇到了几个问题 xff0c 如下 xff1a 1 使用普通账户无法修改该账户下的vncpasswd xff1a 解决方法 xff1a 打开 vnc目录 xff0c ls l看一下发现 passwd这个文件的用户和用
  • slf4j的MDC对象和ThreadLocal简单分析

    MDC xff08 Mapped Diagnostic Context xff0c 映射调试上下文 xff09 是 log4j 和 logback 提供的一种方便在多线程条件下记录日志的功能 某些应用程序采用多线程的方式来处理多个用户的请求
  • springboot中@bean的lite模式

    当 64 Beans相互依赖时 xff0c 表示依赖关系就像一个bean方法调用另一个方法一样简 单 xff1a 64 Configuration public class AppConfig 64 Bean public Foo foo
  • spring bean解析源码分析

    转自https www jianshu com p 19e01388ccc5 前言 Spring源码分析是一个系列 xff0c 源码是Spring 4 X xff0c 本系列主要分析Spring的代码执行流程 xff0c 过于细节的内容将不
  • springboot remote shell简单实例

    springboot项目可以使用远程shell进行监控和管理 xff08 在2 0版本就不可以使用了 xff0c 此处要注意 xff09 使用时先添加spring boot remote shell 的依赖 xff0c gradle项目自己
  • 2021-08-30 创建tensor时,注意不要让梯度消失了

    下面这种是错误的 xff0c 梯度会消失 data span class token operator 61 span torch span class token punctuation span tensor span class to
  • 嵌入式学习项目实战 --- 在线词典

    目录 一 前言 二 项目功能 三 程序流程 1 客户端 2 服务器 四 代码实现 1 客户端代码 2 服务器代码 3 Makefile 一 前言 本文学习自 华清远见 的一个开源嵌入式项目在线词典综合实战 xff0c 涵盖了网络编程 文件I

随机推荐