1.MPLS的工作原理
在传统的IP 网络中,分组每到达一个路由器,都必须查找转发表,并按照“最长前缀匹配”的原则找到下一跳的 IP 地址(请注意,前缀的长度是不确定的)。当网络很大时,查找含有大量项目的转发表要花费很多的时间。在出现突发性的通信量时,往往还会使缓存溢出,这就会引起分组丢失、传输时延增大和服务质量下降。
MPLS的一个重要特点就是在 MPLS 域的入口处,给每一个 IP 数据报打上固定长度“标签”,然后对打上标签的 IP数据报用硬件进行转发,这就使得 IP 数据报转发的过程大地加快了“。采用硬件技术对打上标签的 IP 数据报进行转发就称为标签交换。“交换”也表示在转发时不再上升到第三层查找转发表,而是根据标签在第二层(链路层)用硬件进行转发。MPLS可使用多种链路层协议,如 PPP、以太网、ATM 以及中继等。如图是MPLS协议的基本原理的示意图。
MPLS域(MPLS domain)是指该域中有许多彼此相邻的路由器,并且所有的路由器都是支持MPLS技术的标签交换路由器LSR(Label Switching Router)。LSR同时具有标签交换和路由选择这两种功能,标签交换功能是为了快速转发,但在这之前 LSR 需要使用路由选择功能构造转发表。
(1) MPLS域中的各LSR使用专门的标签分配协议LDP(Label Distribution Protocol)交换报文,并找出和特定标签相对应的路径,即标签交换路径LSP(Label Switched Path)。例如在图中的路径A一B一C一D。各 LSR 根据这些路径构造出转发表。这个过程和路由器构造自己的路由表相似。同时应注意的是,MPLS是面向连接的,因为在标签交换路径LSP 上的第一个 LSR 就根据 IP 数据报的初始标签确定了整个的标签交换路径,就像一条虚连接一样。
(2) 当一个IP数据报进入到MPLS 域时,MPLS入口节点(ingress node)就给它打上标签(这实际上是插入一个 MPLS 首部),并按照转发表把它转发给下一个LSR。以后的所有 LSR都按照标签进行转发。
给IP数据报打标签的过程叫作分类。严格的第三层(网络层)分类只使用了IP首部中的字段,如源IP 地址和目的P 地址等。大多数运营商实现了第四层(运输层)分类(除了要检查IP首部外,运输层还要检查TCP或UDP首部中的协议端口号),而有些运营商则实现了第五层(应用层)分类(更进一步地检查数据报的内部并考虑其有效载荷)。
(3) 由于在全网内统一分配全局标签数值是非常困难的,因此一个标签仅仅在两个标签交换路由器 LSR之间才有意义。分组每经过一个LSR,LSR 就要做两件事:一是转发,二是更换新的标签,即把入标签更换成为出标签。这就叫作标签对换(label swapping)”。做这两件事所需的数据都已清楚地写在转发表中。例如,图中的标签交换路由器B从入接口0收到一个入标签为3的IP 数据报,查找了如下的转发表:
标签交换路由器B就知道应当把该IP 数据报从出接口1转发出去,同时把标签对换为1,当IP 数据报进入下一个 LSR 时,这时的入标签就是刚才得到的出标签。因此,标签交换路由器C接着在转发该IP数据报时,又把入标签1对换为出标签2。
(4) 当IP数据报离开MPLS 域时,MPLS出口节点(egress node)就把 MPLS的标签去除,把IP数据报交付非MPLS的主机或路由器,以后就按照普通的转发方法进行转发。
MPLS 的路由选择和互联网中通常使用的“每一个路由器逐路进行路由选择”有着很大的区别。MPLS使用的是显式路由选择(explicit routing),其特点县“由入口LSR确定进入MPLS域以后的转发路径”。
2.转发等价类(FEC)
“转发等价类”就是路由器按照同样方式对待的 IP 数据报的集合。这里“按照同样方式对待”表示从同样接口转发到同样的下一跳地址,并且具有同样服务类别和同样丢弃优先级等。
FEC的例子是:
(I)目的IP 地址与某一个特定 IP 地址的前缀匹配的 IP 数据报(这就相当于普通的IP路由器):
(2)所有源地址与目的地址都相同的IP 数据报;
(3)具有某种服务质量需求的IP数据报。
总之,划分 FEC 的方法不受什么限制,这都由网络管理员来控制,因此非常灵活。入口节点并不是给每一个 IP数据报指派一个不同的标签,而是将属于同样 FEC的 IP 数据报都指派同样的标签。FEC 和标签是一一对应的关系。
如图给出一个把FEC用于负载均衡的例子。其中的主机H1和H2分别向H3和H4发送大量数据。路由器A和C是数据传输必须经过的。但传统的路由选择协议只能选择最短路径A—B—C,这就可能导致这段最短路径过载。
下面的图表示在MPLS的情况下,入口节点A可设置两种FEC:“源地址为H1而目的地址为H3”和“源地址为H2而目的地址为H4”把前一种FEC 的路径设置为H1-->A-->B---C-->H3;,而后一种的路径设置为 H2-->A-->D-->E-->C-->H4。这样可使网络的负载较为均衡。网络管理员采用自定义的 FEC 就可以更好地管理网络的资源。这种均衡网络负载的做法也称为流量工程TE(Traffic Engineering) 或通信量工程。
3.MPLS首部的位置与格式
MPLS并不要求下层的网络都使用面向连接的技术。因此一对 MPLS路由器之间的物连接,既可以由一个专用电路组成,如 OC-48 线路,也可以使用像以太网这样的网络。但这些网络并不提供打标签的手段,而 IPv4 数据报首部也没有多余的位置存放MPLS标签,这就需要使用一种封装技术:在把 IP 数据报封装成以太网之前,先要插入一个 MPLS首部。从层次的角度看,MPLS 首部就处在第二层和第三层之间。
在把MPLS首部的 IP 数据报封装成以太网帧时,以太网的类型字段在单播的情况下设置为 (下标 16 表示这是十六进制的数字),而在多播的情况下为 。这样,接收方可以用帧的类型来判决这个帧是携带了 MPLS 标签还是一个常规的IP 数据报。
图中给出了MPLS首部的格式。可见“给IP数据报打上标签”其实就是在以太网的帧首部和IP数据报的首部之间插入一个4 字节的 MPLS首部。具体的标签就在“标签值”这个字段中。
MPLS首部共包括以下四个字段:
(1)标签值 占20位。由于一个 MPLS 标签占 20 位,因此从理论上讲,在设置MPLS时可以使用标签的所有 20位,因而可以同时容纳高达个流(即1048576个流)但是,实际上几乎没有哪个 MPLS 实例会使用很大数目的流,因为通常需要管理员人工管理和设置每条交换路径。
(2)试验 占3位,目前保留用于试验。
(3)S 占1位,S(Stack)表示栈,在有“标签栈”时使用。
(4)生存时间TTL 占8位,用来防止MPLS 分组在MPLS 域中兜圈子。
4.新一代MPLS
MPLS问世后就在互联网中得到了大量的部署。虽然MPLS能够更快地转发分组,但其有关的控制协议 (如 LDP)却比较复杂,其扩展性差,运行维护也较困难。协议 LDP 也无法做到基于时延或带宽等要求的流量调度。为了根据需要灵活地选择流量的转发路径,就还需要再使用资源预留协议 RSVP。但RSVP的信令非常复杂,每个节点都要维护一个庞大的链路信息数据库。此外,RSVP 不支持等价多路径路由选择 ECMP(Equal-Cost Multipath Routing),而只会选择一条最优路径进行转发。对于RSVP可以看:
为了解决上述问题,一种保留了 MPLS 的主要特点,但更加简单的新的源路由选择协议出现了。这就是段路由选择协议(Segment Routing),简称为 SR。但不少人都使用“段由协议”这样更加简单的名称。在 SR 中,“段(segment)”就是标签,也就是转发指令的一种标识符。SR的工作原理仍然是基于标签交换的,不过现在不需要使用协议 LDP,因此简化了设备运行的协议数量。SR 由源节点为发送的报文指定路径,并将路径转换成有序的列表(Segment List),即 MPLS 标签栈,它被封装在分组首部。网络中的其他节点就执行首部中的指令(即标签) 进行转发。
整个网络设有控制器,也就是 SDN 控制器。控制器收集并掌握全网的括扑信息和链路状态信息,计算出分组应传送的整个路径。控制器负责给分组分配 SR 标签,这些标签指明了分组从源点到终点的路径。当分组到达某个网络节点时,节点就根据分组演带的标签转发到下一个节点。
对于SDN可以看看:
现在SR还向IPv6演进,这就是SRv6。它直接利用IPv6字段作为标签寻址。而前面介绍的在MPLS基础上的SR则称为SR-MPLS。