MPLS-LDP实际应用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
概述
MPLS(multiprotocol label switching)体系有多种标签分配协议,LDP标签分配协议是这些协议中使用较广的一种。
LDP是LSR之间协商标签含义的过程,标签就是用于两个LSR之间进行数据转发的。
利用LDP可以实现将网络层的路由信息直接映射到数据链路层的交换路由,进而建立起标签交换路径(LSP)。
LSR之间将依据本地转发表中对应于一个特定FEC的入标签、下一跳节点、出标签等信息连接在一起,从而形成跨越整个MPLS域的标签交换路径。
1基本概念:
1.1LSR
支持标签交换的路由器。
可以实施MPLS中描述的标签交换控制和转发的网络设备。
✧入口LSR(又称边缘LSR或标记边缘路由器(LER)):在这个“起始点”上,该
LSR必须检查数据包并按照特定的LSP对该数据包进行分类。
由于需要根据诸
如源/目的IP地址、DiffServ代码点、端口号码或应用的内容等多种标准分
类数据包,入口LSR通常比普通路由器更多地用于处理数据包的分类。
✧转发 LSR (又称核心LSR):转发 LSR接收带标记的数据包,进行标记交换,
并将这些数据包按照带标记的数据包进行再转发。
在MPLS网络的所有LSR中,
转发LSR通常必须要具备非常高的性能指标。
衡量核心LSR的性能,通常是
看该设备能维护的大量动态标记交换路径(LSP)、设备的路由性能,或者是
两者的结合。
✧出口LSR(又称边缘LSR或标记边缘路由器(LER)):出口LSR接收带标记或
者无标记的数据包,将每个数据包转换为IP数据包并进行发送。
将数据包转
换为IP数据包是出口LSR的繁重任务。
这是由于MPLS标记栈条目必须被剥
离,TTL信息必须从标记复制到IP包头,而且必须重新计算IP校验和。
出口
路由器的性能可能由于某些因素而降低,包括路由和LSP数量以及IP路由安
排的复杂性等。
1.2 LSP(标签交换路径)
有一个或多个标签交换跳连接而成的路径。
通过标签交换,分组可以从一个LSR转发到另一个LSR.
1.3 LDP Peer(LDP 对等体):
用LDP协议交换mpls标签的两台LSR互称为LDP peer。
在他们之间存在LDP session。
1.4Label space(标签空间):
标签空间是用来讨论标签分配/分发的。
现存在两种标签空间:基于接口的,基于平台的。
基于接口的标签空间是为每个接口分配一个空间。
只有当LDP Peer直连到接口上时基于接口的标签空间才有意义。
基于平台的标签空间是为多个接口分享同一个标签空间。
1.5 FEC(转发等价类):
转发等价代表了一个分组集合,属于该集合的分组产生的时间可能不一致,但是它们对于传输过程的要求是完全相同的。
在常规的IP转发过程中,每经过一个结点,分组都要被查表一次,以确定它的FEC;而在MPLS中,分组判定属于哪一个特定FEC的工作仅在它进入MPLS网时做一次,之后就不再需要。
FEC可以依据对某些特定分组的特定处理需求建立,也可以仅仅依据网络地址前缀建立。
而每一个具有标记交换功能的路由器(LSR)都将建立一个表格,该表由本结点的FEC和FEC对应的标记组成,以指明一个分组如何被转发,这个表被称为标记信息库(LIB)。
1.6 TLV(Type-Length-Value Encoding):
LDP应用TLV编码LDP消息携带的很多信息,所有的LDP消息都有如下格式:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|U| Message Type | Message Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Message ID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| Mandatory Parameters |
+ +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| Optional Parameters |
+ +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
一共有 11 个消息类型:Notification Message;Hello Message;Initialization Message;KeepAlive Message;Address Message;Address Withdraw Message;Label Mapping Message;Label Request Message;Label Abort Request Message;Label Withdraw Message;Label Release Message 。
每一种消息的格式都一样只是填充的内容不同。
1.7 LDP Identifiers(LDP ID)
LDP Identifiers长度为6个字节,用于标识LSR的标签空间。
前四字节标识LSR,
必须是全局唯一值。
后两字节标识LSR特定的标签空间。
基于平台的标签空间,后两字节都是零。
LDP Identifiers可以表示为 <LSR Id> :<label space id> 例如 192.168.1.1:
0.0, 10.10.10.1:2.1 。
2 LDP消息交换:
LDP协议中规定了四类LDP消息:
✧Discovery messages :用来通告和维护网络中LSR的存在;
✧Session messages :用来建立、维护和停止对等体之间的session;
✧Advertisement messages :用来创建、改变和删除针对FEC的标签绑定;
✧Notification messages :用来提供建议性的消息和错误通知。
发现消息提供了一种机制,LSR通过周期性的发送HELLO报文表明它在网络中的存在。
使用“发往所有路由器”的子网多播地址(224.0.0.2)的UDP报文。
Hello消息以UDP报文发向ldp端口(646)。
LSR通过hello消息学习到其他LSR,当它决定与其建立LDP session时,LSR通过TCP 连接建立LDP初始化进程。
当成功的完成LDP初始化后,两台LSR称为LDP Peer,可以交换通告消息了。
为了LDP操作的可靠,Session messages(session消息) 、Advertisement messages(通告消息)和Notification messages(通知消息)均使用TCP连接,只有Discovery messages(发现消息)使用UDP连接。
3LDP错误处理
通过Notification messages(通知消息),LDP错误或其他事件发送到LDP Peer。
有两种类型的通知消息:
✧错误消息------用来发送致命的错误。
如果LSR从LDP对等体的LDP session中接受到
错误消息,LSR将关闭TCP连接,终止LDPsession。
释放从此LDPsession中获得的所有标签映射。
✧通知消息------传送LSR信息或先前从LDP对等体接收到消息的状态。
4LDP工作过程:
4.1 LDP发现机制
LDP发现机制用于LSR发现潜在的LDP Peer。
有两种发现机制:
✧基本发现机制------用于发现链路上直连的LSR邻居。
✧扩展发现机制------用于发现链路上非直连LSR。
4.1.1基本发现机制
LSR通过周期性的发送LDP HELLO报文,实现LDP基本发现机制的。
HELLO报文中携带LDP Identifier及一些其他信息(例如:label space、transport address)。
如果LSR 在特定端口接收到LDP HELLO,表明此端口存在链路层潜在的LDP对等体(即:HELLO邻接体)。
它可以获得此接口的LDP邻接标签空间。
4.1.2扩展发现机制
通过扩展发现机制可以建立链路上非直连LSR之间的LDPsession。
LSR周期性的发送Target Hello到指定地址,实现LDP扩展发现机制的。
Target Hello使用UDP报文,目的地址是指定地址,目的端口是LDP端口(646)。
Target Hello同样携带LDP Identifier及一些其他信息(例如:transport address、hold time)。
如果LSR在特定端口接收到Target HELLO,表明此端口存在链路层潜在的LDP对等体。
它可以获得此接口的LDP邻接标签空间。
✧基本发现机制和扩展发现机制之间的差别:
A、target hello的目的地址是指定的IP地址,而不是组播地址(224.0.0.2);
B、基本发现机制是对称的,而扩展发现机制是非对称的。
主动方LSR发送target hello
给接收方LSR,接收方决定是否回应还是丢弃(Hello message—common parameters TLV中的R bit决定。
)。
接收方LSR选择周期性发送target hello给主动方LSR 作为回应。
(也就是说只要单方发送target hello就可以建立session。
)
4.2 LDP session 的建立和维护
4.2.1 LDP session 建立
两台LSR之间交换HELLO消息触发LDP session 的建立。
LDP session 建立过程分为两步:
-------以transport地址建立TCP连接;
-------session的初始化。
举例说明:
图1
假定LSR1和lSR2均采用基于平台的标签空间,表示为LSR1:0 ,LSR2:0。
通过HELLO的交换,LSR1产生HELLO邻接,将链路与LSR1:0和LSR2:0绑定在一起。
1、首先,LSR1与LSR2之间建立LDP session。
LSR1决定其transport地址作为TCP
连接的一端A1,同样LSR2决定它的transport地址作为TCP连接的另一端A2。
A1
的选取如下:
a、如果LSR1在0/1接口上发送的Hello报文中携带Transport Address(此项是
任选的),那么此Transport Address就是A1;
b、如果LSR1在0/1接口上发送的Hello报文中没有携带Transport Address,那
么此A1是LSR1的LSR ID地址;
LSR2的A2选取也一样。
2、接着,LSR1通过对比A1和A2的大小,决定它在 session 建立中充当的角色,是
active还是passive。
如果A1 > A2,则LSR1充当active方;反之,LSR1是passive
方。
A1和A2作为无符号整数的对比过程如下:
a、如果A1和A2不是同一地址家族,他们不能比较, session 不能建立;
3、如果LSR1是active方,它主动向A2地址、LDP端口(646)发起TCP连接。
如果
LSR1是passive方,它等待LSR2向自己的LDP端口建立TCP连接。
注意:LSR1获取A2是通过LSR2发送的HELLO消息而得到的。
4.2.2 LDP session 初始化
LSR1和LSR2建立Transport连接以后,他们通过交换Initialization messages(初始化消息)协商 session 参数。
协商的参数包括:LDP协议的版本,标签分发的方式(下游主动分发还是下游按需分发),hold time等等。
协商完成后,LSR1和LSR2之间建立基于标签空间LSR1:0和LSR2:0之间的LDP session 。
以图1为例,以LSR1角度分析。
连接建立后,如果LSR1是active方,它发送初始化消息给LSR2开始协商 session 参数。
如果LSR1是passive方,它等待LSR2发送的初始化消息。
在基于接口的标签空间下,如果LSR1与LSR2之间存在多条链路连接,passive LSR 直到接收到Initialization messages,才能知道新近建立的TCP连接与那个标签空间相连。
Initialization message 携带了双方的LDP Identifier (active LSR的label space和passive LSR的LDP Identifier)。
当LSR1是passive方:
a、如果LSR1接收到LSR2发送的Initialization messages,它将匹配此报文中携带
的LDP Identifier与HELLO消息携带的LDP Identifier。
b、如果是匹配的HELLO邻接,LSR2定义了此 session 的本地标签空间。
接着,LSR1
检查Initialization messages的 session 参数是否可以接受。
如果可以,那LSR1
回应一Initialization messages和KeepAlive message表明接受LSR2的 session 参数,初始化消息中含有自己打算采用的 session 参数。
如果不接受,LSR1发送
一Session Rejected/Parameters Error Notification message( session 拒绝
或参数错误的通知消息),关闭TCP连接。
c、如果不是匹配的HELLO邻接,LSR1发送一 Session Rejected/No Hello Error
Notification message,关闭TCP连接。
d、如果LSR1接受到LSR2发送的KeepAlive message(作为LSR1初始化消息的回应),
那从LSR1端看 session 处于operational状态。
e、如果LSR1接受到LSR2发送的Error Notification message,表明LSR2拒绝了LSR1
提议的 session 参数。
LSR1关闭TCP连接。
当LSR1是active方:
a、如果LSR1接受到LSR2发送的Error Notification message,表明LSR2拒绝了自
己提议的 session 参数。
LSR1关闭TCP连接。
b、如果LSR1接收到Initialization messages,它将检查LSR2回应的 session 参数
是否接受。
如果接收,它回应KeepAlive message;如果不接收LSR1发送Session Rejected/ParametersError Notification message 并关闭连接。
c、如果LSR1接受到LSR2发送的KeepAlive message(作为LSR1初始化消息的回应),
表明LSR2接受了自己提议的 session 参数。
d、当LSR1接受到LSR2发送的KeepAlive message和Initialization messages,从
LSR1端看 session 处于operational状态。
对于不停的发送错误通知消息的处理,LSR必须用指数后退(15x 2n)的方式抑制LDP session 建立的重试次数。
初始化消息被拒绝至少15秒以后,LSR才可以重新发送初始化消息。
如果再次被拒绝,LSR重新发送初始化消息必须在30秒以后,依次延迟的时间2倍增长直到达到最大回退时间2分钟。
此后将按照最大回退时间重试。
除非操作员重新配置其中的一LSR,否则被抑制的初始化消息序列不可能自动停止。
重新配置参数后,就不再抑制随后的session 建立。
由于 session 建立的不对称性,passive方的重新配置不会通知active方。
HELLO消息
中有一任选TLV(configuration sequence number),它可以向潜在的对等体通知它已经被重新配置。
4.2.3 HELLO邻接体的维护
一个LDP session 可以有多个HELLO邻接体。
当两台LSR(基于平台的标签空间)之间存在多条连接时,他们之间的 session 有多个HELLO邻接体。
在每条链路上发送的HELLO含相同的LDP Identifiers。
LDP用HELLO消息来监视LDP session 和HELLO对等体。
LSR为每个HELLO邻接体维护一个HELLO holder定时器,当他从对应的邻接体接收到HELLO消息后LDP启动相应的 holder定时器。
如果直到定时器超时也没有接收到对等体相应的HELLO,LSR认为对等体不再在此链路上使用当前标签空间交换标签了(或者HELLO邻接体故障)。
LSR将删除此HELLO邻接体。
当特定LDP session 的最后一HELLO邻接体删除时,LSR 发送通知消息关闭TCP连接终止 session 。
4.2.4 LDP session 的维护
LDP通过在 session 连接上接收到得LDP PDU监视LDP session 的完整性。
LSR为每个 session 维护一个 keepAlive定时器。
当接收到对等体的LDP PDU,LSR将keepAliver定时器复位。
如果直到定时器超时也没有接收到对等体的LDP PDU,LSR认为 session 传输错误或对等体故障,它关闭TCP连接终止 session 。
LDP session 建立后,LSR必须使对等体至少在每个keepalive时间内接收到一个LDP PDU,来确保对等体重新启动keepAliver定时器。
在LSR无其他消息通知LDP对等体时,它发送KEEPALIVE消息。
4.3标签分配和管理
MPLS体系结构中规定了两种标签分配方式:Downstream On Demand (下游按需分配)和 Unsolicited Downstream(下游主动分配)。
这两种方式可同时应用于同一网络中。
然而,对给定的LDPsession,每个LSR都必须知道对等体的标签分配方式。
(避免一方使用DU,自己认为对等体也使用DU的情况。
)
下游LSR主动向上游LSR分发标记映射消息
✧上游LSR向下游LSR请求标记映射消息,下游LSR向上游LSR分发标记映射消息
4.3.1 标签分配的控制模式
LSR采用的是独立的标签控制还是有序的标签控制决定了LSP初始化建立的行为。
✧独立的标签控制----LSR可以随意的广告label mapping给它的邻居。
例如:在
独立的下游主动模式下,只要LSR准备向某FEC交换标签,它就可以向它的对等
体们发送某FEC的label mapping。
下游的label mapping接收到之前,LSR可以
向上游通告label mapping。
✧有序的标签控制----LSR已经接收到某FEC下一跳的label mapping后(或者LSR
是出口路由器时),才能主动向上游发送此FEC的label mapping。
4.3.2 标签保持模式
标签保持模式是指LSR是否维持从邻居学习到的非下一跳的FEC标签映射。
✧保守标签保持模式----在下游主动分配模式下,LSR向所有的对等体发送所有路
由的label mapping消息。
采用保守标签保持模式,只有数据转发的FEC标签才被保留。
在下游按需分配模式下,LSR只向FEC下一跳的对等体LSR发送标签请求消息。
✧自由标签保持模式----在下游主动分配模式下,LSR向所有的对等体发送所有路由
的label mapping消息。
采用自由标签保持模式,从对等体接收到的所有标签将被保留,不管自己是否是此标签FEC的下一跳。
在下游按需分配模式下,采用自由标签保持模式,LSR向所有对等体发送所知道prefix的标签请求。
4.4LDP Identifiers and Next Hop Addresses
LSR通过Label Information Base (LIB)维护学习到的标签。
在DU模式下,同一地址前缀的LIB条目对应一组 LDP Identifier—label 对。
当某地址前缀的下一跳改变时,LSR必须从LIB中找到新下一跳LSR所分发的此FEC-标签,用于数据的标签转发。
(地址前缀的下一跳→ LDP Identifier→ label)同样,当LSR从对等体学习到某地址前缀的标签,它必须能确定此LDP对等体是否是此地址前缀的下一跳。
(LDP Identifier→对等体地址→检查是否是地址前缀的下一跳)为了使LSR能够在LDP Identifier和对等体地址之间进行映射,LSR发送地址消息和地址回收消息通知自己的IP地址信息。
4.5 Loop Detection (环路检测)
环路检测是可选的配置,提供了一种发现LSP环路,防止标签请求消息形成环路的机制。
环路检测机制应用Label Request和Label Mapping消息中路径向量(Path Vector)和跳数(Hop Count)TLV实现的. 路径向量(Path Vector)和跳数(Hop Count)TLV的属性如下:
路径向量(Path Vector)TLV----它包含消息所经过所有LSR的列表。
LSR在路径向量列表中用LSR ID唯一标识。
当LSR发送含路径向量TLV的消息时,它将自己的LSR ID加入到路径向量列表中;当LSR接收到的消息中路径向量列表含有自己LSR ID时,它认为消息已经经过了一个环路。
LDP支持最大允许路径向量长度的概念。
如果LSR检测到路径向量达到最大值,它也认为消息已经经过了一个环路。
跳数(Hop Count)TLV----它包含消息所经过所有LSR的个数。
当LSR发送含跳数TLV 的消息时,它将对跳数值加一。
当LSR检测到跳数达到配置的最大值时,它认为消息已经经过了一个环路。
约定跳数为0表示实际跳数未知。
跳数0的递增结果仍是0。
5图例分析:
标签交换的具体工作过程,可分为四部分:
1、igp路由协议(例如OSPF/RIP/IGRP)和LDP一起,在各个LSR中为有业务需求的
转发等效类(FEC)建立路由表和标签映射表。
2、边缘LSR接收分组,判断分组所属的FEC,并在分组上加上标签。
3、此后,在MPLS域内,LSR对标签分组不再进行基于ip地址的三层转发而是依据分
组上的标签及标签映射表进行操作转发;
4、出口LSR将分组的标签去掉,继续进行基于ip路由的转发。