MPLS--多协议标签交换技术
包交换
数据组成数据包,之后,在各个网络节点中不断传递,最终到达目标。 包交换转发效率不高的问题所在: 1,在整个包交换的过程中,需要先查询路由表之后再查看ARP缓存表两张表来完成转发过程,导致效率较低。 2,路由表的匹配原则——最长匹配原则导致路由表的查询效率不会太高。 3,路由表存在递归查找的过程 4,IP头部是可变长头部,导致我们对IP头部进行读取时需要使用软件进行处理,无法基于硬件进行快速地查找。
标签交换
标签交换在二层和三层封装之间,添加一个和路由表条目存在映射关系的标签,之后维护一张记录对应关系及转发接口的表,携带标签的数据来到设备上,先看标签,之后基于维护的标签转发表进行转发,而不再需要查看三层的内容,因为标签本身短小且定长,所以,其转发效率将高于包交换。 但是标签交换需要先给数据包打上标签,之后在到达目标之前还需要将标签弹出,因此,标签交换只是在转发过程中提高了效率,整体上相较于包交换提升不明显。
包交换的变更
1,进程交换——process switching——最早期的包交换——每一个数据包都需要先查看路由表,之后再查看ARP缓存表来确定二层封装的内容。 2,快速包交换(fast switching)——基于流的包交换——一次路由,多次交换——当一股数据流来到设备上,我们只针对第一个数据包执行路由过程,将路由的结果和数据包的特征(五元组)记录在缓存表中,之后,数据流中的其他数据来到设备将直接对比缓存表中的五元组,相同,则直接暗账转发方式进行转发而不再进行路由过程。 3,思科的特快交换技术——Cisco express forwarding——简称CEF技术,主要是将路由表和ARP缓存表中的内容进行预读取(就是将该递归的进行递归运算,该差ARP缓存表的提前查好),之后将结果记录在CEF表中,而CEF表是支持硬件转发的,所以,可以极大的提升路由的转发效率。 虽然,CEF技术是思科的私有技术,但是各大厂商也基于其思路设计出了属于自己的特快交换技术,华为设备在进行路由转发时就基于FIB(转发信息表),这个表是支持硬件转发的。
标签交换的应用
虽然标签交换无法替代包交换成为主流的转发技术,但是,依然和包交换在共同的发展,MPLS就是包交换和标签交换共同发展的产物,主要因为在一些领域下,标签交换可以做到更好: 1,用于解决BGP的路由黑洞 2,MPLS VPN 3,MPLS TE——流量工程——简单理解就是控制流量转发的路径
MPLS域
所有运行标签交换的路由器组成的转发网络,我们可以看作一个MPLS网络,我们将他称为MPLS域。我们将这些运行了MPLS的设备称为LSR——标签路由器 基于标签交换前提先得有标签,标签是每台LSR基于本地的路由表中的路由条目来生成的。我们将所有具有相同特征(所有匹配到同一条路由条目的数据包)的数据包称为FEC——等价转发类。同一个FEC需要配置同一个标签。 每台LSR级昂自己的标签和FEC的映射信息记录在本地的一张表中,这张表被称为——LIB(标签信息表)。之后,将和FIB表进行结合,生成LFIB表——标签转发信息表。 在整个过程中,LSR设备出了需要自己分配标签以外还需要知道其他LSR设备针对同一个FEC分配的标签,所以,标签交换和包交换一样也分为两个层面——控制层面,数据层面。 包交换 控制层面——路由协议的数据流方向,目的是为了获取未知网段的路由信息,生成路由表。 数据层面——设备基于已经完善的路由表(FIB)来转发具体的数据信息,其方向正好和控制层流量相反。 标签交换 控制层面——基于FEC分配标签,并获取其他LSR对同一个FEC分配的标签,之后,记录生成LIB表,之后结合FIB生成LFIB表。——这个过程可以基于静态来完成,也可以基于动态协议来完成——LDP协议(标签分发协议) 数据层面——设备基于LFIB表,根据标签进行转发。 入站LSR——(ingress)MPLS域的边界,当没有标签的数据包来到入站LSR上,他需要在数据包中压入标签。 中转LSR——(transit)完成标签置换动作的LSR设备 出站LSR——(egress)也是MLPS域的边界,完成标签的弹出动作。 整个过程中,数据层流量流动的路径为R1-R2-R3-R4,这条路径我们称为LSP——标签交换路径。需要注意的是LSP是单向的,如果想让数据双向来回,则还需要构建一条R4-R3-R2-R1的路径。
MPLS标签报文
label——20位——0-2的20次方——我们将标签号的取值范围称为标签空间,每台LSR设备的标签空间都是独立的。 0-15——特殊标签值——我们分配的时候不能直接分配,因为每个特殊标签都拥有其特殊的含义 16-1023——一般应用于静态LSP搭建 1024-2的20次方——应用于LSP等动态标签交换协议来分配时使用 EXP——占3位——做策略使用的——一般为000,可以理解为优先级,优先级高则可以优先转发。 s——占1位——栈底位——标签不止可以打一个,也可以打多个,我们将多个标签的有序集合称为标签栈。如果存在多个标签,需要使用这个标记位进行标识。如果是最后一个标签,则该位置为1.如果不是,则为0。 TTL——生存时间——和三层的TTL值一样,主要目的是为了防止数据包在环路中无限循环下去。数据来到入站LSR时,将吧三层的TTL值复制到标签中,在MPLS域中每经过一次转发,TTL减1,之后,在出站LSR上弹出标签,再将标签中的TTL值复制到三层包头中。
LDP
标签分发协议——主要应用在MPLS的控制层面 MPLS在控制层面需要完成的工作主要就是分配标签和传递标签,分配标签的前提是本地路由表中得先存在标签,传递标签的前提也是得先具备路由基础。所以,LDP想要正常工作,则需要IGP作为基础。 1,分配标签 分配标签并不是所有设备都针对自己本地路由表中所有的路由条目分配标签,而是在判断自己是自己到达某网段的出站LSR时,才会主动分配标签。 当然,在构成到达目标网段的LSP过程中,所有中间的LSR都需要给对应的FEC分配标签才行,则其他设备只有在收到标签和目标网段的映射关系后,才会被动的分配标签,分配标签之前需要完成检查动作,主要检查目标网段本地路由是否可达,以及下一跳和通告者是否相同,检查通过则可以分配标签,不通过则不能分配标签。 LDP的标签分配方式: 1,有序方式——华为设备默认选择的事有序方式分配标签。 2,独立方式——不需要确认自己是出站LSR,也可以主动给路由表中路由条目分配标签。 2,传递标签 出站LSR分配完标签之后,需要传递给其他的LSR设备,传递的前提条件是彼此之间得先是LDP对等体关系,而LDP对等体关系建立的前提条件是需要先建立LDP会话。 本地LDP会话——直连的两个设备之间建立LDP回话。 远程LDP会话——非直连设备之间,可以通过手工指定的方式来创建远程的LDP回话。 LDP协议在建立本地的LDP会话时,不需要手动指定邻居的IP地址,可以自动的发现邻居关系,主要是因为LDP手写会通过组播(224.0.0.2)的形式周期性发送hello包来发现邻居。hello包使用UDP 646 端口来完成。
本地LDP会话的建立过程
1,在LSR上激活LDP之后,首先周期性的发送hello包来完成对等体的发型工作。 在hello包中需要携带一些参数,其中包含传输地址和LDP ID。 传输地址:这个地址主要是后面建立TCP会话是需要用到的地址,默认情况下,我们将使用该设备的LSR ID来作为这个地址。所以要求,LSR ID必须是可用且可达的IP地址。 LDP ID:所有激活LDP协议的LSR设备都要求必须具有一个LDP ID,这个ID是由48 位二进制构成,表达方式为32位:16位,前32位使用的是LSR ID,后16位用0来表示。这个和标签空间有关,所有基于设备的标签空间,其值都为0. hello包的发送周期默认为5s,保活时间为3倍hello时间,默认为15s
2,双方在交互完hello包之后,将获取到对放的传输地址,则将根据这个传输地址来建立TCP会话。 在建立TCP会话之间,LDP也存在检查动作,需要先确认收到的传输地址,在本地路由表中是否可达,可达则可以正常建立TCP会话。 如果双方都建立TCP会话,则将创建两条双向通道,造成资源浪费,则在收到对端hello包中的传输地址之后,将和本地的传输地址进行对比,传输地址大的一方,我们称为主动方,主动方则可以主动建立TCP会话,而被动方则不建立。
3,完成TCP会话建立之后,传输地址大的一方将优先使用初始化报文,里面包含一些协商的参数发给被动方。对方如果确认里面的参数,则将恢复Keeplive报文进行确认,同时发送自己本地的初始化报文,携带自己的参数。主动方收到后也将对三叔进行确认,如果没问题则也将发送Keeplive报文。双方都收到Keeplive报文,则代表参数协商成功,LDP会话建立成功。 之后,也需要周期性的发送Keeplive报文进行保活,发送周期默认为15s,保活时间为3倍的周期发送时间,默认为45s。
上下游关系
有数据层流量流动方向来决定,数据发送方为上游,接收方为下游。从控制层的角度来看,则标签传递的放心应该是从下游发送到上游,之后上游设备回去收集下游的标签。
标签传递方式
DU模式——下游自主模式——华为设备默认采用的这种模式,所有LSR在分配标签之后,可以中的的将标签传递给其他LSR。 如果选择的事下游自主模式,则设备在传递标签时,无法判断上下有关系的,则会将标签发给所有的对等体关系。当设备收到标签之后,则将可以基于路由表判断上下游关系。华为设备,只有上游设备会记录下游设备发送的标签,而上游设备发送的标签下游设备将不会保存。(还有一种标签的保存模式是上下游标签都保存。) DOD模式——下游按需模式——只有下游设备在收到上游设备的通知之后,才会给上游设备发送标签。
数据层面流动过程
在数据层面流量通过的过程中,入站LSR设备和出站LSR设备都需要查询两张表,一张FIB表,一张LFIB表才可以完成转发过程,导致效率降低,需要优化。 优化思路: 入站LSR——因为入站的数据包中不包含标签,所以,必须查看FIB表。则可以直接将出站标签添加到FIB表中,这样则将不在需要查看LFIB表。 出站LSR——PHP——次末跳弹出机制——出站LSR设备在给FEC分配标签时直接分配特殊标签3(隐士空标签),之后,将这个标签传递给自己的上游设备,上游设备会把这个标签作为出站标签记录在LFIB表中。当有数据来到设备上,匹配LFIB时发现出站标签为3.则该LSR设备将直接把这个标签弹出。这样当出站LSR设备收到的将是一个不带标签的数据包,则出站LSR可以直接查看FIB表来实现转发。(华为设备默认开启次末跳弹出机制)
静态MPLS
构建静态LSP: 1.保证路由条件——静态只需要边界设备拥有来回路由信息即可 2.配置LSR 入站LSR 1,给LSR配置LSR—ID——32位二进制构成,都是按照IP地址格式来写,但是,只能手动配置 [r1]mpls lsr-id 1.1.1.1 LSR-ID建议使用环回接口的ip地址 2,激活MPLS 1,全局激活MPLS [r1]mpls 2,接口激活MPLS——所有需要参与MPLS数据手法的接口都需要激活 [r1-GigabitEthernet0/0/0]mpls 3,构建静态的LSP [r1]static lsp ingress 1to4 destination 4.4.4.0 24 nexthop 12.0.0.2 out label 1000 1,下一跳——必须和路由表中的下一跳一致 2,out label——出站标签——下一跳设备接受就需要根据这个标签判断数据到达那个网段 配置中转LSR: [r2]static-lsp transit 1to4 incoming-interface GigabitEthernet 0/0/0 in-label 1000 nexthop 23.0.0.2 out label 1001 出站LSR: [r4]static-lsp egress 1to4 incoming-interface GigabitEthernet 0/0/0 in-label 1002 查看MPLS域 display mpls routing-table
动态MPLS
LDP的配置: 1,现在所有LSR设备上启动IGP协议,保证路由基础。 2,配置MPLS的LSR ID 3,激活MPLS的LDP 全局激活 接口激活 [r1]display mpls ldp peer --- 查看LDP对等体关系 [r1]display mpls ldp session --- 查看LDP会话 [r4]display mpls lsp --- 查看LFIB表 注意:华为设备默认只给/32的主机路由分配标签,因为MPLS并没有主要应用在数据转发上,如果路由表中路由条目太多,则将导致生成过多LSP,造成资源浪费。 [r4-mpls]lsp-trigger all -- 这个命令可以让设备给出来/32主机路由外的路由分配标签 MPLS解决路由黑洞问题 [r2]route recursive-lookup tunnel --- 在进行路由递归查找的时候,如果有隧道则递归进隧道 [r2]display fib verbose --- 查看FIB表的细节信息
MPLS VPN
MPLS VPN是一种由运营商提供的专门解决虚拟专线安全及带宽问题的综合解决方案。 站点——可以理解为是一个组织机构在不同地址位置设置的不同的IP网络。 PE——服务提供商边界设备——需要连接CE设备(客户网络的边界设备),则需要接受客户私网的路由信息。他还需要将私网的路由信息传递到远端的PE设备上。这部分路由的传输主要使用BGP协议来进行传递。则中间的P设备(服务提供商的设备),只需要完成路由信息的高速转发即可。 VRF——虚拟路由转发——VPN instance(VPN实例)——我们可以将一台真实的物理设备抽象出多台虚拟的设备。每一个虚拟的设备就被称为一个VRF空间,每个VRF空间都拥有独立的路由表,FIB表,动态路由协议以及接口。 RD值——路由区分码——由64位二进制构成的,华为设备最常用的表达方式是AS:NN(AS代表所在的AS号,NN代表自定义值) VPN v4 路由——IPV4路由信息前面添加上RD值之后,从原来的32位变为96位,则将变成VPN v4路由。 MP-BGP——可以针对多种地址组的路由信息来进行携带。如果需要传递VPN v4路由,则需要使用MP-BGP来进行传递。 RT——路由目标值——VPN target——32位二进制构成——由不给牌的社团属性来携带 出站RT值——Export RT——PE设备为不同VRF空间配置不同的出站RT,发出由社团属性携带,需要和远端PE设备上的入站RT对应。 入站RT值——import RT——PE设备为不同VRF空间配置不同的入站RT,根据社团属性中携带的值进行对比,将其放入对应的VRF空间当中。 数据层流量——数据层流量主要是在到达远端PE设备上时无法分辨到底加入到哪个VRF空间中,所以,需要使用双层标签来进行区分。 外层标签(靠近二层)——公网标签——有LDP协议来分配,其目的是为了保证数据可以正常的通过MPLS域,到达远端PE。 内层标签(靠近三层)——私网标签——由MP-BGP协议来分配,目的是在远端PE设备上弹出外层标签后,可以根据内存标签判断到底是到达哪个VRF的数据流量。内层标签需要和VRF空间存在对应关系,这个标签是由MP-BGP分配后,通过社团属性随着路由传递到达对端PE。