MPLS及LDP协议基础

MPLS简介

MPLS概念的最初提出是为了提高转发效率。因为当时IP转发大多靠软件进行,在转发的每一跳都要进行至少一次最长匹配查找,操作复杂导致转发速度比较慢,由此诞生了MPLS技术(结合IP和ATM的优势于一身)。后来IP转发领域有很多新技术产生,如硬件转发与网络处理器的出现,导致MPLS的速度优势体现不出来,纯MPLS转发在实际应用中几乎没有用武之地。

很多新的应用依靠纯IP转发实现起来有很大的难度,但用MPLS再结合其它技术就可以实现,如:BGP/MPLS VPN、流量工程等技术的产生就是对MPLS灵活扩展的结果。

1.1 MPLS中的相关概念

Label:

即标签,在帧模式链路上,Label位于二层头与IP报文之间,一个Label头的结构如下:       

图1 标签格式

① Label:标签值,长度为20bit,标签值是标签转发表的关键索引。

② Exp: 用于QoS,长度为3bit,作用与Ethernet802.1p值相似。

③ S:栈底标识,长度为1bit,如果有多个Label时,在栈底的Label的S位置“1”,其它为“0”。只有一个Label时S位置“1”。

④TTL:存活时间,8bit,与IP报文中的TTL值相似,这个值从IP报文头的TTL域拷贝过来,每进行一次Label交换时,外层Label的TTL值就减“1”。

需要注意的是一个MPLS报文可以有多个Label,靠近二层头的Label为栈顶Label,靠近IP报文的Label为栈底Label,LSR执行Label交换时总是基于栈顶Label。有多个Label时,每个Label都包括以上完整的32bit,并不是其它的Label只包括20bit的Label值,如下图所示:        

图2 多层标签

① LSR(Label Switching Router):

采用标签交换转发报文的路由器。

② LER(Label Edge Router):

标记边缘路由器,处在MPLS网络的边缘,负责将进入MPLS网络的报文或帧对应到具体的FEC并打上Label,变成MPLS帧转发;将离开MPLS网络的帧去掉Label还原成原来的报文或帧再查找相应的转发表转发。

③ FEC(Forwarding Equivalence Class):

LSR认为具有相同转发处理方式的报文,使用同一个标签来标记这些报文。如:匹配相同目的IP前缀的多个IP报文可属于一个FEC,由于这些报文在做IP转发时是相同的转发处理方式及路径,所以标记这些报文的时候用同一个标签。

④ PUSH(加标签):

在第一跳Ingress LER上在报文的二层头和三层头之间插入Label,或者中间LSR在MPLS报文的标签栈顶增加新的Label。

⑤ POP(弹出标签):

在最后一跳Egress LER上将报文中的Label全部去掉,还原成IP报文,或者中间LSR去掉栈顶标签减少标签栈层次。

⑥ SWAP(交换标签):

在转发的过程中根据标签转发表中的LSP替换报文中栈顶Label的过程。

⑦ LSP(Label Switched Path):

标记转发路径,也就是转发MPLS报文的路径。

1.2 MPLS转发方式

MPLS技术综合了第二层交换和第三层路由的功能,将第二层的快速交换和第三层的路由有机地结合起来。MPLS网络边缘的LER主要完成以下工作:三层路由、分析IP包头用于决定对应的FEC和标签交换路径(LSP),进而标记报文。

而在MPLS网络核心的LSR采用基于标签的第二层交换,工作相对较简单。从这里就可以看出MPLS的好处,虽然处在MPLS网络边缘的LER工作较复杂,但处在核心的LSR只需要像FR或ATM交换机那样执行二层交换就可以了,根本不需要最长匹配和多次查找。

典型的MPLS转发过程如下:

Step 1: 所有LSR启用传统路由协议(OSPF、IS-IS等),在LSR中建立IP路由表。

Step 2: 由LDP结合IP路由表来建立LSP。

Step 3:Ingress LER接收IP包,分析IP包头并对应到FEC,然后给IP包加上标记,根据标签转发表中的LSP将已标记的报文送到相应的出接口。

Step 4:LSR收到带有标记的报文,将只分析标记头,不关注标记头之上的部分,根据Label头查找LSP,替换Label,送到相应的出接口……………..(中途转发过程与Step 4类似)。

Step n-1:倒数第二跳LSR收到带有标记的报文,查找标记转发表,发现对应的出口标签为隐式空标签或显式空标签,弹出标签,发送IP报文到最后一跳LSR。

Step n:在最后一跳Egress LER上执行三层路由功能,根据报文的目的IP地址转发。

LDP协议

LDP协议在[RFC 3036]中详细定义,LDP的协议报文除Hello报文基于UDP外,其它报文都是在TCP之上,端口号为646。当发生传输丢包时,能够利用TCP协议提供错误指示,实现快速响应和恢复。与BGP相似,这种基于TCP的可靠连接使得协议状态机较为简单。

