MPLS

术语概念

术语

  1. 设备
    1. CE:客户边界设备
    2. PE:运营商边界设备
    3. P:运营商内部的设备
  2. 路由器
    1. LSR:标签交换路由器
    2. LER:标签边缘路由器(PE)
  3. 路由器角色
    1. Ingress:第一个压入标签的路由器
    2. Transit:只负责传输标签,标签交换
    3. Egress:标签弹出的路由器(不考虑PHP,即Egress PE向倒数第二跳节点分配隐式空标签,值为3)
  4. 标签动作
    1. push:标签压入
    2. swap:标签交换
    3. pop:标签弹出
    4. UNTAG/No label(没有标签)出现问题,在MPLS VPN的环境中只能丢弃报文关于标签断裂:所有的环回口配置32位主机路由,核心网不许聚合
    5. Aggregate(聚合),把报文拿掉MPLS之后转发给一个vpn-instance接口
  5. 数据库
    1. RIB:路由信息表控制层面,通过路由协议生成,用于选择路由,存储路由条目信息
    2. LIB:标签信息表,由标签协议根据路由产生的标签和路由的对应关系控制层面,通过LDP生成,用于管理标签信息,存储的是路由器邻居发给他的标签、以及自身对分配给某个目的IP网络的标签,用于管理标签信息
    3. FIB:转发信息表,来自路由表拷贝转发层面,通过路由协议生成,存储路由条目与出接口的对应关系
    4. LFIB:标签转发信息表,把FIB和LIB两者结合在一起通过LDP生成,负责带MPLS标签报文的转发,LIB只保存有标签信息,并没有出接口和下一跳信息,但LFIB有下一跳和出接口信息
      LFIB中包含两张表,ILM和NHLFE。数据进入路由器查询ILM,数据出路由器查询的是NHLFE。这些表都是通过Tunnel ID来相互关联的
      1. NHLFE:下一跳标签转发表,用于指导MPLS报文的转发,包括Tunnel ID、出接口、下一跳、出标签、标签操作类型等信息。FEC到一组NHLFE的映射称为FTN(FEC-to-NHLFE),通过查看FIB表中Tunnel ID值不为0x0的表项,能够获得FTN的详细信息,FTN只在Ingress存在
      2. ILM:入标签映射表,入标签到一组下一跳标签转发表项的映射,ILM包括Tunnel ID、入标签、入接口、标签操作类型等信息。ILM在Transit节点的作用是将标签和NHLFE绑定。通过标签索引ILM表,就相当于使用目的IP地址查询FIB,能够得到所有的标签转发信息
    5. Tunnel ID:这不是数据库,是数据库之间的关联键值为了给使用隧道的上层应用(如VPN、路由管理)提供统一的接口,系统自动为隧道分配了一个ID,也称为Tunnel ID。该Tunnel ID的长度为32比特,只是本地有效在MPLS转发过程中,FIB、ILM和NHLFE是通过Tunnel ID关联的
  6. CPE:运营商三巨头中两个互联,为同一个客户服务
  7. MCE:MCE功能是Multi-CE的简称,具有MCE功能的交换机可以在BGP/MPLS VPN组网应用中承担多个VPN实例的CE功能,减少用户网络设备的投入
  8. vpn instance:在PE设备上起到隔离作用,每一个vpn实例提供一个独立的路由表,同时甚至能够提供独立的路由协议进程
  9. LSP:标签交换通道,LSP是单向通道,与数据流的方向一致,用来交换Label/FEC映射信息
  10. LDP:标签分发协议,相当于传统网络中的信令协议,负责转发等价类FEC的分类、标签的分配以及标签交换路径LSP的建立和维护等操作
  11. FEC:转发等价类。MPLS将具有相同特征的报文归为一类,称为转发等价类FEC,属于相同FEC的报文在转发过程中被LSR以相同方式处理。FEC可以根据源地址、目的地址、源端口、目的端口、VPN、隧道、QoS等要素进行划分。例如,在传统的采用最长匹配算法的IP转发中,到同一条路由的所有报文就是一个转发等价类
    • 一组或者一系列沿着相同路径转发的,且都按照相同的规则执行的数据流
    • 相同的转发方式、相同的转发路径LSP、相同的转发待遇
    • 同属一个FEC的报文拥有相同的标签,拥有相同标签的报文不一定同属一个FEC,由入站LSR决定报文属于哪一个FEC
    • 种类
      • 属于某特定组的组播报文
      • 目的IP地址匹配了某一个特定前缀的报文
      • 根据DCSP字段,有相同的QoS策略的报文
      • MPLS VPN中,属于同一个VPN的报文
      • 报文的目的IP地址数据BGP学习到的路由,并且该路由的下一跳地址相同
  12. LDP邻接体:当一台LSR接收到对端发送过来的Hello消息后LDP邻接体建立
    1. 本地邻接体:以组播形式发送Hello消息(即链路hello消息)发现的邻接体基本发现机制
    2. 远端邻接体:以单播形式发送Hello消息(即目标Hello消息)发现的邻接体扩展发现机制
  13. LDP对等体:指相互之间存在LDP会话、使用LDP来交换标签消息的两个LSRLDP通过邻接体来维护对等体的存在,对等体的类型取决于维护它的邻接体的类型。一个对等体可以由多个邻接体来维护,如果由本地邻接体和远端邻接体两者来维护,则对等体类型为本远共存对等体
  14. LDP会话:用于LSR之间交换标签映射、释放等消息。只有存在对等体才能建立LDP会话
    1. 本地LDP会话:建立会话的两个LSR之间是直连的
    2. 远端LDP会话:建立会话的两个LSR之间可以是直连的,也可以是非直连的

概念

MPLS标签嵌套

内层标签(栈底标签):靠近用户数据,MP-BGP分配
外层标签:靠近二层头,LDP分配,作为MP-BGP路由的下一跳地址
一般情况为2层,跨域的一般3层标签,CSC架构一般4层标签
MPLS标签嵌套

  • PID标识二层头部后面的报文类型
    • Ethernet
      • 0x0800 IPv4
      • 0x8847 MPLS单播报文
      • 0x8848 MPLS多播报文
    • PPP
      • 0x8021 IPv4
      • 0x8281 MPLS单播报文
      • 0x8283 MPLS多播报文
  • S标识是否是栈底标签
  • 标签嵌套应用
    • MPLS VPN
    • MPLS TE

PHP次末跳弹出(倒数第二跳弹出)

在LSP的最后一跳节点,已不再需要在进行标签交换,此时,可以配置倒数第二跳弹出特性PHP,在倒数第二跳节点处将标签弹出,最后一跳节点直接进行IP转发或者下一层标签转发,减少最后一跳标签交换负担。
Egress PE向倒数第二跳节点分配隐式空标签,值为3
在次末跳交换为隐式空标签默认是隐式空标签,如果设计流量工程则需要使用显示空标签,意味着应当弹掉这层标签,如果只有一层标签,则变成IP报文了,同时请注意,该转发决策由LFIB决定,转发出接口、二层重写信息已经就绪。

PHP的作用及没有PHP会有什么影响

次末跳弹出机制中的两种标签类型:隐式空标签(默认)和显式空标签
始发路由器给上游分配一个3号标签,使标签在倒数第二跳被弹出,最后一跳节点直接进行IP转发或者下一层标签转发,减少最后一跳标签交换负担
如果没有PHP需要先查LFIB,将标签弹出,然后再查FIB表,将数据转发出去;如果使用PHP,则减少一次查表次数,PHP后只查FIB,不需要再查LFIB,节省开销

有隐式空标签3了,为什么还需要显示空标签0呢?
IP数据包中有一个字段是服务类型,主要用于流量工程QoS,如果在MPLS环境中,使用默认的PHP机制,将无法部署QoS,因为隐式空标签中将不会显示服务类型这一项(需使用标签包中的EXP字段),当A收到B发给它的标签值为3时,那么A收到转发给B的数据时,将直接执行弹出动作。
但是显示空标签不同,其在LDP中的标签值为0,A针对本地产生的路由条目发送给LDP邻居时会携带这一值,即A转发给B数据时是将标签交换为0,而不是直接弹出。
即如果想要部署MPLS-TE(流量工程),则必须使用显示空标签的PHP
如果收到一个标签包,标签为0,则直接弹出标签,并将数据交给FIB进行查找,不需要查找LFIB,即不会有两次查找的损耗

MPLS多标签交换

为什么需要使用MPLS

