1. 因为本章涉及链路层协议,并且鉴于我们现在已经接近本章的末尾,让我们反思一下我们对链路这个术语的理解是如何演变的。本章开始时,我们将链路视为连接两台通信主机的物理线路。在研究多路接入协议时,我们看到多台主机可以通过一条共用线路连接,连接这些主机的“线路”可以是无线电频谱或其他介质。这导致我们更抽象地将链接看作一个通道,而不是一条线路。在对以太网LAN的研究中(图6.15),我们看到互连介质实际上可能是相当复杂的交换基础设施。然而,在整个演变过程中,主机本身都坚持认为互连介质只是连接两台或多台主机的链路层通道。例如,我们看到,以太网主机可能不知道它是通过单个短LAN网段(图6.17)、通过地理上分散的交换LAN(图6.15)还是通过VLAN(图6.26)连接到其他LAN主机。<br />在两台主机之间使用**拨号调制解调器(dialup modem)**连接的情况下,连接两台主机的链路实际上是电话网-一个逻辑上独立的全球电信网络,具有自己的交换机、链路和用于数据传输和信令的协议栈。然而,从Internet链路层的角度来看,通过电话网的拨号连接被看作是一条简单的“电线”。从这个意义上说,Internet虚拟化了电话网络,将电话网络视为在两台Internet主机之间提供链路层连接的链路层技术。您可能还记得我们在第2章中对**覆盖网络(overlay network)**的讨论,覆盖网络同样将Internet视为在覆盖节点之间提供连接的一种手段,寻求以Internet覆盖电话网络的相同方式覆盖Internet。<br />在本节中,我们将考虑**多协议标签交换(Multiprotocol Label SwitchingMPLS)网络**。与电路交换电话网不同,MPLS本身就是一种数据包交换的虚拟电路网络。它有自己的数据包格式和转发行为。因此,从教育学的角度来看,对MPLS的讨论非常适合对网络层或链路层的研究。然而,从Internet的角度来看,我们可以认为MPLS与电话网和交换以太网一样,是一种用于互连IP设备的链路层技术。因此,我们将在讨论链路层时考虑MPLS。帧中继和ATM网络也可用于互连IP设备,尽管它们代表的是一种稍早(但仍在部署)的技术,这里不会介绍;有关详细信息,请参阅非常可读性很强的书籍[Goralski 1999]。我们对MPLS的讨论必然是简短的,因为整本书都可以(并且已经)写在这些网络上。有关MPLS的详细信息,我们推荐[Davie 2000]。我们将在这里主要关注MPLS服务器如何与IP设备互连,不过我们也会更深入地研究底层技术。

6.5.1 多协议标签交换(MPLS) Multiprotocol Label Switching (MPLS)