2.1 报文格式

2.1.1 LDP PDU 头部      

图3 LDP PDU头部

① 版本号:16bit,目前LDP只有一个版本,版本号始终为1。

② PDU长度:为16bit,值为LDP PDU头部以后的数据部分的长度,不包括LDP PDU头部。

③ LDP Id:长度为48bit,前32bit为LSR-ID,后16bit为标记空间标志,全局空间为“0”,局部接口空间为“1”。如:收到的LDP PDU中的LDP-ID为192.168.1.2:0,表示对方的LSR-ID为192.168.1.2,标签空间为全局空间。

2.1.2 LDP 消息格式        

图4 LDP消息格式

① U:这一位总是为“0”,代表可识别的消息,为“1”代表不可识别的消息。

② 类型域:协议根据这个域识别不同的消息。

③ 长度域:指示出长度域之后的数据部分的长度。

④ 消息ID:用来唯一地标识这个消息,如果消息为Notification,则ID与导致产生Notification的消息ID相关联。

2.1.3 消息种类

按照功能分类,LDP协议中总共有四类消息:

1.邻居发现消息:在启用LDP协议的接口上周期性发送该消息。

① Hello消息

2.会话建立和维护消息:用来建立和维护LDP会话。

① Initialization消息。

② KeepAlive消息。

3.标签分发消息:用来请求、通告及撤销标签绑定。

① Address message。

② Address Withdraw message。

③ Label request message。

④ Label mapping message。

⑤ Label withdraw message。

⑥ Label release message。

⑦ Label abort request message。

4.错误通知消息:用来提示LDP对等体在会话过程中的重要事件。

① Notification消息。

2.2 LDP相关概念

2.2.1 标签空间

可分为全局标签空间和接口标签空间,全局标签空间表示LSR为特定目的地的FEC产生唯一的Label,接口标签空间表示LSR在每个接口上为特定目的地的FEC产生唯一的Label。在帧模式的链路上为全局标签空间,在信元模式的链路上为接口标签空间。LDP报文中的LDP-ID域中指示出标签空间值。

2.2.2 上游与下游LSR       

图5 上下游/定义

如图所示,对于某FEC(图示中的IPv4前缀)来说,C是B的下游路由器,A是B的上游路由器。

2.2.3 倒数第二跳弹出(Penultimate Hop Popping)

在实际应用当中(如MPLS VPN),对于Egress LSR在弹出最外层Label后还需要进行其它较复杂的三层工作。而事实上最外层标签的作用在MPLS VPN的应用中只是为了将报文送到Egress LSR。

因此,在倒数第二跳LSR已知报文下一跳的情况下,可以将最外层的标签弹出后转发到最后一跳LER,而不必进行标签替换。这样使得最后一跳LSR的工作相对简单了一些。

因此在 [RFC 3032] 中规定,最后一跳LSR发给倒数第二跳LSR的标签为隐式空标签“3”。据此,收到标签“3”的上游LSR就知道自己是该FEC的倒数第二跳,就知道自己在用该LSP转发Label报文时,应执行倒数第二跳弹出。 

图6 倒数第二跳弹出

2.3 标签分发方式

2.3.1 DU(Downstream Unsolicited)

下游LSR如果工作在DU方式(下游主动分发)下将根据某一触发策略向上游LDP邻居主动分发标签。下图中LSR-C标签分发触发策略是为直连32位掩码的路由分配标签,因此LSR-C通过Label mapping message向上游LDP邻居主动通告自己的直连路由172.16.1.1/32的标签,Comware系统缺省工作在DU方式。        

图7 下游主动分发

2.3.2 DOD(Downstream On Demand)

下游LSR如果工作在DOD方式(下游按需分发)下,只有在接收到上游LDP邻居的Label request message后才回应Label mapping message分发标签(针对标记请求消息所指定的FEC)。

下图中LSR-C工作在DOD模式下,LSR-A的触发策略生效(LSR-A转发到172.16.1.0/24的报文流量达到设定阀值)后将向172.16.1.0/24的下游发送标记请求消息Label request message(请求172.16.1.0/24的标签)。最终LSR-C收到请求,发送Label mapping message响应。    

图8 下游按需分发

2.4 标签控制方式

2.4.1 独立控制方式(Independent)

LSR如果工作在独立控制方式下,如果标签分发方式是DU,即使在没有获得下游标签的情况下也会直接向上游分发标签。在标签控制的方式上显得很“独立”,不依赖下游LSR;如果标签分发方式是DOD,发送标签请求的LSR的直连上游LSR会直接回应标签,而不必等待来自最终下游的标签。        

图9 独立控制方式