由于路由器的转发效率较慢,开发MPLS主要是为了加快数据的转发。MPLS封装在二层与三层之间,在
路径转发时,不需要查三层的IP,只需要查找到2.5层解决了每个数据包都要进行头部分析或者运算的问题,不再对IP报文做分析,所以可以提高了转发效率,但同时它将消耗更多带宽资源

MPLS的报文封装位置及格式

帧模式MPLS

帧模式MPLS
MPLS帧模式封装在2、3层之间,信元模式的MPLS已经淘汰

MPLS头

MPLS头部总长度为4bytes (32bits)
MPLS头

  1. Label:标签
    1. 0~15:特殊标签
      1. 0:IPv4显示空标签,表示该标签必须被弹出,且报文的转发必须基于IPv4。一般倒数第二跳LSR压入标签0,最后一条LSR将标签0弹出
      2. 1:警告标签,只有出现在非栈底时才有效
      3. 2:IPv6显示空标签,表示该标签必须被弹出,且报文的转发必须基于IPv6
      4. 3:隐式空标签,倒数第二跳LSR进行标签交换时,如果发现交换后的标签值为3,则将标签弹出并将报文发给最后一跳,最后一跳收到该报文直接进行IP转发或下一层标签转发
      5. 4~13和15:保留
      6. 14:OAM路由器警告标签,MPLS OAM通过发送OAM报文检测和通告LSP故障,OAM报文使用MPLS承载,对于Transit LSR和倒数第二跳LSR是透明的
    2. 16~1023:静态LSP和静态CR-LSP共享的标签空间
    3. 1024及以上:LDP、RSVP-TE、MP-BGP等动态信令协议的标签空间
  2. EXP:通常用做CoS,当设备阻塞时,优先发送优先级高的报文
  3. S:栈底标识,MPLS支持多层标签,即标签嵌套,S值为1时表明为最底层标签
  4. TTL:和IP报文中的TTL(Time To Live)意义相同
    关于TTL的处理有两种方式
    1. 统一模式(Uniform):IP的TTL和MPLS的TTL相互拷贝,保持IP和MPLS的TTL值相同,可以统计MPLS中有多少个路由器,每经过一台路由器TTL值减 1,无论是MPLS还是IP
      统一模式
      1. 在入口PE减1之后,把IP的TTL拷贝到MPLS的TTL
      2. 在MPLS区域按照外层的TTL进行转发,在次末跳上把MPLS的TTL减1之后拷贝回IP
      3. 多层标签默认只处理外层标签,只有外层标签弹出之后再处理内层标签
    2. 管道模式(Pipe):IP分组经过MPLS网络时,无论经过多少跳,IP的TTL只有在入接点和出节点时分别减1,即核心网对用户是透明的,整个MPLS区域被看做一个设备
      管道模式
      1. 在入接点,IP的TTL值减1MPLS的TTL字段为固定值如果需要隐藏MPLS核心网,则强制把进入MPLS核心网的报文的TTL设置为255
      2. 报文在MPLS网络中按照标准的TTL处理方式处理,每过一跳,MPLS的TTL减1,但是IP的TTL不变
      3. 在出节点会将IP的TTL字段的值减1

MPLS中的转发表项

MPLS体系结构
MPLS结构

  • 控制平面:负责产生和维护路由信息以及标签信息
    • RIB:路由表,控制层面,由IP路由协议生成,用于选择路由,RIB中有递归过程
    • LIB:标签信息表,控制层面,由标签分配协议生成,包含标签与FEC的对应关系,LIB包含所有的标签,无论是优的还是次优的
  • 转发平面:即数据平面,负责普通IP报文的转发以及带MPLS标签报文的转发
    • FIB:转发信息表,转发层面,数据包到达设备后查找FIB,从而知道如何转发。FIB里没有递归当去往目标路由的下一跳不是直连下一跳时,会产生递归过程如果Tunnel ID值为0,则进入正常的IP转发流程;如果Tunnel ID值不为0,则进入MPLS转发流程
    • LFIB:标签转发表,转发层面,标签与FEC的对应关系,只有最优的标签,指导标签数据包转发如果标签中的栈底标识S=1,表明该标签是栈底标签,直接进行IP转发;如果标签中的栈底标识S=0,表明还有下一层标签,继续进行下一层标签转发
      LFIB中包含两张表,ILM和NHLFE。数据进入路由器查询ILM,数据出路由器查询的是NHLFE。这些表都是通过Tunnel ID来相互关联的

MPLS VPN中的数据转发模型:

  • IP报文入站:通过路由表做转发决策,出方向的路由上有标签转发信息,则可以选择压入标签
  • 标签报文入站:通过标签转发表做出转发决策,出方向如果有标签则执行标签交换,然后转发,如果出方向没有标签,则移除标签然后路由转发

MPLS数据包的转发过程

简单流程

CE伦敦-->Ingress PE-->Egress PE-->CE巴黎
从CE到Ingress PE
从Ingress PE到CE

  1. CE将报文发给其相连的VRF接口,PE在本VRF的路由表中进行查找,得到了该路由的公网下一跳地址私网标签
  2. PE把该报文封装一层私网标签后,在公网的标签转发表中查找下一跳地址,在封装一层公网标签后,交予MPLS转发
  3. 该报文在公网上沿着LSP转发,并根据途径的每一台设备的标签转发表进行标签交换
  4. 倒数第二跳处,将外层的公网标签弹出,交给目的的PE(PE-1)设备
  5. PE设备根据内层的私网标签判断该报文属于哪一个VRF
  6. 弹出内层私网标签,在目的VRF中查找路由表,根据下一跳发给相应的CE

详细过程

MPLS数据包的转发过程
  1. IP报文进入MPLS域时,首先查看FIB表,检查目的IP地址对应的Tunnel ID值是否为0x0
    1. 如果Tunnel ID值为0x0,则进入正常的IP转发流程
    2. 如果Tunnel ID值不为0x0,则进入MPLS转发流程
  2. Ingress,通过查询FIB表和NHLFE表指导报文的转发
    1. 查看FIB表,根据目的IP地址找到对应的Tunnel ID
    2. 根据Tunnel ID找到对应的NHLFE表项,查看NHLFE表项,可以得到出接口、下一跳、出标签和标签操作类型,标签操作类型为Push
    3. 在IP报文中压入出标签,并根据QoS策略处理EXP,同时处理TTL,然后将封装好的MPLS报文发送给下一跳
  3. Transit,通过查询ILM表和NHLFE表指导MPLS报文的转发
    1. 根据MPLS的标签值查看对应的ILM表,可以得到Tunnel ID
    2. 根据Tunnel ID找到对应的NHLFE表项,查看NHLFE表项,可以得到出接口、下一跳、出标签和标签操作类型,MPLS报文的处理方式根据不同的标签值而不同:
      1. 如果标签值>=16或者=0或者=2,则用新标签替换MPLS报文中的旧标签,同时处理EXP和TTL,然后将替换完标签的MPLS报文发送给下一跳
      2. 如果标签值为3即隐式空标签,支持PHP,则直接弹出标签,同时处理EXP和TTL,然后进行IP转发或下一层标签转发
  4. Egress,通过查询ILM表指导MPLS报文的转发或查询路由表指导IP报文转发先查LFIB,再查FIB
    1. 如果收到IP报文,则查看路由表,进行IP转发
    2. 如果 收到MPLS报文,则查看ILM表获得标签操作类型,同时处理EXP和TTL
      1. 如果标签中的栈底标识S=1,表明该标签是栈底标签,直接进行IP转发
      2. 如果标签中的栈底标识S=0,表明还有下一层标签,继续进行下一层标签转发

MPLS LDP

标签分发协议,自动分配标签,自动构建LSP(标签交换隧道)
LDP默认只会为IGP分配标签,而且只为32位主机路由分配标签,可使用命令:lsp-trigger修改

思科和华为区别:
华为只为32位主机路由分配标签修改命令lsp-trigger [host | ip-prefix | all],但是思科只要满足2个分配条件就可以为FIB表中每条IGP路由单独分配一个标签,条件是开启cef和在物理接口下激活LDP,也就是说思科会为所有的IGP路由分配标签
对于默认的方式,个人觉得华为的操作更好一些。原因:个人觉得实际对互联链路分配标签没有什么用处,只会增大标签信息库的容量,MPLS在现阶段来说,对于IGP加快转发速度的作用几乎没有,主要在BGP或MPLS VPN部署时有更好的作用(当然MPLS还有其他应用),可以使核心路由器不要承载所有路由,而在部署BGP的时候,通常使用lo0建立iBGP邻居,所以LSP沿路设备只需要为BGP路由下一跳的lo0路由分配标签就可以了,互联链路的路由完全是没有作用的。

