PTN技术专题_MPLS介绍及MPLS原理.doc_第1页
PTN技术专题_MPLS介绍及MPLS原理.doc_第2页
PTN技术专题_MPLS介绍及MPLS原理.doc_第3页
PTN技术专题_MPLS介绍及MPLS原理.doc_第4页
PTN技术专题_MPLS介绍及MPLS原理.doc_第5页
已阅读5页,还剩104页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1 多协议标记交换 赵 广 2 目目 录录 1.mpls 技术基础4 1.1.mpls 转发4 1.1.1基本概念4 1.1.2标记、标记栈与标记栈编码7 1.2.标记分发协议9 1.1.3标记分发协议概述9 1.1.4ldp11 ldp 发现.12 ldp 会话建立和维护.14 标记分发和管理.17 1.3.案例分析23 1.1.5配置实现25 1.1.6标记转发观察27 1.1.7ldp 协议观察.29 1.4.小结34 1.5.复习题34 2.bgp/mpls vpn.36 2.1.vpn 概述.36 2.2.bgp/mpls vpn 框架结构39 2.3.bgp/mpls vpn 基本原理41 2.3.1.多协议 bgp 扩展41 2.3.2.bgp/mpls vpn 控制信息建立过程43 2.4.bgp/mpls vpn 常见应用48 2.4.1.internet 接入48 2.4.2.跨 as vpn 提供 .49 2.4.3.多层次 vpn 提供50 2.5.案例分析53 2.5.1.配置实现54 2.5.2.转发控制信息分析64 2.5.3.常见应用需求70 2.6.小结70 2.7.复习题71 3.mpls l2 vpn.72 3.1.mpls l2 vpn 概述72 3.2.ldp 方式 mpls l2 vpn.73 3.3.bgp 方式 mpls l2 vpn.79 1 前前 言言 在一个 ip 报文从源被送到目的的过程中,由于 ip 的无连接特性,每一个沿途的路由 器都必须独立的为这个报文确定下一跳。抽象的,确定下一跳包含两个工作:第一个工作 是分析这个报文的头部,根据其目的地址(或者还有其他信息如 dscp 值),确定这个报文 属于对于这个路由器而言的某个转发等价类(fec:forwarding equivalence class)。转发等 价类是指在某个路由器看来应该采取同样转发行为(至少包含下一跳)的所有报文的全体。 第二个工作就是根据这个 fec 确定下一跳等转发行为。 mpls (multi label switching) 被发明的初始动机就是为了改进这个过程中第一步的效 率。mpls 在一个报文进入网络时即决定其所属 fec,并为这个包打上一个“标记”决定 其所属的 fec。这样,中间转发的路由器无需再去分析特定报文的包头信息,只需要读这 个标记就知道它所属 fec,进而也就决定了这个包转发方式了。在 mpls 出现之前,有许 多类似的技术,mpls 是 ietf 统一这些技术的结果。有关 mpls 这个名词出现的过程, 您可以在中找到对这一有趣历史的一些描述。 mpls 对于转发效率的改进事实上就是所谓用交换的技术实现三层数据包的转发,上 个世纪最后几年出现的被称为三层交换或是快速路由的技术更加简洁地达到了同样的目的。 但是 mpls 目前仍然存在并且事实上已经成为核心网络路由器必不可少的一个基本组件。 其根本原因是在 mpls 基础上可以简洁地实现如下几个对于运营商网络致关重要的应用, 典型的如:基于有连接的 qos 保障、vpn、流量工程。 我们会在相应的章节仔细研究这些主题。但是现在你就可以理解使得这些应用可能的 最主要的原因是: mpls 转发标记是在数据传输之前就建立好的,换句话说,也就是有连接的,这就决 定了它和 atm 技术一样可以具备很好的 qos 特性。 mpls 的转发决定仅仅决定于输入报文中的标记,这样中间路由器就可以对报文网络 层信息一无所知的情况下进行报文转发,这是在公网上传输私网数据的 vpn 技术所必须的。 决定 mpls 转发的标记的分配可以不仅仅决定于网络地址前缀,这就为流量工程应用建立 了一个很好的平台。 历史上曾经存在的关于 mpls 价值的争论现在业已风平浪静。对于运营商网络和大型 企业网而言,mpls 已经被广泛认为属于具有战略意义的基础设施。尽管 mpls 的某些应 用仍然未能全面部署,但是目前已经成熟的应用如 l3 vpn 已经开始让运营商从 mpls 技 术上获得回报。 目前已有的经验显示,在全球范围内大规模部署 mpls 对于网络研究、设计、建设和 维护人员都会是一个挑战。本书的主要目的是希望能够帮助这些从业人员从容面对这个挑 战。 具体的,本书力求达到的目标为: 清晰解释和 mpls 相关的主要协议。 介绍 mpls 的主流设备实现方法及用户接口。 描述具体网络设计过程。 本书力求做到自包含,不过假设您对于 ip 网络应该有一个基本的了解,已经懂得关于 路由器的基本常识。如果您阅读过华为网络认证中级教材路由和交换部分,阅读本书肯定 不会有技术障碍。 总体上,本书包含如下几个部分: 2 mpls 技术概述技术概述 这部分会介绍力图回答两个问题: 一个普通报文进入 mpls 网络以后和从 mpls 网络出来以前,沿途的路由器是如 何依据预先建立起来的控制信息对这个报文进行处理的? 这些“预先建立起来的控制信息”是如何建立起来的? 如果您对于 ip 地址、路由等概念有基本的了解即可以顺利阅读本章。本章是以后任意 一章的基础。 l3 vpn 这一章的主要内容是介绍如何在一个 isp 如何利用其 mpls 骨干网络为她的客户提供 网络层意义上的 vpn 服务。这里将会讨论 isp 网络和客户网络中处于不同角色的设备如何 建立控制信息以及如何利用这些控制信息来进行转发数据流。这里也会讨论一个具体的网 络案例。 这一章的内容除了需要具备本书第一章的基础以外,还需要您熟悉 bgp 路由协议和 ospf 路由协议的基本操作和华为路由器上的配置方法。 mpls l2 vpn 这章将介绍一个 isp 如何利用她的 mpls 骨干网络为她客户提供数据链路层意义上的 vpn 服务,就像传统的 atm 或 frame relay 网络一样。这里将会讨论 2 种不同的实现方 法: martini 方法和 kompella 方法。 如果有第一章和 bgp 的基础,mpls l2 vpn 内容的学习肯定不会存在障碍。当然, 如果您有 2 层传统 vpn 的经验,也许阅读起来会轻松一点。 mpls 流量工程流量工程 mpls 体系结构支持依据预先指定的中间节点建立转发路径,这个特性使得流量工程 成为可能。在这里将介绍控制流量工程各种应用在 mpls 框架下的实现和具体的案例分析。 考虑到流量工程应用目前还没有得到广泛应用,所以这一章内容除了需要第一章的基础以 外我把它做成了自完备的。 mpls qos 传统的 ip 网络很难为客户提供和 atm 一样健壮的 qos。其根本原因是因为 atm 是 有连接的。而 mpls 体系结构恰好为 ip 建立了一个坚实的有连接的基础设施,所以部署了 mpls 的 ip 网络可以很好的实现 qos。这一章将会讨论差分模型的 qos 是如何在 mpls 网络中如何实现的。 这一章除了需要第一章的基础而外,还需要部分 mpls 流量工程一章所描述的一些信 令协议的基础。 mpls 组播组播 在 mpls 框架结构下,关于组播有两个问题。一是如何在 mpls 网络上支持组播 ip 报文的转发。二是如何在 mpls vpn 中支持 vpn 内的组播。第二个问题已经有了比较系 统的解决方案,第一个问题则由于其固有的复杂性在理论上还处于研究阶段。所以,这一 章将给出第二个问题的全面解决方案,同时也会给出第一个问题难的原因。 第一章依然是本章的基础,同时需要您了解组播路由协议的基本原理。 3 mpls 网络管理网络管理 目前部署 mpls 网络的网络都是大规模的运营商网络或企业网络,特别是为客户提供 vpn 服务的大型运营商网络,网络的管理特别需要加以重视。这里详细地介绍了 mpls 网 络管理的框架以及华为的一个 mpls vpn 管理软件。 这一章需要以前各章的基础,同时需要您知道网络管理的基本概念。 由于本书的作者并不是作家,所以语言有点干瘪,但是 mpls 本身是充满魅力的,所 以阅读本书也许就像用青瓷大花瓷碗喝法国葡萄酒,也许很有情趣。 赵广 2003/4/15 2010 年的补充说明年的补充说明 这份材料原本是 2002-2003 年期间计划编写的面向技术人员的培训材料,由于许多原 因最终未曾完成或定稿。现在看来,对于初学者还有一定作用,因此删除未完成的目录, 加一个说明,就以这个不定稿作为定稿了:) 其实在 2008 年左右,有朋友向我询问是否有 mpls 方面的教材,辛亏我的同学、同 事与兄弟蒋茂勇还保存着这个电子稿,因此我可以向他们吹嘘这是世界上最好的 mpls 教 材。昨天,有朋友再次问 mpls 材料,我竟然又将这个电子稿丢了。再次辛亏我我的同学、 同事与兄弟蒋茂勇还保存着这个电子稿,看来我又可以再吹一次牛皮了。 不过,为了不再麻烦老蒋,免得他认为我是一个麻烦的人,我决定吸取教训,利用运 计算技术,将本书放在网络上:) 赵广 2010/7/14 为了从百度百科上下载电子文档,我就厚着脸皮将这篇陈年文章上载上去,恳请大 家不要嘲讽我:都是为了混口饭吃,对吧? 由衷期望有一天我能再有兴趣与计划写完这个东西。 赵广 2010/11/01 4 1. mpls 技术基础技术基础 部署了 mpls 的网络最终都以提供具备某些特性的报文转发为其服务形式。对于各种 基于 mpls 的应用而言,具体的 lsr(label switching router:标记转发路由器及具备标记 转发特性的路由器)在实施报文转发时所采用的核心转发技术事实上是一致的。具体到一个 网络层报文而言,当它第一次进入 mpls 网络时,首先处理它的那个 lsr 必须根据它的网 络层头部信息决定对于它的转发动作,这个转发动作包括给它打上 mpls 标记和从某个接 口转发出去;对于网络内部 lsr 而言,只需要以输入报文中的标记信息为索引查找某个预 先建立起来的转发信息表得出转发动作,进而根据这个转发动作进行转发;当然,mpls 网络中最后一个处理这个报文的 lsr 对这个报文的转发决定就可能包含去掉标记这样的动 作。本章第一节将具体描述这个转发过程。本章的其余部分将集中精力描述上面所说的各 种转发信息表是怎么建立起来的,即所谓标记分发的过程。标记分发的过程就是报文的下 游告知上游当上游转发报文时应该打上什么标记的过程。由于涉及到不同设备间的互通, 这就需要一个协议来协调这个过程。目前已有不少协议可以实现这个功能,我们将用 ldp(label distribution protocol)来讲述标记分发的基本原理,其他几种协议我们将在以后 的章节里逐步的描述他们。 1.1.mpls 转发转发 1.1.1 基本概念基本概念 为了清晰起见,我们使用如下图所示实验网络来描述 mpls 的转发过程: 呒 1“呒 2“ n 卌 “ 卌 “ 卌 “ 42 2 2 2 42 2 2 2 42 2 2 2 42 2 2 2 42 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 潬 灯 慢 正 2 2 2 2 潬 灯 慢 正 2 2 2 2 图表 1-1 5 在这个网络中,由 lsra、lsrb、lsrc 组成的网络 n 运行 mpls 为路由器 rt1 和 rt2 所连接的网络提供转发服务。请注意进行 mpls 转发的路由器被称为 lsr(label switching router:标记转发路由器) 。 我们用这 rt1 和 rt2 的两个 loop back 地址模拟接受 n 转发服务的网络。于是转发 服务就可以用 n 对 rt1 或 rt2 到对方 loop back 接口的 ping 报文的转发来说明了。事实 上,n 提供的服务很明确:使得 rt1 可以 ping 通 ,而且 rt2 可以 ping 通 。 如果 lsra、lsrb 和 lsrc 上没有运行 mpls,通过动态路由协议 n 同样可以为 rt1 和 rt2 提供转发服务。只要在上图所示网络中每一台路由器上的每一个接口上都运行 ospf 协议,这样 /24 和 /24 这两个网段的路由就会被每一台路由器所知晓, 这样对于每一台路由器而言,都可以依据两个信息实施转发了:输入报文的包头信息(至 少是目的 ip 地址)和路由器上通过 ospf 学习到的路由信息。 具体来看,当一个从 rt1 上发出的目的地址为 的一个报文(我们称其为 p)到达 n 中某个路由器时,他所做的主要工作就是确定这个报文的下一跳路由器、发送接口等转 发信息,然后根据这些转发信息把 p 转发出去。一个路由器用两个步骤完成确定对于 p 的 转发信息的工作:其一就是根据输入 p 的头部信息(至少是目的 ip 地址:)为索 引用最长匹配算法在三层路由表中查找一个匹配(/24) 。事实上,无论目的地址是 还是 或 10.0.1.x,这个查找工作的结果都是 /24,我们在这里称这些 包属于同一个转发等价类(fec:forwarding equivalence class),这个转发等价类就用 /24 标识。第二个工作就是以这个 fec:/24 为索引查找下一跳等转发信息, 比如对于 lsrb,结果就是下一跳路由器就应该是 ,下一跳接口为 e1。 mpls 不在转发的每一跳上独立的将报文 p 分配给某一个 fec,而是在 p 到达 lsra 时即第一次到达 mpls 网络时就会被打上一个标记 l1,l1 就是 lsra 和 lsrb 事先协商 好的用于标识 /24 这个 fec 的。当 lsrb 收到 p 时,标记 l1 指示它应该将这个报 文打上它和 lsrc 协商好的用于标识 /24 这个 fec 的标记 l2,并且从接口 e1 上发 出去。当这个报文到达 lsrc 时,标记 l2 指示 lsrc 去掉标记 l2 并根据其目的 ip 地址 查找到其转发接口 e0 并将其转发出去。 从这个描述可以看出,mpls 网络事实上在转发之前已经就某个 fec 如何转发达成了 一致并局部地使用标记标识,无须在每一跳再根据报文目的 ip 地址来确定其所属的 fec。 而且这些局部的标记事实上也在转发之前预先指定了一个 fec 中的所有报文在 mpls 网络 的转发路径,我们称这个转发路径为 lsp(label switched path:标记交换路径) 。 从 lsp 的角度我们可以把一个报文(或一个 fec)在 mpls 网络中所经过的所有 lsr 分成 3 种,入口 lsr(lsr ingress) 、出口 lsr(lsr egress)和内部 lsr,有时我们也将 lsr ingress 和 lsr egress 统称为 ler(edge lsr) 。在我们的实验网络中,对于报文 p 而 言,它的 lsp 是,lsra 是入口 lsr,lsrc 是出口 lsr。下面 我们来考察一下不同节点的转发处理过程。 对于入口 lsr lsra 而言,为了可以正确标记转发报文 p,它首先要维护一个功能上 类似于传统路由表中下一跳以及发送接口叫做 nhlfe(next hop label forwarding entry) 的数据结构。nhlfe 包含如下信息:报文转发的下一跳、发送接口、对于报文中标记的操 作以及任何其他可能对转发有用的信息。对于 lsra 而言,为了可以正确的转发报文 p, 它就必须包含这样的 nhlfe:下一跳为 、发送接口为 e1、应该给报文打上标记 l1。显然,仅仅有 nhlfe 是不够的,为了对不同转发等价类不同的 nhlfe,在入口 lsr 上还必须维护一个 fec 到 nhlfe 的映射(fec to nhlfe map:ftn) ,这个映射的结 构是很清楚的,比如说对于报文 p,lsra 上就必须包含如下的 ftn: 6 nhlfe fec 下一跳发送接口标记操作其他 /24lsrbe1加上标记 l1 图表 1-2 lsra 上的 ftn 映射 这样 lsra 对于报文 p 的转发流程就很清楚了:当 lsra 收到 p 后,根据其包头中目 的 ip 地址 按照最长匹配原则查找 ftn 映射的结果就是给 p 打上一个 l1 的标记, 并且从 e1 接口发送出去。 那么这张表格是怎么产生的呢?mpls 怎么知道这个 /24 应该从 e0 接口发送出 去的呢?根本上,这张表格是 lsra 和 lsrb 基于 3 层路由协议所得到的可达性信息利用 标记分发协议所达成的共识。具体的过程我们将在本章的第二节仔细讨论这个过程。 在 lsrb 上,为了转发报文 p,同样必须有一个表达其转发行为的 nhlfe:下一跳为 、发送接口为 e1、标记操作为:去掉原有的标记并且打上新的标记 l2。和 lsra 不同的是:lsrb 无须再检查 p 的网络层头部得到其目的地址并据此作为得到这个 nhlfe 的索引,它直接利用 p 头部的标记 l1 作为这个索引就可以了,因为它已经和 lsra 就 fec 和 l1 的绑定达成了一致。 对于 lsrb 而言,我们称 l1 为 p 的入标记,而 l2 为 p 的出标记。当然,因为 lsr 对于同一个 fec 内所有报文的转发行为是一致的,所以我们也可以说 l1 是 fec /24 的入标记,l2 是 fec /24 的出标记。 所以,lsr 对于输入的带标记的报文是通过一个叫做入标记映射(ilm:incoming label map)的过程来得到 nhlfe 的。具体的,lsrb 上就应该包含如下的 ilm: nhlfe 入标记 下一跳发送接口标记操作其他 l1lsrce1去掉原来的标记,加上标记 l2 图表 1-3 lsrb 上的 ilm p 上的标记 l1 被置换为 l2 的过程被称为标记交换(label swapping) ,在一个 mpls 网络内部,标记交换就是报文转发的主要操作。 对于出口 lsr lsrc,它当然也是依据 p 的输入标记而不是网络层包头识别报文,但 是由于它是出口 lsr,它并没有就如何标记转发 p 和下游路由器达成一致,所以它只能依 据 p 的网络层头部中的目的 ip 地址 来转发 p。所以,此时的 ilm 为: 7 nhlfe 入标记 下一跳发送接口标记操作其他 l2lsrc去掉标记 图表 1-4 lsrc 上的 ilm 所以,lsrc 对于 p 的处理过程为:先根据输入报文 p 携带的标记 l2 查找 ilm,得 出的 nhlfe 指示它去掉标记并将其“转发”给自己,然后再根据网络层头部中的目的 ip 地址 根据网络层路由表将其转发给 rt2。 由上面的分析可以看出:对于 lsrc 来讲,由倒数第二跳 lsr lsrb 发给给它的 p 中 所携带的标记 l2 事实上对于 lsrc 的转发没有任何帮助。如果 lsrb 在发送 p 时将 l2 删 除,对于 lsrc 转发 p 没有任何负面影响,因为 lsrc 对于 p 的有效转发决定只依赖于网 络层头部的目的 ip 地址。而且在倒数第二跳删除掉出标记还可以让出口只做一次查找工作, 甚至出口 lsr 可以完全不支持 mpls。当然,是否进行倒数第二跳,首先必须决定于倒数 第二跳是否具备删除标记的能力(有些设备,比如说一些由 atm 交换机直接升级而成的 具备 mpls 功能的设备,就只具备标记交换的能力而不具备删除标记的能力) ,其次出口 lsr 和倒数第二跳 lsr 也必须就此达成一致。 必须注意,我们这里对于 lsr 的划分(入口、出口以及内部 lsr)是对于某一个 fec 或者对于某个具体的报文的 lsp 而言的,同一个 lsr 完全可能同时是这三个角色。 下面我们仔细介绍一下被我们在这里抽象化的标记:l1、l2 是如何和 ip 报文一起传 输的。 1.1.2 标记、标记栈与标记栈编码标记、标记栈与标记栈编码 标记在 mpls 体系结构中处于核心地位。在标记的指示下,lsr 以交换的方式让数据 转发工作尽量只发生在网络层以下,从而提高了数据转发效率。所以 mpls 能够在多大程 度上简洁的提供通常在网络层完成的工作事实上决定了 mpls 的生命力。原因很明显:如 果在数据交换过程中,为了实现一些基本的功能,数据包还必须被传递到网络层去处理, 那么 mpls 的转发效率优势将不复存在。这一点事实上决定了除了标记以外,其他应该被 编码进数据包中的数据。 网络层有两个工作是至关重要的:一个是为了控制报文传输范围的 ttl 递减工作,实 际上 ip 报文中 ttl 这个域应用的广泛程度是惊人的:许多应用(例如:rip 路由协议)利 用它来防止环路、许多应用(例如:组播)利用它来限制报文传输范围、广泛的被使用于 网络测试(tracert) ,甚至一些黑客程序利用报文初始 ttl 来确定操作系统。结论很清楚: 当一个带标记的报文在传输时,它必须同时编码一个 ttl 域。 另一个是报文分类工作。在 ip 报文中,dscp(differentiated services coding point) 域被专门用于报文分类工作,报文分类工作是实现 qos 的基本组件。qos 的重要作用对于 大型网络的重要性是不言而喻的。所以,当一个带标记的报文在传输时,mpls 设计者最 8 终认为需要一个域来标识报文的类别是值得的。 为了安全、互连私有网络、互连不同协议或是显式指定某个数据包的路由方法,在网 络层领域,隧道技术被广泛应用。从本质上来讲,各种(l2tp、gre、ipsec tunnel 模式 等)隧道都是用一个公开的或是可行的网络层头部封装一个内部的数据包,完成这个内部 的包在特定网络上的传输,这样做的主要原因可能是内部数据包不愿或是不能够在这个网 络上传输。为了支持类似的应用需求,mpls 也支持标记的层次结构,即一个数据包可能 包含多个标记。这多个标记被组织成一个先进后出的栈结构,所以这些标记被称为标记栈。 相应的,最先入栈的标记被称为栈底标记,最新入栈的标记被称为栈顶标记。但是,标记 的栈式结构对于 lsr 的转发部件是透明的,所有的转发决定必须而且只能基于栈顶标记。 一个数据包中包含的 mpls 标记的主要作用在于指示接受到这个数据包的 lsr 如何转 发这个数据包。但是必须注意的是,mpls 并没有被设计成网络层的替代协议,mpls 要 做的只是利用网络层提供的和其他控制部件所提供的控制信息,实现高效的并且灵活的转 发同样的 mpls 也不会代替链路层的工作。所以标记栈在数据报的封装位置应该是链路层 之后,网络层之前。 mpls 标记的在数据转发中所起的作用和 atm 的 vpi/vci 或是帧中继的 dlci 是类似 的。所以,就可以使用这些链路层数据封装中的这些域来封装 mpls 标记。但是,不是所 有的链路层都提供这种交换的机制,比如说 ppp 或是以太网,所以必须定义一个独立于网 络层和链路层封装的 mpls 头部。 我们现在描述一种被称为通用标记封装方法的封装方法,这种方法可以用于任何链路 层。它定义了一个独立于链路层的被称为 mpls 薄层的 mpls 封装,可以封装多个标记, 每个标记包括 20 位的 mpls 标记、3 位的实验域(exp) 、1 位栈顶标记和 8 位 ttl 域。 具体结构如下图所示: 0123 70 c 偍 卌 “ “ c “ “ 塅 “呔 “ 图表 1-5 这里标记域中所承载的就是我们在 1.1.1 里一直讨论的 l1、l2 这些用于指示转发行为 的标记。标记的数值范围为:0-220,0、1、2、3 这四个标记有特殊含义,4-15 保留。 标记值为 0 的标记叫做 ip v4 显式空标记,这个标记只能出现在栈底,这个标记对应 的转发动作只能是删除标记栈并且这个数据包将会被送给 ip v4 模块处理并转发。标记值 为 2 的标记叫做 ip v6 显式空标记,其语法和语义和 ip v4 显式空标记是类似的。 标记值为 3 的标记叫做隐式空标记。当一个 lsr 要给一个数据包换上一个新的标记时, 如果被换上的标记是这个标记,那么 lsr 就不会执行标记交换操作,相反的,lsr 会在数 据包中的标记栈上执行一个 pop 操作。所以这个标记值不会出现在报文封装中,只会用在 标记分发协议中。 标记值为 1 的标记叫做路由器提醒(router alert)标记,其作用类似于 ip 的路由器提 醒选项(router alert option) ,用于提醒沿途的 lsr 在转发这个数据包之前应该仔细检查 这个数据包,可以用在诸如 rsvp path 消息等消息报文需要沿途路由器而不仅仅是目的主 机处理的应用中。 exp 域(实验域)原先设计目的是用于实验目的,目前主要用于报文分类。起着和 ip 9 报文中 dscp 类似的作用,可以用于编码不同的 phb(per-hop behavior:逐跳行为) 。 s 比特叫做栈底标识(bottom of stack)的作用是指示当前这个标记是否是栈底标记。 ttl 域编码 8 位 ttl 值,其基本作用是防止环路和限制报文传输范围。通常通常对于 ttl 的处理过程是:在 mpls 网络入口路由器上,当接收到一个 ip 报文后,首先将其 ip ttl 减 1,当它被发送之前,ip ttl 应该被拷贝到 mpls 顶层标记中;在中间 lsr 上当它收到 一个带标记的报文时,首先将报文顶层标记中的 ttl 减 1,然后做标记交换操作并发送出 去,这里的交换只交换标记栈结构顶层标记封装中的 20 比特标记值;在出口 lsr 上,当 它收到一个带标记报文以后,首先会对 mpls ttl 做减 1 操作,然后做标记弹出操作,然 后将 mpls ttl 拷贝到报文的 ip ttl 域,并将其送给网络层发出。请注意,我们这里的 假设是一层标记栈,对于多层标记栈的操作是类似的,我们把这个问题留到习题里去。 对于在 atm、帧中继网络上标记的封装一般原则是:顶层(或最上两层)标记封装在 链路层的 vpi /vci 或 dlci 域中,而标记栈的其余标记则用我们上面描述的通用标记封装 方法封装。 我们这里讨论的是标记随数据报文一起发送时的封装形式,在下一部分要讨论的标记 分发协议的报文中,标记封装自然只包含 20 位标记值。 1.2.标记分发协议标记分发协议 1.1.3 标记分发协议概述标记分发协议概述 呒 “呒 2“ 卌 “ 卌 “ 卌 “ 42 2 2 2 2 2 2 2 42 2 2 2 42 2 2 2 2 2 2 2 42 2 2 2 2 2 2 2 42 2 2 2 潬 灯 慢 正 1 2 2 2 2 潬 灯 慢 正 2 2 2 2 偍 卌 2 2 2 2 图表 1-6 我们在前面讨论了一个 lsr 如何依据输入报文的顶层标记(或网络层地址)以及 ilm(或 ftn)来确定对于一个报文的转发行为(即得到 nhlfe) ,本节以及下一节将以 上图为例讨论 ilm、ftn 和 nhlfe 这些控制信息是如何形成的。 我们将把讨论限制于一个特定的 fec:所有目的地址属于网络 /24 的数据包。 对于这个 fec,我们下面描述一种可能的各 lsr 上标记转发信息生成过程。 10 1、当 lsrb 上路由协议收敛以后,即它发现 fec/24 以后,它就向上游 lsr 发布一个 fce-label 映射(以后我们将简称标记映射): ,其语义是:“当你发给我的报文顶层标记是 17 时,我将 对其采取 fec /24 的转发行为” 。当然,这里的上游 lsr 只会是 lsra,而不会包含 lsrc,因为 lsrb 从路由协议知道 fec /24 的下 一跳路由器是 lsrc,因而 lsrc 不应该将属于 fec /24 的数据包转 发给 lsrb。 2、当 lsra 从 e1 口收到这个映射以后,它就可以建立自己的 ftn 映射表了: nhlfe fec 下一跳发送接口标记操作其他 /24lsrbe1加上标记 17 图表 1-7 lsra 上的 ftn 映射 3、同样的 lsrc 也会给 lsrb 发送这样的标记映射:,由于标 记 3 具备倒数第二跳弹出的特殊含义,所以对 lsrb 而言,这个映射的语义 是:对于属于 /24 这个 fec 要经过 lsrc 转发的数据包,应该对原有 标记栈执行 pop 操作(而不是将原有标记栈顶层标记交换为 3) 。由于 lsrb 曾经发布过关于 /24 标记映射信息,因而现在 lsrb 就可以把这些信 息组合起来形成一张 ilm 表了: nhlfe 入标记 下一跳发送接口出标记其他 17lsrce13 图表 1-8 lsrb 上的 ilm 4、当然,对于 lsrc 而言,由于使用了倒数第二跳弹出技术,所以也就无需为 /24 这个 fec 形成标记转发表了。注意,由于考虑了倒数第二跳弹出, 所以这里的几个表格和 1.1.1 中的表格并不完全一样。 从以上过程可以看出,标记转发控制信息形成的关键就是在标记转发的上下游 lsr 之 间标记映射信息的传递:本质上就是下游 lsr 将特定标记和特定 fec 的映射通知给上游 lsr,这个标记映射传递过程被称为标记分发。 当然,正如前面所述,这里描述的标记分发方式只是两种可能的方式之一,上面描述 的这种方式被称为下游自主(du:downstream unsolicited)方式,其含义是指下游自主决 定是否给上游分发标记映射,而无需上游显式请求。另外一种方式叫做下游按需分配 (dod:downstream on demand)方式,这种方式下游只有在上游显式提出对于某个 fec 11 的标记请求才会向上游分发和这个 fec 相关的标记映射。 从全局观点来看,对于特定的 fec,各独立对于这个 fec 的 在他们之间链路上和某个标记的映射最终形成了一条 lsp。如在图表 1-6 中,对于 /24 这个 fec,最终形成了这样一条 lsp。在我们上面所说 明的过程所描述的 lsp 控制方法也是两种可选方法之一:独立 lsp 控制方法。所谓,独立 的 lsp 控制方式是指一个 lsr 在向上游分发和特定 fec 相关的标记映射之前,无需确保 自己已经获得下游关于这个 fec 的标记映射。我们可以看到图表 1-6 中的 lsrb 正是这样 做的:当它分发标记映射给 lsra 时,它还没有从 lsrc 得到关于 /24 的标记映射。另外一种 lsp 控制方式被称为有序方式,这种方式下,一个 lsr 在向上游分发和特定 fec 相关的标记映射之前,必须确保自己已经获得下游关于这个 fec 的标记映射(除非这个 lsr 本身就是对于这个 fec 的出口路由器) 。 对于特定 fec 的 lsp,mpls 标记转发的路由可以使用路由协议形成的逐跳路由,也 可以不使用即使用某种显式路由机制。对于前者我们称这条 lsp 是逐跳路由的 lsp,后者 则被称为显式路由的 lsp。截至目前为止,我们讨论的都是前者,后者在流量工程中有很 重要的应用。 独立的 lsp 控制方式和有序的 lsp 控制方法各有不同的应用场合,前者多用于控制逐 跳路由的 lsp,后者多用于控制显式路由的 lsp。经管这两种 lsp 控制方式可以和任意的 标记分发方式配合工作,但是下游自主的标记分发方式常和前者配合工作,以达到和路由 协议同时快速收敛的目的;相应的,下游按需的标记分发方式常和有序的 lsp 控制方式配 合使用,可以方便的实施显式路由。 具体在相邻 lsr 之间进行标记分发工作的是标记分发协议,目前可以用于标记分发协 议的有:ldp(label distribution protocol) 、cr-ldp(constraint-based ldp) 、rsvp- te(extensions to resource reservation protocol) 、bgp 等。下一节将介绍 ldp 协议,在以 后的章节中将会介绍其他的协议。 1.1.4 ldp 正如前一节所述,ldp(label distribution protocol)是一种用于在一对标记转发上下 游 lsr 之间分发 fec-label 映射信息的协议。这对标记转发上下游路由器互相被称为标记 分发对等体。尽管图表 1-6 中所示网络中,标记分发对等体之间都是直接相连的,但是这 并不意味着标记分发对等体必须直接相连,我们会在下一章介绍这个方面的应用。 ldp 以消息的形式在对等体之间分发、维护标记映射信息,为了保证标记分发的可靠 性,ldp 使用 tcp 的传输服务。总体上,所有 ldp 消息可以分为四类: 1、 发现消息:用于发现网络中的 ldp 相邻体 2、 会话消息:用于建立、维护和中止 ldp 对等体之间的会话 3、 分发消息:用于创建、改变以及删除和 fec 相关的标记映射 4、 通知消息:用于提供建议或错误通知信息 利用这些消息,ldp 大致工作过程如下图所示: 12 效 汬 o 2 效 汬 2 2 2 2 d d d 图表 1-9 从这张图可以看到,两个 ldp 对等体首先发现对方,然后和对方建立 tcp 连接,在 连接上,建立会话,最终在会话上传输标记请求和标记映射消息。 我们将在随后的章节中仔细讨论这些过程。 ldp 发现发现 从邻居发现的角度看,必须有一个标识不同 lsr 的一个 id,否则无法区分不同的邻 居。ldp 使用一个叫做 lsr id 的四字节数标识不同的 lsr。由于,同一个 lsr 上可能存 在完全的标记空间(例如:atm 交换机每个接口的 vci 是出于不同空间中的) ,所以从标 记分发的角度应该区分同一 lsr 上不同标记空间,ldp 使用一个字节的无符号整数来标 识标记空间。ldp 使用由 lsr id 和标记空间标识组成的被称为 ldp 标识符的字节无符 号整数标识作为一个独立的标记分发对等体。 ldp 有两种发现邻居机制:一是基本发现机制,一是扩展发现机制。 基本发现机制用于发现通过物理链路直接相连的 lsr,lsr 利用承载在目的地址为组 播地址:(网段上所有路由器)udp 报文上的 hello 消息向网段内所有路由器声 明自己的存在,当然这个 udp 报文的目的端口号是用于指示其中包含 ldp 协议的 646。 而扩展发现机制用于发现非直接相连(手工配置的)ldp 邻居,lsr 利用承载在目的 地址为手工配置的特定 lsr 地址的 udp 报文上的 hello 消息向这个配置的邻居声明自己 的存在,这个 udp 报文的目的端口号也是 646。 hello 消息并不是直接承载在 udp 报文上,而是封装在如图表 1-10 的 ldp pdu 头部 之后,一个 ldp pdu 可以包含多个不同 ldp 消息。 图表 1-10 13 其中: version 字段表示 ldp 协议版本号,目前为 1。 pdu length 表示整个 pdu 的长度,不包括 pdu length 和 version 域的长度。 ldp identifier 是指 6 个字节的 ldp 标识符。 尽管这两种机制处理方式并不一样,但是都利用基本一样的 hello 消息,下图列出了 hello 消息的格式: 图表 1-11 hello 消息的第一个比特通常叫做 u 比特,用于指示在消息接受者不能识别这个消息 的类型(随后的 15 比特域)情形下的处理方法:为零则向发送者发送一个错误通知消息, 为 1 则安静的忽略这个消息。 随后的 15 位域用于指示消息的类型,这里的 0x0100 就是指 hello 消息。message length 用于指示从 message id 域开始(包括 message id 域)的 hello 消息的长度。 message id 域用于给 hello 消息编号,以便于在其他消息(例如错误通知消息)中指 示和这个消息相关的信息。 common hello parameters tlv 中包含所有 hello 消息中必须包含的 tlv,这里的 tlv 是指形如的对象数据结构,事实上 hello 消息本身就是一个 tlv, 只不过它的 value 中又是一些 tlv 罢了。optional parameters 域中则包含一些可选的 tlv。 ldp hello 消息中 common hello parameters tlv 结构如下: 图表 1-12 其中: 第 1 位叫做 u 比特,用于指示包含这个 tlv 的消息接收者如果不能识别这个 tlv 时 的处理方式:u=0 则要向消息的发起者发送一个错误通知消息,同时丢弃包含这个 tlv 的 整个消息;u=1 则安静的忽略这个 tlv,继续其他 tlv 的处理。 第 2 位叫做 f 比特,这个比特只在 u=1 时才有用。如果 f=0,未知的 tlv 不会随包 14 含它的消息被转发;如果 f=1,未知的 tlv 则会随着包含它的消息一起被转发。 随后 14 位域是用于指示这个 tlv 的类型的,这里的 0x0400 表示 common hello parameters tlv。 length 域用于指示从 hold time 开始(包括 hold time 域)的 tlv 其余部分的长度, 实际上就是指这个 tlv value 部分的长度。 hold time 指示 hello 消息的接收者应该保持消息发送者 hello 纪录的时长,交互 hello 消息的双方会选取双方 hello 消息所指示的两个值中的较小者使用。 t=1 指示该 hello 消息是目标 hello(targeted hello) ,用于扩展邻居发现机制;t=0 则表明该 hello 消息是链路 hello 消息,用于基本邻居发现机制。r=1 请求消息接收者向消 息发送者回应目标 hello,r=0 则不请求。其余 14 比特保留未用。 ldp hello 消息中 optional parameters 可能包含如下可选参数:ipv4 传输地址、ipv6 传输地址和配置序列号三种可能,我们会在以后的章节中介绍这些选项的功能。 作为一个总结,我们给出利用 hello 消息来进行邻居发现的大致处理过程: 1、 对于基本发现机制:lsr 构造一个 hello 消息,在其中填上相应的参数,特别重要 的是 hold time,t、r 比特都置为 0,然后将这个 hello 消息放在一个 ldp pdu 中,ldp pdu 中填入 lsr id 和标记空间标识组成的 ldp 标识符,然后将这个 pdu 封装在目的地址为 ,目的端口为 646 的 udp 数据包中发送出去。这 个 hello 消息被它的直接链路邻居收到后,它就被它的邻居发现了。 2、 对于扩展发现机制:假定 lsra 和 lsrb 并非直接相连,他们互相配置为对方的 ldp 邻居。lsra 的动作为:构造一个 hello 消息,在其中填上相应的消息,如 hold time 等,特别的这里的 t=1、r=1,然后将这个 hello 消息放在一个 ldp pdu 中,ldp pdu 中填入 lsr id 和标记空间标识组成的 ldp 标识符,然后将 这个 pdu 封装在目的地址为 lsrb 的地址,目的端口为 646 的 udp 数据包中发 送出去。lsrb 收到这个数据包以后就发现了 lsra,同时 lsrb 也会给 lsra 回 应 hello 报文。 可以用三元组表示 lsra 上的标记空间 a 和 lsrb 上的标 记空间 b 在链路 l(是否物理链路都可能)之上的一个 hello 邻接体关系。从这里也可以 看出,同一对 ldp 标识符之间可能存在多个邻接体关系。 hello 报文不仅仅用于建立 hello 邻接体,而且还用于维护 hello 邻接体。hello 邻接体 中的任何一方都用周期性的 hello 报文证明自己的存在。显然,hello 报文的发送间隔应该 小于 hold time,一般为 hold time 的 1/3。 当一对 ldp lsr 互相发现了对方的存在以后,就可以建立两者之间用于标记分发的会 话了。 ldp 会话建立和维护会话建立和维护 为了保证 ldp 会话的可靠性,ldp 会话使用 tcp 的传输服务,所以建立 ldp 会话的 第一个步骤就是在一对 hello 对等体之间建立 tcp 连接。 当一个 lsr lsra 发现了一个新的邻接关系之后,它就会检查 是否已经有一个 tcp 连接在为标记空间对服务,如果没有那就准备建 立一个,并在此基础上建立会话,并标识此会话为 hello 邻接体。如 15 果已经存在一个 tcp 连接为此标记空间对服务,就标识基于此 tcp 连接的会话为邻接关 系服务(当然,当一个会话所服务的邻接关系数目为 0 时,此会话 必须被终止) 。显然,会话是没有考虑前面那个三元组的最后一元即链路的,这样显然可以 节省资源。 建立一个 tcp 连接的第一个步骤是确定传输连接双方所使用的 ip 地址。本端 ip 地址 决定于是否在 hello 消息选项中向对端通报传输地址选项(ipv4 或 ipv6) ,如果曾经通报 过,那么就使用通报的那个地址作为传输地址,否则,就使用发送 hello 消息的源 ip 地址 作为本端传输地址。相应的,对端传输地址的确定也是类似的:如

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论