在上图中,在LSR-B上采用独立控制方式。LSR-B路由表中有172.16.1.0/24的路由,但没有收到下游来的标签绑定。由于LSR-B工作于独立控制方式,所以对路由表中的所有路由都向上游发送标签。继而,无论LSR-A工作在独立模式还是有序模式,将向上游继续发送标签。

这时,如果有目的IP为172.16.1.0/24的报文进入LSR-A,它将采用MPLS转发。但数据到LSR-B后,由于没有关联172.16.1.0/24的LSP,所以采用传统IP转发。

2.4.2 有序控制方式(Odered)

LSR如果工作在有序控制方式下,如果标签分发模式为DU,则只有收到下游LSR分发的标签时才会向自己的上游LSR通告标签,如果没有收到下游的标签映射则不向上游LSR通告。Comware系统缺省工作在有序方式。        

图10 有序控制方式

在上图中,LSR-B路由表中有172.16.1.0/24的路由,但由于LSR-B没有收到下游的标签且工作在有序模式,因而不向上游通告关于172.16.1.0/24的Label。

如果LSR-A收到目的IP为172.16.1.0/24的报文将采用传统IP转发。可以看出,在有序控制方式下,是否向上游LSR分发标签取决于自己是否收到下游LSR的标签。

2.5 标签保留方式

2.5.1 自由保留模式(Liberal retention mode)(建议)

收到无效的Label通告后(没有对应的IP路由或路由通告与Label通告的下一跳不一致),虽然不生成LSP,但在标签绑定表里存储,并且LSR向上游通告其它FEC的Label绑定时也不占用这些标签,这种方式的优点是LSR应对网络拓扑变化的响应较快,缺点是浪费标签,所有不能生成LSP的Label通告都需要保留。      

图11 自由保留模式

在上图中LSR-A工作于自由保留方式,对于FEC为172.16.1.0/24将生成下一跳为LSR-B的LSP,LSR-C发来的Label通告将保留。如LSR-A和LSR-B之间的直连链路down掉,对于FEC:172.16.1.0/24的将很快生成下一跳为LSR-C的LSP。

2.5.2 保守保留模式(Conservative retention mode)

工作于保守保留模式的LSR收到无效的Label通告后将不存放到标签绑定表里,在向上游通告Label时可以自由使用这些标签。保守保留模式的缺点是对拓扑变化的响应较慢,优点是节省标签。     

图12 保守保留模式

在上图中,LSR-A工作于保守保留模式,对于FEC为172.16.1.0/24将生成下一跳为LSR-B的LSP,LSR-C发来的Label通告将不保留。如LSR-A和LSR-B之间的直连链路down掉,对于FEC:172.16.1.0/24将不能很快生成下一跳为LSR-C的LSP。

2.6 LDP会话建立过程

Step 1 :互发Hello消息,Hello消息中包括LDP-ID和Transport Address。双方将用Transport Address建立LDP会话,收到Hello消息后再进一步比较Transport Address确定由谁作为主动方发起TCP连接。

Transport Address大的一方将作为主动方发起TCP连接。被动方等待对方发起连接。在下图中将由LSR-B作为主动方发起TCP连接。

Step 2 :TCP连接完成后由LSR-B发送Initialization消息来协商参数,包括:LDP协议版本、Label分发方式、HoldTime、接收者的LSR-ID等。

Step 3:如果接收Initialization的LSR-A发觉对方的参数自己不能接受,则发送Notification消息结束会话:否则的话由LSR-A回应Initialization消息同时也发KeepAlive消息,两个消息可以在一个报文中同时携带。

Step 4:如果LSR-B接受Initialization消息中携带的参数则发送KeepAlive,LDP会话成功建立。可以在同一个报文中携带KeepAlive消息和其它Session消息,如Address消息和Label mapping消息。

报文交互过程如下:        

图13 LDP会话建立过程

在此过程中,LSR检测到任何错误都会发Notification报文关闭连接。

2.6.1 LDP状态机

1.NON EXISTENT状态:

该状态类似BGP的Idle状态,为LDP会话的最初状态。在此状态双方发送Hello消息,选举主动方,在收到TCP连接建立成功事件的触发后变为INITIALIZED状态。

2.INITIALIZED状态:

在该状态下分主动方与被动方两种情况,主动方将发送Initialization报文,转向OPENSENT状态,等待回应的Initialization消息;被动方在此状态等待主动方发给自己Initialization消息,如果收到的Initialization报文的参数可接收,则发送Initialization和KeepAlive转向OPENREC状态。

主动方和被动方在此状态下收到任何非Initialization消息或等待超时,都会转向NON EXISTENT状态。

3.OPENSENT状态:

此状态为主动方发送Initialization报文后的状态,在此状态等待被动方回答Initialization消息和KeepAlive消息,如果收到的Initialization消息中的参数可以接受则转向OPENREC状态;如果参数不能接受或Initialization消息超时则断开TCP连接转向NON EXISTENT状态。