LSP形成方式:静态LSP(手动配置)和动态LSP(LDP协议生成)
静态LSP不能使用标签发布协议动态建立,需要由管理员手工配置,适用于拓扑结构简单并且稳定的网络或者某些关键数据或重要业务
静态LSP不使用标签发布协议,不需要交互控制报文,资源消耗比较小,但通过静态方式建立的LSP不能根据网络拓扑变化动态调整,需要管理员干预,所以适用于拓扑结构简单并且稳定的网络
配置静态LSP时,管理员需要为各LSR手工分配标签,需要遵循的原则是:前一节点出标签的值等于下一个节点入标签的值

LDP的消息类型

LDP消息类型
格式
字段含义

  1. 发现消息(Discovery):宣告和维护网络中一个LSR的存在
    1. 只有发现消息使用UDP承载,目的端口为646,消息中的transport address默认为LSR-ID,LSR-ID必须手动配置,且必须为路由器上某个接口地址,且必须宣告进底层路由协议进程中
    2. 链路Hello消息用于本地邻接体,即建立会话的两个LSR之间是直连的:组播地址为224.0.0.2hello默认5秒,holdtime默认15秒
    3. 目标Hello消息用于远端邻接体,即建立会话的两个LSR之间可以是直连的,也可以是非直连的:单播hello默认15秒,holdtime默认45秒
      本地邻接体和远端邻接体可以共存
  2. 会话消息(Session):建立、维护和终止LDP邻居之间的LDP会话
  3. 通告消息(Advertisement):生成、改变和删除FEC的标签映射
  4. 通知消息(Notification):宣告告警和错误信息
    LDP消息作用

LDP标签的发布与管理方式

保守标签保持方式通常与DoD方式一起,用于标签空间有限的LSR
目前设备支持如下组合方式:

  1. 下游自主方式(DU)+有序标签分配控制方式(Ordered)+自由标签保持方式(Liberal)(默认方式)
  2. 下游自主方式(DU)+独立标签分配控制方式(Independent)+自由标签保持方式(Liberal)
  3. 下游按需方式(DoD)+有序标签分配控制方式(Ordered)+保守标签保持方式(Conservative)
  4. 下游按需方式(DoD)+独立标签分配控制方式(Independent)+保守标签保持方式(Conservative)

1. 标签分配控制方式

标签分配控制方式是指在LSP的建立过程中,LSR分配标签时采用的处理方式

  1. 独立标签分配控制方式(Independent):本地LSR可以自主地分配一个标签绑定到某个FEC,并通告给上游LSR,而无需等待下游的标签
  2. 有序标签分配控制方式(Ordered):对于LSR上某个FEC的标签映射,只有当该LSR已经具有此FEC下一跳的标签映射消息、或者该LSR就是此FEC的出节点时,该LSR才可以向上游发送此FEC的标签映射

思科默认标签发布方式为独立分配,但是华为默认采用有序分配的方式
思科只要满足标签分配条件,就立即分配标签,而华为是需要等。为什么要等,因为这样能保证LSP不是断裂的,保证下游路由器分配、分布完标签后,上游路由器才能分配、分布,保证去往目的的数据包沿路都是有标签的

2. 标签发布方式

由下游LSR决定将标签分配给特定FEC,再通知上游LSR,即标签由下游指定标签的分配按从下游到上游的方向分发
标签发布方式

  1. 下游自主方式DU:对于一个特定的FEC,LSR无需从上游获得标签请求消息即进行标签分配与分发标签发布方式为DU时,系统默认支持LDP为所有对等体分标签,即每个节点都可以向所有的对等体发送标签映射消息,不再区分上下游关系
    对于目的地址为192.168.1.1/32的FEC,下游(Egress)通过标签映射消息主动向上游(Transit)通告自己的主机路由192.168.1.1/32的标签
  2. 下游按需方式DoD:对于一个特定的FEC,LSR获得标签请求消息之后才进行标签分配与分发
    对于目的地址为192.168.1.1/32的FEC,上游(Ingress)向下游发送标签请求消息,下游(Egress)收到标签请求消息后,才会向上游发送标签映射消息

3. 标签保持方式

标签保持方式是指LSR对收到的、但目前暂时不需要的标签映射的处理方式,LSR收到的标签映射可能来自下一跳,也可能来自非下一跳。

  1. 自由标签保持方式(Liberal):对于从邻居LSR收到的标签映射,无论邻居LSR是不是自己的下一跳都保留LSR可以直接利用原来非下一跳邻居发来的标签,迅速重建LSP,但需要更多的内存和标签空间
  2. 保守标签保持方式(Conservative):对于从邻居LSR收到的标签映射,只有当邻居LSR是自己的下一跳时才保留节省了内存和标签空间,但LSP的重建会比较慢

LDP邻居建立的过程

LDP发现机制

LDP发现机制用于LSR发现潜在的LDP对等体。LDP有两种发现机制:

  1. 基本发现机制:用于发现链路上直连的LSR,LSR通过周期性地组播发送LDP链路Hello消息,实现LDP基本发现机制,建立本地LDP会话
  2. 扩展发现机制:用于发现链路上非直连LSR,LSR周期性地单播发送LDP目标Hello消息到指定IP地址,实现LDP扩展发现机制,建立远端LDP会话。

LDP邻居建立过程(LDP工作过程)

1. LDP会话的建立(会话建立阶段)

LDP邻居建立过程
UDP ,646,大主动,Keeplive周期15秒、holdtime为45秒

  1. 两个LSR之间互相发送Hello消息,携带传输地址(即设备的IP地址),双方使用传输地址建立LDP会话,传输地址较大的一方作为主动方发起建立TCP连接,即LSR_1作为主动方发起建立TCP连接
  2. TCP连接建立成功后,由主动方LSR_1发送初始化消息Init,协商建立LDP会话的相关参数,包括LDP协议版本、标签分发方式、Keepalive保持定时器的值、最大PDU长度和标签空间等
  3. 被动方LSR_2收到初始化消息后,
    1. 接受相关参数,则发送初始化消息Init和Keepalive消息给主动方LSR_1
    2. 不能接受相关参数,则发送Notification消息终止LDP会话的建立
  4. 主动方LSR_1收到初始化消息后,
    1. 接受相关参数,则发送Keepalive消息给被动方LSR_2
    2. 不能接受相关参数,则发送Notification消息终止LDP会话的建立
  5. 当双方都收到对端的Keepalive消息后,LDP会话建立成功

2. LDP LSP的建立(通告阶段)

使用下游自主标签发布方式+有序标签控制方式+自由标签保持方式(默认方式)举例
LDP LSP的建立

  1. 首先发Address消息,携带本地开启LDP协议的接口地址,且只通告给邻居,邻居收到不再扩散
  2. 分发标签,使用label mapping消息含有三要素:label+FEC+LSR-ID
    1. 网络的路由改变时,如果有一个边缘节点(Egress)发现自己的路由表中出现了新的32位主机路由并且这一路由不属于任何现有的FEC
    2. 该边缘节点需要为这一路由建立一个新的FEC,为FEC分配标签,并主动向上游发出标签映射消息,标签映射消息中包含分配的标签和绑定的FEC等信息
    3. Transit收到标签映射消息后,则在其标签转发表LFIB中增加相应的条目,然后主动向上游LSR发送该FEC的标签映射消息
    4. Ingress收到标签映射消息后,在标签转发表LFIB中增加相应的条目,LSP建立完成,接下来就可以对该FEC对应的数据报文进行标签转发

路由器收到label mapping消息后的处理方式:路由器收到label mapping消息后,首先查看FEC,根据FEC查FIB表找到最优的直连下一跳,然后根据下一跳查看address消息,对应到其中的LSR-ID,然后再根据此LSR-ID查看label mapping消息中的LSR-ID,对应选用其中的label,把此label放入LFIB

MPLS VPN

私网标签分配

MP-BGP为私网路由分配标签的前提是PE上使能MPLS功能
PE通过MP-BGP发布私网路由给骨干网的其他相关的PE前,需要为私网路由分配MPLS标签(私网标签),当数据包在骨干网传输时,需要携带私网标签MPLS网络无法转发IP数据,如果没有私网标签,在PHP后会导致数据被丢弃,PE上分配私网标签的方法有如下两种:

  1. 基于路由的MPLS标签分配:为VPN路由表的每一条路由分配一个标签,这种方式的缺点是:当路由数量比较多时,设备入标签映射表ILM需要维护的表项也会增多
  2. 基于VPN实例的MPLS标签分配:为整个VPN实例分配一个标签,该VPN实例里的所有路由都共享一个标签,使用这种分配方法的好处是节约了标签

