这是一篇记录学习的笔记,简单认识 MPLS。
1,MPLS 是什么?
MPLS: MultiProtocol Label Switching,多协议标签交换, 是一种应用于运营商IP骨干网的数据交换技术。
2,MPLS 的起源
20 世纪90年代中期,路由器技术的发展远远滞后于网络的发展速度与规模,主要表现在转发效率低下及无法提供QoS保证。其本质原国为:当时路由查找算法使用最长匹配原则,必须使用软件查找最佳的路由表项。IP路由转发的依据就是 iP 路由表项,而 IP 报文的报头中仅含有“目的IP地址”字段,而没有对应的“子网掩码”字段,所以从IP报文不可直接确定所用的IP路由表项,IP报文的转发需要从当前 IP路由表中选择一条最佳的转发路径。这就是 IP 路由中的“最长匹配原则”,即根据IP报文中的“目的IP地址”选择一个可以匹配,且子网掩码最长(代表最准确)的路由表项来为该IP报文进行转发。选择了 IP路由表项才能确定从本地设备转发的出接口和下一跳IP地址,这样的IP路由表项选择是第经过一跳设备都要进行的,所以IP路由转发方式比较消耗资源。加之当初没有像ASIC这样的集成电路技术,IP路由表项的选择纯粹是依据软件系统计算完成的,效率比较低下。正因为IP路由转发效率比较低,有人在想是不是可以采用另外一种标识来实现同样的目的,且不用每一跳都经过复杂的计算就可以确定正常的数据转发路径,以提高转发效率。ATM(Asynchronous Transfer Mode,异步传输模式)技术就是其中的杰出代表。ATM采用定长标签(即信元),并且只需要维护比路由表规模小得多的标签表,就能够提供比IP路由方式高得多的转发性能。也正因为如此,当时还出现过IP和ATM竞争的场面。然而ATM过于复杂的设计导致没有多少厂商能够完全领会并成功生产所需的软件、硬件产品,而且其无法与iP网络很好地融合导致最终没有广泛应用。如何结合iP与ATM的优点成为当时的热闹话题。MPLS技术就是在这种背景下产生的。---------- 摘自《华为MPLS技术学习指南》
3,MPLS 是什么样的?
mpls的组成是这样的:
+0---------------19-------22---23------------31 | Label value | Exp | Bos | TTL | +----------------|--------|-----|-------------|
字段 | 长度 | 含义 |
---|---|---|
Label value | 20比特 | 标签值字段,用来标识一个FEC。 |
EXP | 3比特 | 用于扩展。现在通常用做CoS(Class of Service),其作用与Ethernet802.1p的作用类似。 |
S | 1比特 | MPLS支持多重标签。值为1时表示为最底层标签。 |
TTL | 8比特 | 和IP分组中的TTL意义相同,可以用来防止环路。 |
那其实从报文里看的话,MPLS 就是一段32bit的数据,其位置位于二层头和三层头之间,如我们抓一段带有 MPLS 的包 :
上面所说的二层和三层,通常是指数据链路层和网络层,二层是通过 Mac地址寻址,如上图中的
Ethernet II, Src: 00:20:8f:1e:52:09, Dst: 00:0b:16:21:2c:37;三层是通过IP寻址,如上图中的 Internet Protocol,Src Addr:198.19.1.2(198.19.1.2), Dst Addr: 198.19.1.1 (198.19.1.1)。可以对照上面 mpls 的组成看:
这个数据包里,MPLS 的标签值1611, Exp 段值是0, S段值为1(因为只有一个标签,即为栈底标签)。下图是一个多标签的情况:
这就是一个包含MPLS消息的数据帧,以下是关于数据帧的知识点。常见的数据帧格式类型有:
Ethernet II 和 IEEE802_3,其格式为:
带 VLAN 的数据帧,其中 Etype 字段会指示协议类型:
各字段含义:
如下数据帧所示,在DMac,SMac之后 就是 TPID 字段,其值为0x8100
同样紧跟在TPID后的是 PRI(占3bit)、CFI(占1bit)、VID(占12bit),如下:
然后紧跟着 Length/Type 字段,该字段有 2 种含义:
很明显这个数据帧里的 Type 指的是封装的上层协议类型,即0x8847(看上面的Type类型表,指的就是 MPLS)。