4.OPENREC状态:

在此状态不管主动方还是被动方都是发出KeepAlive后的状态,在等待对方回应KeepAlive,只要收到KeepAlive消息就转向OPERATIONAL状态;如果收到其它消息或者KeepAlive超时,则转向NON EXISTENT状态。

5.OPERATIONAL状态:

它是LDP Session成功建立的标志。在此状态下可以发送和接收所有其它的LDP消息。在此状态如果KeepAlive超时或者收到致命错误的Notification消息(Shutdown消息)或者自己主动发送Shutdown消息主动结束会话,都会转向NON EXISTENT状态。

LDP状态机如下图所示:         

图14 LDP协议状态机

L3VPN基础

3.1 VPN的模型及典型实现技术

图1 VPN网络结构示意图

如上图所示,构成一个VPN网络的关键组件如下:

1.CE(Custom Edge):

直接与服务提供商相连的用户设备。

2.PE(Provider Edge Router):

指骨干网上的边缘设备(如路由器、ATM交换机、帧中继交换机等),与CE相连,主要负责VPN业务的接入。

3.P(Provider Router):

指骨干网上的核心路由器,主要完成路由和快速转发功能。P设备根据网络结构及规模可有可无。

任何一个VPN网络都是由这几个组件全部或部分组成的。

下面我们来介绍一下VPN网络的几种主要模型:

3.1.1 Overlay VPN——覆盖VPN模型

Overlay VPN的主要特点是客户的路由协议总是在客户设备之间交换,而服务提供商对客户网络的内部结构一无所知。

典型的Overlay VPN技术有:

① 二层隧道技术如X.25、帧中继、ATM。

② 三层隧道技术如IP-over-IP隧道技术等。其中IP-over-IP隧道技术通过专用IP主干或INTERNET来实现覆盖VPN网络,最常用的技术是GRE和IPSEC等。

Overlay VPN的主要缺陷是:

① 连接性比较复杂时管理开销非常大。

② 要正确提供VC的容量,必须了解站点间的流量情况,比较难统计。

3.1.2 Peer-to-Peer VPN——对等VPN模型

Peer-to-Peer VPN的主要特点是服务提供商的PE设备直接参与CE设备的路由交换。该VPN模型的实现依据是:如果去往某一特定网络的路由未被安装在路由器的转发表中,在那台路由器上,该网络不可达。实施Peer-to-Peer VPN的前提是所有CE端的地址是全局唯一的!

典型的Peer-to-Peer VPN技术有:

1.专用PE接入技术

图2 专用PE Peer-to-Peer VPN组网图

2.共享PE接入技术

图3 共享PE Peer-to-Peer VPN组网图    

3.1.3 总结

现有VPN技术基本满足了客户私有网络通过公共基础设施互联的要求,但同时也存在一些固有缺陷,典型的是覆盖模型和对等模型不能很好的兼容。此外,对于不同VPN站点多租户的需求场景下,这两种方案也不能支持,因此MPLS VPN在这种背景下孕育而生。

### MPLS LDP协议工作原理详解 #### 建立LDP会话 多协议标签交换 (MPLS) 中的标签分发协议 (LDP) 是一种用于在网络设备间分配标签并建立标签交换路径 (LSP) 的控制协议。为了实现这一目标,两个标签交换路由器 (LSR) 需要先通过TCP连接建立LDP会话[^1]。 #### 动态交换标签与FEC映射信息 一旦建立了LDP会话,LSRs就可以开始动态地交换关于转发等价类 (FEC) 和相应标签的信息。这种信息交换允许网络中的各个节点知道如何处理特定的数据流,并据此构建起完整的LSP。 #### FEC分类和标签分配 LDP不仅管理着这些通信通道上的数据传输,还定义了具体的流程来决定哪些流量属于同一个FEC类别,并为它们分配唯一的标签。这一步骤对于确保不同类型的业务能够得到适当的服务质量至关重要。 #### 维护LSP状态 除了初始设置外,LDP也持续监控已创建的LSP的状态,当检测到任何变化时——比如链路失效或拓扑变更——它将及时更新相应的标签绑定关系以保持整个系统的连通性和效率。 ```python # Python伪代码展示简单的LDP邻居发现机制 def discover_ldp_neighbors(): """模拟LDP邻居发现过程""" neighbors = [] while True: neighbor_hello_message = receive_hello_message() if is_valid_neighbor(neighbor_hello_message): establish_tcp_session_with_neighbor(neighbor_hello_message.source_ip) send_initialization_message_to_new_neighbor(neighbor_hello_message.source_ip) # 添加新邻居至列表 neighbors.append({ 'ip': neighbor_hello_message.source_ip, 'state': 'initialized' }) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值