私网路由交叉

用来解决进入VPN实例之前的路由的筛选和优选
在BGP/MPLS IP VPN组网中,PE设备从CE设备收到BGP私网路由从其他PE设备收到BGP VPNv4路由后,这些收到的路由需要经过筛选才能够复制到PE设备上对应的VPN实例并发送给对应的私网站点,完成BGP/MPLS IP VPN组网的路由学习过程。其中这个对路由的筛选和复制到VPN实例的过程被称作路由交叉。根据路由来源不同,可以分为远端交叉和本地交叉:

  1. 远端交叉:从远端PE设备学习到的BGP VPNv4路由,根据其携带的ERT(Export Target)属性值,逐个与本地的VPN实例下配置的IRT(Import Target)进行匹配。如果能够匹配则将这条BGP VPNv4路由转换成BGP私网路由,然后复制一份到该VPN实例路由表中
  2. 本地交叉将PE上某一个VPN实例下的路由根据ERT、IRT的匹配规则(和远端交叉的规则一样)复制到其他VPN实例路由表中,本地交叉的路由包括本地引入的路由和从私网邻居学到的路由
    私网路由交叉

远端交叉
如果远端PE发来的两条BGP VPNv4路由的RD值相同,则会由于这两条路由无法同时交叉进入BGP VPN实例,而导致无法实现VPN FRR功能或PE间的私网路由负载分担功能

  1. PE1从PE2、PE3和PE4收到BGP VPNv4路由后会将这些路由存放至BGP VPNv4路由表中
  2. 由于PE2和PE3上VPN实例的RD值相同,因此PE2和PE3发来的BGP VPNv4路由也是相同的,所以PE1将会从这两条路由中选择出最优路由(本例中最优路由为PE3发来的路由)。这条最优路由将会和PE4发来的路由一起转换成不带RD值的BGP私网路由并交叉进入到BGP VPN实例路由表中
  3. PE3和PE4发来的BGP VPNv4路由在去掉RD值后,将转换成两条相同的BGP私网路由,这两条BGP私网路由将继续进行选路,即选择出一条最优BGP私网路由下发至私网IP路由表中

公网隧道迭代(隧道迭代是什么意思,以及作用)

运营商并不想用其核心路由器承载所有的路由,即对于用户的公网IP(或者私网)不是通过IGP路由传递,那么可以采用隧道迭代来实现使用隧道来传递用户的公网IP(或者私网)的数据。即运行商通过LSP来传递用户流量,从而达到不用学习用户路由的目的
本质:为远端交叉的路由分配一条LSP,用来承载远端交叉成功的路由的数据
为了将私网流量通过公网传递到另一端,需要有一条公网隧道承载这个私网流量,因此私网路由交叉完成后,需要根据目的IPv4前缀进行路由迭代,查找合适的隧道(本地交叉的路由除外非标签的公网路由和静态路由不会进行隧道迭代),只有隧道迭代成功,该路由才被放入对应的VPN实例路由表。将路由迭代到相应的隧道的过程叫做隧道迭代。
隧道迭代成功后,保留该隧道的标识符(Tunnel ID),供后续转发报文时使用。Tunnel ID用于唯一标识一条隧道,VPN报文转发时根据Tunnel ID查找对应的隧道,然后从隧道上发送出去
隧道迭代可用来解决路由黑洞
解决路由黑洞
40.0.0.0地址被network到BGP中,40.0.0.0的路由是没有标签的,所以40.0.0.0的路由无法通过LSP传递到R1上,需要使用一条命令route recursive-lookup tunnel使能迭代隧道功能, 把所有的路由都迭代到LSP中,那么40.0.0.0的路由就可以通过4.4.4.4的LSP进行转发。

配置route recursive-lookup tunnel命令之后,
非标签公网路由既可以迭代到有LSP隧道的路由并且继承这条LSP隧道,也可以迭代到IP路由,这样迭代结果就会出现两条等价路由,两者形成负载分担,一条走LSP隧道转发,一条走IP转发。
如果两条链路中IP转发的链路不通,走IP转发的流量会被丢弃,导致业务中断。
为了解决上述问题,可以指定参数only,使非标签公网路由只迭代有LSP隧道的路由,如果LSP隧道路由不存在,则迭代不成功。

私网路由的选择规则

经过路由交叉和隧道迭代的路由并不是全部被放入VPN实例路由表。从本地CE收到的路由和本地交叉路由也不是全部被放入VPN实例路由表。

  1. 对于到同一目的地址的多条路由,如果不进行路由的负载分担,则选路的优先级:从CE收到的路由>本地交叉的路由>从其他PE接收并交叉成功的路由
  2. 对于到同一目的地址的多条路由,如果进行路由的负载分担,则:负载分担的AS_PATH属性必须完全相同
    1. 优先选择从本地CE收到的路由,只有一条从本地CE收到的路由而有多条交叉路由的情况下,也只选择从本地CE收到的路由
    2. 只在从本地CE收到的路由之间分担或只在交叉路由之间分担,不会在本地CE收到的路由和交叉路由之间分担

路由发布

VPN路由信息的发布涉及CE和PE,P设备只维护骨干网的路由,不需要了解任何VPN路由信息,PE设备一般维护所有VPN路由
VPN路由信息的发布过程包括三部分

  1. 本地CE到入口PE
    1. CE与直接相连的PE建立邻居或对等体关系后,把本站点的IPv4路由发布给PE,CE与PE之间可以使用静态路由、RIP、OSPF、IS-IS或BGP,无论使用哪种路由协议,CE发布给PE的都是标准的IPv4路由
  2. 入口PE到出口PE
    1. PE从CE学到VPN路由信息后,存放到VPN实例中,同时,为这些标准IPv4路由增加RD,形成VPN-IPv4路由
    2. 入口PE通过MP-BGP的Update报文把VPN-IPv4路由发布给出口PE,Update报文中携带Export VPN Target(RT)属性及MPLS标签
    3. 出口PE收到VPN-IPv4路由后,在下一跳可达的情况下进行路由交叉、隧道迭代和路由优选,然后决定是否将该路由加入到VPN实例的路由表,被加入到VPN路由表的路由,本地PE为其保留MPLS标签值和Tunnel ID
  3. 出口PE到远端CE
    1. 远端CE有多种方式可以从出口PE学习VPN路由,包括静态路由、RIP、OSPF、IS-IS和BGP,与本地CE到入口PE的路由信息交换相同
路由发布
  1. 在CE2的BGP IPv4单播地址族下引入IGP路由
  2. CE2将该路由随EBGP的Update消息一起发布给Egress PE,Egress PE从连接CE2的接口收到Update消息,把该路由转化为VPN IPv4路由,加入对应的VPN实例路由表
  3. Egress PE为该路由分配MPLS标签,并将标签和VPN IPv4路由信息加入MP-IBGP的Update消息中的NLRI字段中,Export-RT属性加入MP-BGP Update消息的扩展团体属性字段中,将Update消息发送给Ingress PE
  4. Ingress PE对该路由进行路由交叉,交叉成功则根据路由目的IPv4地址进行隧道迭代,查找合适的隧道,如果迭代成功,则保留该隧道的Tunnel ID和标签,并将路由加入该VPN实例路由表
  5. Ingress PE把该路由通过BGP Update消息发布给CE1,此时路由是普通IPv4路由,CE1收到该路由后,把该路由加入BGP路由表,通过在IGP中引入BGP路由的方法可使CE1把该路由加入IGP路由表

报文转发