多协议标签交换(MPLS)是从20世纪90年代中后期业界为提高IP路由器的转发速度而发展起来的,它采用了虚拟电路网络世界中的一个关键概念:固定长度标签(a fixed-length label)。其目标不是放弃基于目的地的IP数据报转发基础设施,而是采用基于固定长度标签和虚拟电路的基础设施,而是通过选择性地标记数据报并允许路由器在可能的情况下基于固定长度标签(而不是目的地IP地址)来转发数据报来增强该基础设施。重要的是,这些技术与IP协同工作,使用IP寻址和路由。IETF在MPLS协议[RFC 3031,RFC 3032]中统一了这些努力,有效地将VC技术混合到路由数据报网络中。
让我们从考虑由支持MPLS的路由器处理的链路层帧的格式开始我们对MPLS的研究。图6.28示出了在支持MPLS的设备之间传输的链路层帧具有在第2层(例如以太网)首部和第3层(即IP)首部之间添加的小MPLS首部。RFC 3032定义了此类链路的MPLS首部的格式;在其他RFC中也为ATM和帧中继网络定义了首部。MPLS首部中的字段包括标签(为实验用途保留的3位)、单个S位(用于指示一系列“堆叠”的MPLS首部的结束)(这是一个高级主题,我们在此不再讨论)和生存时间字段。
image.png
Figure 6.28 ♦ MPLS header: Located between link- and network-layer headers
图6.28♦MPLS首部:位于链路层首部和网络层首部之间
从图6.28可以立即看出,MPLS增强的帧只能在同时具有MPLS功能的路由器之间发送(因为不具备MPLS功能的路由器在发现其期望找到IP报头的MPLS首部时会非常困惑!)。支持MPLS的路由器通常被称为标签交换路由器(label-switched router),因为它通过在其转发表中查找MPLS标签,然后立即将数据报传递到适当的输出接口来转发MPLS帧。因此,支持MPLS的路由器不需要提取目的地IP地址并在转发表中查找最长前缀匹配。但是,路由器如何知道其邻居是否确实支持MPLS,以及路由器如何知道要将什么标签与给定的IP目的地相关联?要回答这些问题,我们需要看看一组支持MPLS的路由器之间的交互。
在图6.29的示例中,路由器R1到R4支持MPLS。R5和R6是标准IP路由器。R1已向R2和R3通告它(R1)可以路由到目的地A,并且收到的带有MPLS标签6的帧将被转发到目的地A。路由器R3已经通告给路由器R4,它可以路由到目的地A和D,并且具有MPLS标签10和12的传入帧将分别交换到这些目的地。路由器R2还向路由器R4通告它(R2)可以到达目的地A,并且接收到的带有MPLS标签8的帧将交换到A。请注意,路由器R4现在有两条MPLS路径到达A:通过带有出站MPLS标签10的接口0,以及通过带有MPLS标签8的接口1。图6.29中描绘的大致情况是,IP设备R5、R6、A和D通过MPLS基础设施(支持MPLS的路由器R1、R2、R3和R4)连接在一起,其方式与交换LAN或ATM网络可以将IP设备连接在一起的方式大致相同。与交换LAN或ATM网络一样,支持MPLS的路由器R1到R4在不接触数据包的IP首部的情况下这样做。
image.png
Figure 6.29 ♦ MPLS-enhanced forwarding
图6.29♦多协议标签交换增强转发
在上面的讨论中,我们没有指定用于在支持MPLS的路由器之间分发标签的特定协议,因为这种信令(signaling)的细节远远超出了本书的范围。然而,我们注意到,IETF的MPLS工作组在[RFC 3468]中规定,RSVP协议的扩展(称为RSVP-TE[RFC 3209])将是其MPLS信令工作的重点。我们也没有讨论MPLS如何在支持MPLS的路由器之间实际计算数据包的路径,也没有讨论它如何收集链路状态信息(例如,MPLS未预留的链路带宽量)以用于这些路径计算。现有的链路状态路由算法(例如,OSPF)已经被扩展以将该信息泛洪到具有MPLS能力的路由器。有趣的是,实际的路径计算算法没有标准化,目前是特定于供应商的。
到目前为止,我们对MPLS的讨论重点一直放在这样一个事实上,即MPLS基于标签执行交换,而不需要考虑数据包的IP地址。然而,MPLS的真正优势和当前对MPLS感兴趣的原因并不在于交换速度的潜在提高,而在于MPLS实现的新的流量管理能力。如上所述,R4有两条到达A的MPLS路径。如果转发是基于IP地址在IP层上执行的,那么我们在第5章中研究的IP路由协议将只指定一条到A的成本最低的路径。因此,MPLS提供了沿着使用标准IP路由协议不可能的路由转发数据包的能力。这是使用MPLS的流量工程(traffic engineering)的一种简单形式[RFC 3346;RFC 3272;RFC 2702;肖2000],其中网络运营商可以覆盖正常的IP路由并强制一些流量沿着一条路径流向给定目的地,而将其他流量沿着另一条路径流向相同的目的地(无论是出于策略、性能还是某些其他原因)。
也可以将MPLS用于许多其他目的。它可用于执行MPLS转发路径的快速恢复,例如响应于链路故障在预先计算的故障转移路径上重新路由流量[Kar 2000;Huang 2002;RFC 3469]。最后,我们注意到MPLS可以并且已经被用来实现所谓的虚拟私有网(virtual private networks,VPN)。在为客户实施VPN时,ISP使用其支持MPLS的网络将客户的各种网络连接在一起。MPLS可用于将客户VPN使用的资源和地址与跨ISP网络的其他用户的资源和地址隔离;有关详细信息,请参阅[DeClercq 2002]。
我们对MPLS的讨论很简短,我们鼓励您参考我们提到的参考资料。我们注意到,MPLS在开发软件定义的网络(software-defined networking)(我们在第5章中研究)之前就已经崛起,而且MPLS的许多流量工程功能也可以通过SDN和我们在第4章中研究的通用转发范例来实现。只有未来才能证明MPLS和SDN是否会继续共存,或者更新的技术(如SDN)是否最终会取代MPLS。