- 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并不是指真正的数据
- Control Plane
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