VPN报文转发采用两层标签方式:
第一层(公网)标签在骨干网内部进行交换,指示从PE到对端PE的一条LSP。VPN报文利用这层标签,可以沿LSP到达对端PE
第二层(私网)标签在从对端PE到达CE时使用,指示报文应被送到哪个Site,或者到达哪一个CE,即对端PE根据内层标签可以找到转发报文的接口
报文转发

  1. CE1发送一个VPN报文
  2. Ingress PE从绑定了VPN实例的接口上接收VPN数据包后进行如下操作:
    1. 根据绑定的VPN实例的RD查找对应VPN的转发表
    2. 匹配目的IPv4前缀,查找对应的Tunnel ID即根据目标IP地址查找LFIB
    3. 将报文打上对应的私网标签(I-L),根据Tunnel-ID找到隧道
    4. 将报文从隧道发送出去,此例的隧道是LSP,则打上公网(外层)MPLS标签头(O-L1)接着,该报文携带两层MPLS标签穿越骨干网,骨干网的每台P设备都对该报文进行外层标签交换
  3. Egress PE收到该携带两层标签的报文,交给MPLS协议处理,MPLS协议将去掉外层标签此例最后的外层标签是O-L2,但如果应用了倒数第二跳弹出,则此标签会在到达Egress PE之前的一跳弹出,Egress PE只能收到带有内层标签的报文
  4. Egress PE看见内层标签后,发现该标签处于栈底,将内层标签剥离即内层标签用于数据到达远端之后,决定转发至哪个接口(vrf里面);外层标签用于在MPLS核心网中转发数据
  5. Egress PE将报文从对应出接口发送给CE2,此时报文是个纯IP报文,报文就成功地从CE1传到CE2了,CE2按照普通的IP转发过程将报文传送到目的地

补充提问

部署PE-CE路由的小提示

  1. 如果使用静态,则PE需要在vrf下写静态
  2. 如果使用IGP,则需要双向重分布
  3. 如果是BGP,则不需要重分布,但PE在vrf地址族下做配置:
    1. 内层标签由PE MP-BGP分配,标识报文到达本PE后转发至哪个出接口或者vrf
    2. 外层标签由LDP分配,在核心网依据外层标签转发
    3. 标签在产生VPNv4路由时,由MP-BGP分配,同时标签将跟随路由更新给对等体

基本组网

1. Intranet VPN

一个VPN中的所有用户形成闭合用户群,相互之间能够进行流量转发,VPN中的用户不能与任何本VPN以外的用户通信
需要为每个VPN分配一个VPN Target,作为该VPN的Export Target和Import Target,并且,此VPN Target不能被其他VPN使用
Intranet VPN
PE上为VPN1分配的VPN Target值为100:1,为VPN2分配的VPN Target值为200:1,VPN1的两个Site之间可以互访,VPN2的两个Site之间也可以互访,但VPN1和VPN2的Site之间不能互访

2. Extranet VPN

某个VPN需要访问共享站点,则该VPN的Export Target必须包含在共享站点的VPN实例的Import Target中,而其Import Target必须包含在共享站点VPN实例的Export Target中
Extranet VPN
PE3能够接收PE1和PE2发布的VPN-IPv4路由,同时PE3发布的VPN-IPv4路由能够被PE1和PE2接收,因此,VPN1的Site1和Site3之间能够互访,VPN2的Site2和VPN1的Site3之间能够互访
PE3不把从PE1接收的VPN-IPv4路由发布给PE2,也不把从PE2接收的VPN-IPv4路由发布给PE1,因此,VPN1的Site1和VPN2的Site2之间不能互访

3. Hub and Spoke(如何使用RT值来搭建Hub-Spork的网络环境)

在VPN中设置中心访问控制设备,其它用户的互访都通过中心访问控制设备进行
中心访问控制设备所在站点称为Hub站点,其他用户站点称为Spoke站点,Spoke站点需要把路由发布给Hub站点,再通过Hub站点发布给其他Spoke站点,Spoke站点之间不直接发布路由,Hub站点对Spoke站点之间的通讯进行集中控制。
对于这种组网情况,需要设置两个VPN Target,一个表示Hub,另一个表示Spoke
Hub and Spoke
各Site在PE上的VPN实例的VPN Target设置规则为:

  1. Spoke-PE:Export Target为Spoke,Import Target为Hub,任意Spoke-PE的Import Route Target属性不与其它Spoke-PE的Export Route Target属性相同;
  2. Hub-PE:Hub-PE上需要使用两个接口或子接口:
    1. 一个用于接收Spoke-PE发来的路由,其VPN实例的Import Target为Spoke
    2. 一个用于向Spoke-PE发布路由,其VPN实例的Export Target为Hub

RT与RD的作用

  1. VRF
    目的是解决不同企业私网地址段相同而冲突的问题,采用将相同私网地址放到不同的VRF表中。VRF区分不同CE端进来边界PE的相同私网路由,路由器的每一个VRF都自动生成相应VRF表,每张VRF表都具有路由区分符RD和路由目标RT两大属性
  2. RD区分实例,标记路由,本地有效,区分不同站点的相同路由,但不具有选路能力,也不影响路由接收和优选
    8个字节的RD+4个字节的IPv4地址组成96位VPNv4路由使不唯一的IPv4地址转化为唯一的VPN-IPv4地址,该VPNv4路由在ISP域内传递(区分),RD与路由一起被携带在BGP Update报文中发布给对端RD给某VRF里面的路由打上标签,进而实现地址的复用而不产生冲突。RD用来区分本地VRF,该属性仅本地有效
  3. RT对路由进行控制,控制路由的导入与导出
    BGP的扩展团体属性,它分成Import RT和Export RT,分别用于路由的导入、导出策略,即RT是控制一个VRF里面可以发出和接受什么样的路由,RT具有全局唯一性,并且只能被一个VPN使用。通过配置import和export RT,来控制收发路由:
    1. 当从VRF表中导出VPN路由时,要用Export RT对VPN路由进行标记
    2. 当往VRF表中导入VPN路由时,只有所带RT标记与VRF表中任意一个Import RT相符的路由才会被导入到VRF表中

什么是VPNv4路由

通过把64bit的RD值+32bit0的IPv4的路由就形成了96bit的VPNv4路由

常见的扩展团体属性有哪些

  1. RT
  2. cost-community
  3. SoO

SoO

SoO用于在多出口情况下阻止环路,唯一的SoO值必须为每个VPN站点配置,应用于PE-CE连接的接口下,其本质是不把收到的路由再传给客户站点部署在PE的vrf接口下,其值一般为ASN:nn或者IP-address:nn
【注意】:SOO的防环机制,是在PE传递路由给CE的时候,检查出接口配置的SOO值是否与从其他MP-BGP邻居收到的VPNv4路由的SOO值一致,如果一致,就不传给CE,而不是PE不接收从CE或者其他设备发来的和SoO值相同的路由

原理

  1. 从CE收到的路由引入MP-BGP,增加扩展团体属性值自定义SoO
  2. 其它PE设备不将携带特定SoO属性值的路由传递给同站点的CE
  3. 相同SoO值,被PE认为是同站点

举例说明

举例说明
  1. 在PE1上针对CE1对等体指定SoO属性,该属性相当于标识了CE1所在Site
  2. 当CE1发布路由给PE1时,PE1为这些路由携带上该SoO属性
  3. PE1通过骨干网将这些路由发布给PE2时也将携带此SoO属性
  4. PE2将这些路由发布给自己的CE2对等体时,如果PE2发现路由中携带的SoO属性与其上针对CE2对等体配置的SoO属性相同,说明这些路由就是由该Site(CE1所在的site)发出的,从而拒绝将路由发布给CE2对等体,从而避免了VPN site内路由环路的产生

命令policy-vpn-target的作用

收到一条VPNv4路由,要查看RT值是否和自己的import方向的RT值是否相同,如果不同则不收。
如果undo掉这个功能,那么收到了一条VPNv4的路由首先会收入自己的VPNv4路由表,再查看是否对应自己的RT值,如果不匹配则只存在于自己的VPNv4路由表中,不会放入实例路由表。

双标签的作用,由哪种协议分配

公网标签负责数据在公网的传输,私网标签指导数据进入相应的实例
公网标签由LDP分配,私网标签由MP-BGP分配。
如果只有公网标签的话,由于LDP分配的3号标签会进行次末跳弹出,进行IPV4转发,但是在MPLS VPN中并不识别IPV4的路由,就无法转发数据包而丢弃,所以这时需要通过内层标签,进行转发,通过标签与实例的对应关系,就知道转发到哪个实例。

MPLS域内汇总会产生什么问题

1. 针对内部路由进行汇总(LSP中断)

隧道中断,但是报文依旧能到达
针对内部路由进行汇总
在R3上针对R1的1.1.1.1/32的路由进行汇总,汇总成1.1.1.0/24位并抑制了1.1.1.1/32,此时由于不是32位的主机路由,R3将汇总后的路由通过IGP协议通告给其他路由器之后,其他路由器并不会给这个汇总路由分配标签,造成在R3、R4、R5上没有1.1.1.0/24路由的标签,导致LSP断裂
此时数据转发流程:R5访问1.1.1.1时,R5上没有1.1.1.1/32,只有汇总后的路由,所以在R3到R5之间进行IGP转发;当数据到达R3时,命中更加精确的路由1.1.1.1/32,然后在R1到R3之间通过标签转发,走LSP通道

