• MPLS 园区和企业网中较少用到,通常是ISP提供的广域网服务 —— 在ISP方向可以进行深入研究

History of WAN Protocol

  • before 1990s
    • 用来连接terminal 和 主机,X25 协议跑在T1/E1线路上,提供1.5Mbps 的带宽
  • late 1980s & early 1990s
    • Frame Relay 将速度提升到45Mbps
    • ATM 再次提升到622Mbps
  • Early 2000s
    • MPLS 开始被部署
    • 基于标签进行转发,而不是dest IP
  • Mid to late 2000s
  • 2010s
    • SD-WAN

MPLS Multipotocol Label Switching (MPLS)

  • 过往受限于CPU和内存资源,基于dest IP转发的性能不如基于Label,但到了现代,他们之间没有什么差异
  • MPLS 被设计用来承载不同的3层协议,对ISP来说,可以用同1个骨干网络承载不同客户的不同协议
  • 几个专用名词
    • P provider router
    • PE provider edge
    • CE customer edge
    • LSR label Switch Router
    • LIB Label information Base
    • LFIB Loable Forward Information Base
    • LDP Label Distribute Protocol
    • LSP Label Switch Path

MPLS is not VPN

  • MPLS 是1种技术,核心是用标签进行转发
  • VPN是1个概念,在公有网络中搭建私有网络,可以基于很多不同的技术实现
  • MPLS 网络是传输层网络,可以承载不同的协议
    • ipv4,ipv6 —— 3层
    • Any Transport Over MPLS —— 2层
      • Frame Relay
      • Ethernet
      • PPP
      • HDLC
      • Sonet/SDH
  • CCNP 主要聚焦于MPLS layer 3 VPN (更精确地是 Ipv4 over MPLS) —— 基于MPLS + VRF 技术来构建VPN网络
  • MPLS用于承载IPV4,但IPV4 需要依托 MP-BGP 才能搭建起来,而MP-BGP又依赖于IGP实现最基本的TCP连接 —— 注意这个体系

LSR Control Plane & Data Plane (label Switch Router)

  • LSR 在标准Router 基础上多了几个模块
    • Control Plane
      • Label Information Base —— 和IP Information Base 类似
      • Label Distribution Protocol —— 和 Routing Protocol 类似
    • Data Plane
      • Label Forwarding Table
    • 这两个Plane 要理解,Data并不是指真正的数据

LSR in MPLS Domain

  • edge LSR
    • ingress 用于给packet 增加 Label(进入MPLS Domain)
    • egress 用于移除Label(离开MPLS Domain)
  • intermediate LSR 在MPLS Domain内部,基于Label 进行转发

LSP

  • 这条路径是单向的,来和回是不同的LSP
  • 沿着LSP,Router检查Label ,并决定出转发路径。根据需要移除 或 添加 label
  • 可以类比IP forward 中基于 MAC 转发,每经过1跳,MAC 会被替换

Label

  • 在2层 frame header 和 3层 layer packet header 之间被插入 —— 这个表述仅限于基于我们研究的范围
  • 4个字节
    • 前20bit 定义 Label Number *
    • 3bit EXP 用来定义QOS
    • 1bit 用来表示这个Label是否stack的最后1个 *
    • 8bit 的TTL —— 可以防止数据包无休止地流转,到0之后就会被丢弃,防环
      • 路由和交换方向的重要知识点

Label Stack

  • packet 可以携带很多label,多个label 组成 Stack
  • 1个stack 中可以包含的label数量是无限的

Asign Label to Network

  • 开启MPLS的路由器会为每个已知网段分配1个label
  • 路由器可以通过直连 或者 路由协议 知道这些网段
  • 同1个网段,在不同Router上会得到不同的 label,其他Router 通过LDP

LDP

  • 如果A要将数据发给B,A需要知道B的Label
  • B就是通过LDP 协议,把自己的Label 告知给A
  • 开启LDP的Router,会发送Hello UDP数据包(port 66) 到1个组播地址,其中包括
    • LDP ID(类似RouterID)
    • label Space:路由器如何分配Label
      • per platform : 所有接口使用同1个label
      • per interface : 不同接口使用不同label
  • 通过发送Hello,知道LDR neighbor 之后,重新建立1个TCP连接(port 66)。建立连接是由其中1个会成为Active Router(用于较大LDP ID的路由器)发起
  • 路由器从收到的Hello 中得到全部的网段和Label对应关系,形成label information base —— control plane。 查询LIB 知道去往目标网段的 label,然后再根据 LFIB —— Data Plane(不再需要依赖IP地址)
  • 路径建立是从 dest -> src ,路径转发是从 src -> dest

Egress LSR Double Lookup

  • Egress 先查询LFIB,发现Label out 为空,就需要移除label,然后查询FIB,根据路由转发
  • 这个过程是低效的,需要用PHP改善

PHP Penultimate Hop Popping

  • egress LSR 不再宣告数字 label,而是宣告 pop label
  • 在 egress LSR的上一跳,转发时就会移除 label,成为1个单纯的IP数据包。 Egress 只需要查询FIB