2. 针对所有路由进行标签分配(LSP不连续)

内部路由汇总之后导致LSP中断,究其原因是LDP不为非主机路由分配标签,如果通过修改标签分配方式使其能为汇总路由分配标签,则会导致隧道不连续,即针对两条路由生成两条不相干的LSP,但是报文依旧能够到达,并且都是通过标签交换
针对所有路由进行标签分配
即在R3、R4、R5使用命令lsp-trigger all(或者配置ip-prefix)来为汇总路由分配标签,从而在R3到R5之间为汇总路由重新生成一条LSP,数据在R1与R3之间走隧道1,在R3与R5之间走隧道2

lsp-trigger命令和lsp-trigger bgp-label-route命令都用于配置LDP LSP的触发建立策略,前者适用于静态路由和IGP路由;后者仅适用于带标签的公网BGP路由
不推荐配置lsp-trigger all命令,因为配置该命令后,所有IGP路由会触发LDP建立LSP,导致LSP数量庞大,占用过多的系统资源。如果需要配置该命令,可以先配置路由过滤策略,减少路由数量,从而减少路由触发LDP建立的LSP的数量,节约系统资源

3. 针对BGP路由(路由黑洞)

客户的路由时100.1.1.1,另一个R6想要访问100.1.1.1,运行商不想让其核心路由器承担过多的路由,此时可以使用隧道来传输用户的数据,也就是在R1和R5上开启隧道迭代功能
汇总导致BGP路由没有隧道迭代,且运营商设备无用户路由导致丢包
针对BGP路由
在R1和R5上使用命令route recursive-lookup tunnel开启路由的迭代隧道的功能,此时R6可以通过运营商建立的LSP访问到100.1.1.1
但是刚才在R3上做了域内路由的汇总导致标签断裂,汇总导致BGP路由没有隧道迭代,就会去根据下一跳去转发,R5发送给R4,R4查路由表没有100.1.1.1的路由,R4会进行丢包
虽然之后又对汇总路由分配了标签,但LSP依然是不连续的,会在R3上进行丢包,因为在R3上剥离了标签3000之后露出的是目的IP 100.1.1.1,R3上也没有此路由,又会导致丢包

4. 针对私网路由汇总

针对私网路由汇总
R2、R3、R4只运行IGP协议,不运行BGP协议
VPN路由,下一跳对应的隧道必须是32位的,在R5上做了汇总之后就不是32位,无法加入到VRF路由表,直接在始发节点丢包,因为没有路由

MPLS VPN中的防环技术

  1. OSPF防环本质是只接收不选路:通过DN位防止3类LSA环路但DN位可用于所有LSA防环,即不接收DN位置位的LSA;通过TAG防止5类LSA(和7类)的环路,即在TAG中包含BGP的AS号,如果在TAG中包含本地的AS号,5类LSA不接收OSPF接入MPLS VPN之后的防环机制:内部路由up/down比特设置、外部路由利用TAG防环(CE双归属等)
  2. BGP防环本质是入方向路由标记、然后对标记的路由在出方向进行过滤,即对从CE收到的路由进行标记,PE之间可以传递,但其他PE不会再传递给CE:使用SoO进行防环

BGP防环
PE3传递路由给PE1,引进后发给CE,再转发给PE2,PE2经骨干网再传递给PE1,从而产生路由震荡或环路
解决方法

  1. PE-CE之间运行OSPF,PE1传递给CE时D/N位置位或打上tag(tag用AS号标识),PE2接收但不计算,从而防环
  2. PE-CE之间运行bgp,在BGP中的VPN下配置SoO值(PE1和PE2的值必须相同),PE2发现路由中携带的SoO属性,与其针对CE配置的SoO属性相同,则不会将路由发布给CE,从而防环

BGP属性值为16的扩展属性会携带些什么东西(即BGP的扩展团体属性会携带什么)

详情请参考http://www.h3c.com/cn/d_201010/922164_30005_0.htm

  1. Export RT值携带于此扩展属性中
  2. 如果PE与CE之间运行ospf协议还会携带DomainID、LsaType、RouterID、AreaID
    1. DomainID 的作用:
      1. 用于还原ospf原来的一些属性
        1. 在DomainID相同的时候,原来的1/2/3类lsa传入对端CE之后变为3类lsa,5 类还是5类,7类还是7 类;
        2. DomainID不同的时候,原来的1/2/3/5类lsa都变为5类lsa,7 类还是7类
      2. sham-link可以还原原来所有的属性值:在传递VPNv4路由的时候用属性值为14和15的传递VPNv4路由,RD值以及私网标签,14传递可达路由,15传递需要撤销的路由

CE双归属时与PE间实例运行ISIS会有什么问题

可能会产生路由不稳定和环路问题
运行ISIS会有什么问题
CE1双归属到PE2和PE3,且CE1、PE2、PE3之间运行ISIS。
CE2上的10.1.2.0/24的路由通过PE4传递到PE2和PE3。PE2 将实例中的BGP路由引入到ISIS中,该路由通过CE1传递到PE3上,由于ISIS路由的优先级为15,高于PE3的实例中10.1.2.0/24的BGP的路由。(PE3访问CE2走的是PE3--CE1--PE2--PE4--CE2)
此时,在PE3上如果把实例中的ISIS路由引到BGP中,该路由会成为VPNv4的路上传递给PE4和PE2,造成路由环路
解决方法
在PE2将实例中的BGP的路由引入到ISIS中时为路由打上Tag,在对端的PE3上的ISIS进程下使用filter-policy过滤到该tag对应的路由条目,防止它出现在PE3实例的路由表中,同时在PE3上引入BGP路由时也采取相同的措施。

由于PE把BGP路由引入到了ISIS,因此PE上ISIS能把这些路由发布出去,并通过CE让对方ISIS学习到路由,且该路由的属性是ISIS路由。默认情况下,ISIS路由优先级比BGP路由优先级高,因此在路由选择时,ISIS路由被优选。
由于BGP路由变成 Inactive,导致PE上不能引入该BGP路由,于是产生了路由不稳定。
在防环上,ISIS不像OSPF那样完善,ISIS协议本身不防环路,因此需要在PE的ISIS在引入BGP路由时,给路由打上tag标记。对端PE学习到路由后,通过策略过滤这些路由,使它不进入另一个PE实例下的路由表。

MPLS中LSP的备份方式

1. IP的FRR

IP的FRR
R3有个30网段,默认情况下R2优选1号链路到30网段,当链路断掉后再通过R1到30网段,设备上会有个路由表RIB,RIB存放的是去往目的网段最优的,数据转发的时候用的FIB表,FIB是根据RIB生成的。
当R2与R3之间的链路断掉后,FIB、RIB里都没了,所以需要路由收敛,路由收敛是有一定时间的,会重新计算RIB,R2去往30网段的下一跳会变成R1,根据新的RIB生成FIB,然后数据才能转发,所以无论什么协议如果一直有连续的数据过来的话,那么肯定会有丢包了,所以IP的FRR就是来解决这个问题。
IP的FRR解决思路
去往30网段有2条路径,可以在FIB表里形成一条备份的路径,配置方法很简单,只需要在route-policy ip_frr_rp permit xxx指定备份出接口和备份下一跳,并在系统试图下或者VPN实例中使能ip frr route-policy ip_frr_rp

2. LDP的FRR

LDP的FRR
默认情况R2去往40网段的下一跳还是R3,MPLS中有4张表,分别是RIB、FIB、LIB和LFIB,其中LFIB是根据FIB和LIB组合成LFIB,所以在MPLS中数据转发就看LFIB,所以R2去往40网段肯定会对应一个LFIB。
假设R3给R2分发的是3000,也就是说在R2的FLIB表中,肯定有一个3000标签对应40网段,如果访问40 网段就用标签3000转发出去。
R3给R2分配的3000标签,也肯定会给R1分配,假设分配的是4000,R1也要针对40网段给R2分标签,假设分配5000,所以R2针对40网段可以收到2个标签:一个R3分配的3000,一个R1分配的5000。
标签保持方式有两种:

  1. 自由标签保持方式,即R2把5000和3000都放进LIB中,但是5000标签会被标记不是最优的
  2. 保守标签保持方式,即R2只保留最优的,只会将3000放进LIB,5000则会被丢弃

标签发布方式也有两种:

  1. 自主发布方式,即对R4来说,不管有没有设备访问40网段,都会给40网段分配标签
  2. 按需发布方式,即R4虽然有40网段,但是R3不去访问这个网段,R4不会分配标签如果R4的路由表非常庞大,为每个路由都分配一条标签就会占用系统资源以及标签资源,为了节省资源可以采用按需发布和保守标签保持方式相结合

标签分配方式也有两种:

  1. 独立标签分配方式,即R3不管R4有没有给40网段分配标签,R3都会给40网段分配标签
  2. 有序标签分配方式,即R3如果没有收到R4给40网段分配的标签,那么R3也不会分配给40标签

R2去往40有两个标签,3000和5000,由于3000的标签更优,所以会把3000的标签加到LFIB表里,假如R2-R3之间的链路断掉以后,4个表都没了,这个时候有数据过来的时候肯定会造成丢包,这时候就可以用到LDP的FRR的技术。
LDP的FRR解决思路
R2会把5000也放入LFIB,但会标明是一个备份的标签,当3000标签失效后,立马切换到5000,这就可以避免数据包的丢包
配置时分为两种办法
在手工配置的LDP FRR和LDP Auto FRR同时满足创建条件的时候,优先建立手工配置的 LDP FRR

  1. 手动
    指定建立的备份LSP的出接口和下一跳,当Liberal Label的来源匹配到指定的出接口和下一跳的时候,就能够建立备份LSP并下发转发表项
  2. 自动
    LDP Auto FRR依赖IP FRR来实现即需要使能IGP协议与LDP之间的同步功能,LDP Auto FRR策略默认是32位的备份路由触发LDP建立备份LSP
    1. 在R1、R2、R3上配置ospf,实现骨干网的IP连通性
    2. 配置LDP,实现LDP LSP承载网络业务(准备工作)
    3. 在R2和R3上配置静态BFD,实现快速检测LSP故障
    4. 在R2上配置LDP Auto FRR,实现主备切换时尽可能避免流量丢失
# ospf配置(接口视图)
ospf timer ldp-sync hold-down 时间(默认10秒)

# isis配置(进程下)
timer ldp-sync hold-down 时间(默认10秒)

跨域VPN

OptionA

需要跨域的VPN在ASBR间通过专用的接口管理自己的VPN路由,也称为VRF-to-VRF
OptionA
OptionA
两个AS的边界ASBR直接相连,ASBR同时也是各自所在自治系统的PE,两个ASBR都把对端ASBR看作自己的CE设备,将会为每一个VPN创建VPN实例,使用EBGP方式向对端发布IPv4路由

1. 路由传递

路由传递
  1. 配置:
    1. 各AS内部正常建立IGP邻居关系并且运行MPLS LDP
    2. 各PE上创建VPN实例,并与接口相绑定
    3. R2与R3、R4与R5分别建立VPNv4邻居关系即区域内PE之间建立VPNv4邻居,R3与R4的两个实例之间建立IPv4的邻居关系
  2. 路由传递:
    1. R1上的IPv4路由传递到R2,R2将其引入VPNv4路由表后,携带私网标签L1、RT、下一跳等传递给R3
    2. R3收到之后,匹配RT值,剥离RD和私网标签引入实例2中,以IPv4路由传递给R4
    3. R4从实例3收到IPv4路由,将其引入VPNv4路由表后,携带私网标签L2、RT、下一跳等传递给R5,R5 匹配RT值后,剥离RD和私网标签引入实例4中

2. 数据转发

数据转发
  1. R6封装正常IPv4数据包转发给R5
  2. R5收到数据包查实例的FIB,先封装私网标签L2,再封装去往R4的公网标签Lx,然后转发出去
  3. R4收到数据包后,查找标签转发表,找到对应实例3,剥离私网标签L2后转发给R3
  4. R3收到数据包查实例的FIB,先封装私网标签L1,再封装去往R2的公网标签Ly,然后转发出去
  5. R2收到数据包后,查找标签转发表,找到对应实例1,剥离私网标签L1后转发给R1

3. 特点

在需要跨域的VPN数量比较少的情况,可以优先考虑使用

  1. 优点:配置简单,由于ASBR之间不需要运行MPLS,也不需要为跨域进行特殊配置
  2. 缺点
    1. 可扩展性差:由于ASBR需要管理所有VPN路由,为每个VPN创建VPN实例,这将导致ASBR上的VPN-IPv4路由数量过大
    2. 对PE(ASBR)设备要求高:由于ASBR间是普通的IP转发,要求为每个跨域的VPN使用不同的接口,从而提高了对PE设备的要求
    3. 对中间域影响大:如果跨越多个自治域,中间域必须支持VPN业务,不仅配置量大,而且对中间域影响大。

OptionB

ASBR间通过MP-EBGP发布标签VPN-IPv4路由,也称为EBGP redistribution of labeled VPN-IPv4 routes
OptionB
OptionB
ASBR接收本域内和域外传过来的所有跨域VPN-IPv4路由,通过undo policy vpn-target,让ASBR不进行VPN Target匹配把收到的VPN路由全部保存下来,而不管本地是否有和它匹配的VPN实例。这种方案的优点是所有的流量都经过ASBR转发,使流量具有良好的可控性,但ASBR的负担重。
可以同时使用BGP路由策略(如对RT的过滤),使ASBR上只保存部分VPN-IPv4路由。

1. 路由传递

路由传递
  1. 配置:
    1. 各AS内部正常建立IGP邻居关系并且运行MPLS LDP,R3与R4之间运行MPLS即可
    2. 各PE上创建VPN实例,并与接口相绑定
    3. R2与R3、R4与R5分别建立 IBGP VPNv4邻居关系,R3与R4之间建立EBGP VPNv4邻居关系且 R3和R4上需要undo policy vpn-target(保留所有VPN路由),并且在R3与R4上都对VPNv4路由交换内层标签,域间的标签由BGP携带,因此ASBR之间不需要运行LDP
  2. 路由传递:
    1. R1上的IPv4路由传递到R2,R2将其引入VPNv4路由表后,携带私网标签L1、RT、下一跳等传递给R3
    2. R3重新为该路由分发私网标签L2,然后携带私网标签L2、RT、下一跳等传递给R4由于MP-EBGP在传递路由时,需要改变路由的下一跳,所以ASBR向外发布VPNv4路由时会分配新标签
    3. R4重新为该路由分发私网标签L3,然后携带私网标签L3、RT、下一跳等传递给R5R4和R5向域内的MP-IBGP对等体发布路由时,将下一跳改为自己
    4. R5匹配RT值后,剥离RD和私网标签引入实例2中

2. 数据转发

数据转发
  1. R6封装正常IPv4数据包转发给R5,R5收到数据包查实例的FIB,先封装私网标签L3,再封装去往R4的公网标签Lx,然后转发出去
  2. R4收到数据包后,根据私网标签L3查找标签转发表,找到对应的出标签私网标签L2,然后封装私网标签L2,不封装公网标签,直接转发给R3
  3. R3收到数据包后,根据私网标签L2查找标签转发表,找到对应的出标签私网标签L1,然后封装私网标签L1,再封装去往R2的公网标签Ly,之后转发出去
  4. R2收到数据包后,查找标签转发表,找到对应实例1,剥离私网标签L1后转发给R1

3. 特点

  1. 优点:不受ASBR之间互连链路数目的限制
  2. 缺点
    1. ASBR负担重:由于VPN的路由信息是通过AS之间的ASBR来保存和扩散的,当VPN路由较多时,ASBR负担重,容易成为故障点。因此在MP-EBGP方案中,需要维护VPN路由信息的ASBR一般不再负责公网IP数据转发

OptionC

PE间通过Multi-hop MP-EBGP发布标签VPN-IPv4路由,也称为Multihop EBGP redistribution of labeled VPN-IPv4
OptionA和OptionB存在的共同问题
都需要ASBR参与VPN-IPv4路由的维护和发布,当有大量的VPN路由需要交换时,ASBR负担过重,可能成为故障点
解决上述问题的方案是:ASBR不维护或发布VPN-IPv4路由,PE之间直接交换VPN-IPv4路由

  1. ASBR通过MP-IBGP向各自AS内的PE设备发布标签IPv4路由,并将到达本AS内PE的标签IPv4路由通告给它在对端AS的ASBR对等体,过渡AS中的ASBR也通告带标签的IPv4路由。这样,在入口PE和出口PE之间建立一条LSP
  2. 不同AS的PE之间建立Multihop方式的EBGP连接,交换VPN-IPv4路由
  3. ASBR上不保存VPN-IPv4路由,相互之间也不通告VPN-IPv4路由

方案一

方案一
方案一

1. 路由传递

路由传递
  1. 配置:
    1. 各AS内部正常建立IGP邻居关系并且运行MPLS LDP,R3与R4之间运行MPLS即可
    2. 各PE上创建VPN实例,并与接口相绑定
    3. R2与R3、R4与R5分别建立IBGP IPv4邻居关系方案二不需要此配置,R3与R4之间建立EBGP IPv4邻居关系
    4. ASBR上的重点配置
      1. 将域内设备(主要是PE设备)的环回口路由引入进BGP,方法是通过前缀列表的方式在BGP中引入域内的IGP路由
  2. 路由传递:
    1. 在R3上把R2的loopback的32位地址宣告进BGP,并为其分配公网标签L9,然后传递给EBGP IPv4邻居R4
    2. R4收到路由后为该32位loopback地址分配公网标签L10,然后单播传递给IBGP IPv4邻居R5
    3. 同理,R4上宣告R5的loopback地址进BGP,然后传递给R3,之后传递给R2。至此,R2和R5上相互知道对端loopback地址后建立EBGP VPNv4邻居关系
    4. R1上的IPv4路由传递到R2,R2将其引入VPNv4路由表后,携带私网标签L3、RT、下一跳等单播传递给R5
    5. R5匹配RT值后,剥离RD和私网标签引入实例2中

2. 数据转发

数据转发
  1. R6封装正常IPv4数据包转发给R5,R5收到数据包查实例的FIB,先封装私网标签L3,再封装去往R2的公网标签L10,最后封装去往R4的公网标签Lx,之后转发出去
  2. R4收到数据包后,根据公网标签L10查找标签转发表,找到对应的出标签公网标签L9,然后封装公网标签L9,转发给R3
  3. R3收到数据包后,根据公网标签L9查找标签转发表,找到对应的出标签公网标签Ly,然后封装私网标签Ly,之后转发出去
  4. R2收到数据包后,查找标签转发表,找到对应实例1,剥离私网标签后转发给R1

3. 特点(OptionC方案的特点)

  1. VPN路由在入口PE和出口PE之间直接交换,不需要中间设备的保存和转发
  2. VPN的路由信息只出现在PE设备上,而P和ASBR只负责报文的转发,使得中间域的设备可以不支持MPLS VPN业务,只需支持MPLS转发,ASBR设备不再成为性能瓶颈,因此更适合在跨越多个AS时使用
  3. 更适合支持MPLS VPN的负载分担
  4. 缺点是维护一条端到端的PE连接管理代价较大

方案二

方案二
AS内的PE和ASBR之间不再需要建立IBGP邻居

1. 路由传递

  1. 配置:
    1. 各AS内部正常建立IGP邻居关系并且运行MPLS LDP,R3与R4之间运行MPLS即可
    2. 各PE上创建VPN实例,并与接口相绑定
    3. R3与R4之间建立EBGP IPv4邻居关系
    4. ASBR上的重点配置
      1. 需要在mpls中配置lsp-trigger bgp-label-route,为标签数据再分配一层标签
      2. 需要将BGP的路由引入IGP,同时修改IBGP的路由的优先级小于IGP
  2. 路由传递:
    1. 在R3上把R2的loopback的32位地址宣告进BGP,并为其分配公网标签L9,然后传递给EBGP IPv4邻居R4
    2. R4收到路由后将该32位loopback地址引入进IGP中,然后逐跳传递到R5方案二因为AS内没有IBGP邻居关系,所以需要将该路由引入IGP
    3. 同理,R4上宣告R5的loopback地址进BGP,然后传递给R3,之后引入到IGP中,然后逐跳传递到R2。至此,R2和R5上相互知道对端loopback地址后建立EBGP VPNv4邻居关系
    4. R1上的IPv4路由传递到R2,R2将其引入VPNv4路由表后,携带私网标签L3、RT、下一跳等单播传递给R5
    5. R5匹配RT值后,剥离RD和私网标签引入实例2中

2. 数据转发(和方案一相同)

  1. R6封装正常IPv4数据包转发给R5,R5收到数据包查实例的FIB,先封装私网标签L3,再封装去往R4的下一跳的公网标签Lx,之后转发出去
  2. R4收到数据包后,根据公网标签L10查找标签转发表,找到对应的出标签公网标签L9,然后封装公网标签L9,直接转发给R3
  3. R3收到数据包后,根据公网标签L9查找标签转发表,找到对应的出标签公网标签Ly,然后封装私网标签 Y,之后转发出去
  4. R2收到数据包后,查找标签转发表,找到对应实例 1,剥离私网标签后转发给R1

# 草稿备份
## MPLS域内汇总会产生什么问题
### 1. 对MPLS LDP路由进行汇总:标签断裂,可正常访问
4台路由器IGP运行RIP,**互联接口和环回接口**都发布在RIP中,全部运行MPLS,建立LDP邻居。
**汇总点**在AR3上把去往10.4.4.4/32的环回接口汇总为10.4.4.0/24发送给AR2和AR1。
![对MPLS LDP路由进行汇总](https://fqj-web.github.io/post-images/1614164171707.png)
R4给10.4.4.4这条FEC分发3号标签给R3,R3收到给R2分发1024的标签。R2收10.4.4.4/32到后,因为其路由表中只有10.4.4.0/24这条路由,没有10.4.4.4/32这条路由,**所以会闲置此标签(1024)**,并不会继续给R1分标签。导致R1到R3之间**只能正常IP包转发**,R3收到后会查标签转发表。
**解决方法**:
R3上为10.4.4.0/24指静态路由,指向null 0,且使用`lsp-trigger all`。R3会开始为10.4.4.0/24这条路由分发标签,且R2会继续为10.4.4.0/24给R1分发标签。**R1去访问10.4.4.4/32会匹配到 10.4.4.0/24这条路由,然后进行标签转发**,**到达R3之后匹配到10.4.4.4/32这条路由,先查FIB,再查LFIB表**,形成**标签断裂**

> `lsp-trigger`命令和`lsp-trigger bgp-label-route`命令都用于配置LDP LSP的触发建立策略,前者适用于静态路由和IGP路由;后者仅适用于带标签的公网BGP路由
> **不推荐配置lsp-trigger all命令**,因为配置该命令后,**所有IGP路由会触发LDP建立LSP,导致LSP数量庞大**,占用过多的系统资源。如果需要配置该命令,可以先配置路由过滤策略,减少路由数量,从而减少路由触发LDP建立的LSP的数量,节约系统资源

### 2. 对BGP路由的下一跳进行汇总:LSP断裂,形成黑洞
在AS20中,AR1和AR4建立BGP邻居,AR2和AR3不运行BGP。
AR5、AR6的环回口地址发布在BGP中,分别传入AS20中,要求AR5和AR6的环回口地址互访
![对BGP路由的下一跳进行汇总](https://fqj-web.github.io/post-images/1614165428913.png)
首先在AR1和AR4上使用`route recursive-lookup tunnel`使能隧道迭代功能,非标签公网BGP路由或者静态路由将优先迭代到LSP隧道,如果没有LSP隧道,上述路由也可以迭代到出接口和下一跳。
1. 在没有汇总的情况下,在AR5上以自身的环回口地址为源ping AR6的环回口可以ping通,**数据包可以通过标签交换穿过AR2和AR3的BGP路由黑洞**
2. 在AR3上路由汇总后(汇总10.4.4.4/32为10.4.4.0/24),上述访问不通,故障原因:
    1. 由于在AR1上对应下一跳10.4.4.4的LSP,所以AR1发给AR2的数据包不带标签,AR2收到数据包后目的地没有对应路由(无BGP路由),数据包丢弃
    2. 在AR3上做静态路由10.4.4.0/24指向null0后,AR1发出的数据帧携带标签,**在AR3上收到标签为R2发出的带1035的数据帧后,先执行标签弹出,后查找数据包目的IP不可达(无BGP路由)**,数据包被丢弃
3. 对MPLS/VPN的路由下一跳进行汇总,会造成路由不进VPN实例的路由表。
    1. 当PE收到一条VPNv4的路由,**首先需要查看下一跳是否存在对应的LSP**,如果不存在则直接不装进VPN实例的路由表中,所以在汇总后的情况下,PE的实例路由表下无对方的路由。
    2. 如果在汇总点添加一条汇总后的静态路由指向null0,结果还是不装入VPN实例下的路由表,因为 **PE只信任关于下一跳的32位路由的LSP**,汇总后是关于24位路由的LSP,所以还是不装表