zoukankan      html  css  js  c++  java
  • MPLS

    MPLS基础

    基础简介

      定义多协议标签交换MPLS(Multiprotocol Label Switching)是一种IP骨干网技术。MPLS位于TCP/IP协议栈中的链路层和网络层之间,用于向IP层提供连接服务,同时又从链路层得到服务。MPLS以标签交换替代IP转发,标签是一个短而定长的、只具有本地意义的连接标识符。MPLS在无连接的IP网络上引入面向连接的标签交换概念,将第三层路由技术和第二层交换技术相结合,充分发挥了IP路由的灵活性和二层交换的简捷性。

      IP技术凭借技术简单和成本低廉实现快速发展,Internet数据海量增长。但由于硬件技术存在限制,基于最长匹配算法的IP技术必须使用软件查找路由,转发性能低下,因此IP技术的转发性能成为当时限制网络发展的瓶颈。为了适应网络的发展,ATM(Asynchronous Transfer Mode)技术应运而生。ATM采用定长标签(即信元),并且只需要维护比路由表规模小得多的标签表,能够提供比IP路由方式高得多的转发性能。然而,ATM协议相对复杂,且ATM网络部署成本高,这使ATM技术很难普及。多协议标签交换技术MPLS(Multiprotocol Label Switching)就是在这种背景下产生的。

      MPLS最初是为了提高路由器的转发速度而提出的。与传统IP路由方式相比,它在数据转发时,只在网络边缘分析IP报文头,而不用在每一跳都分析IP报文头,节约了处理时间。随着ASIC技术的发展,路由查找速度已经不是阻碍网络发展的瓶颈,这使得MPLS在提高转发速度方面不再具备明显的优势。但是MPLS支持多层标签和转发平面面向连接的特性,使其在VPN(Virtual Private Network)、流量工程、QoS(Quality of Service)等方面得到广泛应用。  

      MPLS起源于IPv4,其核心技术可扩展到多种网络协议,包括IPv6、IPX(Internet Packet Exchange)和CLNP(Connectionless Network Protocol)等。MPLS中的“Multiprotocol”指的就是支持多种网络协议。

      由此可见,MPLS并不是一种业务或者应用,它实际上是一种隧道技术。这种技术不仅支持多种高层协议与业务,而且在一定程度上可以保证信息传输的安全性。  

      MPLS不局限于任何特定的链路层协议,能够使用任意二层介质传输网络分组。

    基本概念

    1. 转发等价类,FEC(Forwarding Equivalence Class)
      MPLS作为一种分类转发技术,将具有相同转发处理方式的分组归为一类,称为FEC。相同FEC的分组在MPLS网络中将获得完全相同的处理。

      FEC的划分方式非常灵活,可以是以源地址、目的地址、源端口、目的端口、协议类型或VPN等为划分依据的任意组合。例如,在传统的采用最长匹配算法的IP转发中,到同一个目的地址的所有报文就是一个FEC。

    2.标签(Label)

      标签是一个短而定长的、只具有本地意义的标识符,用于唯一标识一个分组所属的FEC。在某些情况下,例如要进行负载分担,对应一个FEC可能会有多个入标签,但是一台设备上,一个标签只能代表一个FEC。MPLS报文与普通的IP报文相比增加了MPLS标签信息,MPLS标签的长度为4个字节。MPLS标签封装在链路层和网络层之间,可以支持任意的链路层协议。MPLS标签的封装结构如下图所示。

        

      标签共有4个字段:
      ※Label:20bit,标签值域。
      ※Exp:3bit,用于扩展。现在通常用做CoS(Class of Service),当设备阻塞时,优先发送优先级高的报文。
      ※S:1bit,栈底标识。MPLS支持多层标签,即标签嵌套。S值为1时表明为最底层标签。
      ※TTL:8bit,和IP报文中的TTL(Time To Live)意义相同。
      标签栈(Label Stack)是指标签的排序集合。如上图所示,靠近二层首部的标签称为栈顶MPLS标签或外层MPLS标签(Outer MPLS label);靠近IP首部的标签称为栈底MPLS标签或内层MPLS标签(Inner MPLS label)。理论上,MPLS标签可以无限嵌套。目前MPLS标签嵌套主要应用在MPLS VPN中。

      标签栈按后进先出方式组织标签,从栈顶开始处理标签。

    3. 标签交换路由器,LSR(标签交换路由器)
      LSR是进行MPLS标签交换和报文转发的网络设备,也是MPLS网络中的基本元素。由LSR构成的网络区域称为MPLS域(MPLS Domain)。位于MPLS域边缘、连接其他网络的LSR称为边缘路由器LER(Label Edge Router),区域内部的LSR称为核心LSR(Core LSR)。
    4. 标签交换路径,LSP(Label Switched Path)
      一个转发等价类在MPLS网络中经过的路径称为LSP。在一条LSP上,沿数据传送的方向,相邻的LSR分别称为上游LSR和下游LSR。
      LSP在功能上与ATM和帧中继(Frame Relay)的虚电路相同,是从MPLS网络的入口到出口的一个单向路径。LSP中的每个节点由LSR组成。
    5. 标签分发协议,LDP(Label Distribution Protocol)
      LDP是MPLS的控制协议,它相当于传统网络中的信令协议,负责FEC的分类、标签的分配以及LSP的建立和维护等一系列操作。
      MPLS可以使用多种标签发布协议,包括专为标签发布而制定的协议,例如:LDP、CR-LDP(Constraint-Based Routing using LDP,基于约束路由的LDP);也包括现有协议扩展后支持标签发布的,例如:BGP(Border Gateway Protocol,边界网关协议)、RSVP(Resource Reservation Protocol,资源预留协议)。同时,还可以手工配置静态LSP。
    6. LSP隧道技术
      MPLS支持LSP隧道技术。
      一条LSP的上游LSR和下游LSR,尽管它们之间的路径可能并不在路由协议所提供的路径上,但是MPLS允许在它们之间建立一条新的LSP,这样,上游LSR和下游LSR分别就是这条LSP的起点和终点。这时,上游LSR和下游LSR间的LSP就是LSP隧道,它避免了采用传统的网络层封装隧道。
      如果隧道经由的路由与逐跳从路由协议中取得的路由一致,这种隧道就称为逐跳路由隧道(Hop-by-Hop Routed Tunnel);否则称为显式路由隧道(Explicitly Routed Tunnel)。
    7. 多层标签栈
      如果分组在超过一层的LSP隧道中传送,就会有多层标签,形成标签栈(Label Stack)。在每一隧道的入口和出口处,进行标签的入栈(PUSH)和出栈(POP)操作。
      标签栈按照“后进先出”(Last-In-First-Out)方式组织标签,MPLS从栈顶开始处理标签。
      MPLS对标签栈的深度没有限制。若一个分组的标签栈深度为m,则位于栈底的标签为1级标签,位于栈顶的标签为m级标签。未压入标签的分组可看作标签栈为空(即标签栈深度为零)的分组。

    原理描述

    1.基本结构

      1)网络结构

      MPLS网络的典型结构如下所示。

        

      IP报文进入MPLS网络时,MPLS入口的LER分析IP报文的内容并且为这些IP报文添加合适的标签,所有MPLS网络中的LSR根据标签转发数据。当该IP报文离开MPLS网络时,标签由出口LER弹出。IP报文在MPLS网络中经过的路径称为标签交换路径LSP(Label Switched Path)。LSP是一个单向路径,与数据流的方向一致。

      如上图,LSP的入口LER称为入节点(Ingress);位于LSP中间的LSR称为中间节点(Transit);LSP的出口LER称为出节点(Egress)。一条LSP可以有0个、1个或多个中间节点,但有且只有一个入节点和一个出节点。根据LSP的方向,MPLS报文由Ingress发往Egress,则Ingress是Transit的上游节点,Transit是Ingress的下游节点。同理,Transit是Egress上游节点,Egress是Transit的下游节点。

      2)体系结构  

      MPLS的体系结构如下图所示,它由控制平面(Control Plane)和转发平面(Forwarding Plane)组成。

         

      ※控制平面:负责产生和维护路由信息以及标签信息

        – 路由信息表RIB(Routing Information Base):由IP路由协议(IP Routing Protocol)生成,用于选择路由。
        – 标签分发协议LDP(Label Distribution Protocol):负责标签的分配、标签转发信息表的建立、标签交换路径的建立、拆除等工作。
        – 标签信息表LIB(Label Information Base):由标签分发协议生成,用于管理标签信息。
      ※转发平面:即数据平面(Data Plane),负责普通IP报文的转发以及带MPLS标签报文的转发。
        – 转发信息表FIB(Forwarding Information Base):从RIB提取必要的路由信息生成,负责普通IP报文的转发。
        – 标签转发信息表LFIB(Label Forwarding Information Base):简称标签转发表,由标签分发协议在LSR上建立LFIB,负责带MPLS标签报文的转发。

    2.MPLS标签的发布和转发

      1)LSP 的建立

      MPLS需要为报文事先分配好标签,建立一条LSP,才能进行报文转发。

      动态LSP的标签发布协议
      动态LSP通过标签发布协议动态建立。标签发布协议是MPLS的控制协议(也可称为信令协议),负责FEC的分类、标签的分发以及LSP的建立和维护等一系列操作。
      MPLS可以使用多种标签发布协议:

    • LDP(Label Distribution Protocol):是专为标签发布而制定的协议。LDP根据IGP、BGP路由信息通过逐跳方式建立LSP。
    • MP-BGP(Multiprotocol Border Gateway Protocol):是在BGP协议基础上扩展的协议。MP-BGP支持为MPLS VPN业务中私网路由和跨域VPN的标签路由分配标签。

      动态LSP的基本建立过程
      标签由下游LSR分配,按从下游到上游的方向分发。如下图,由下游LSR在IP路由表的基础上进行FEC的划分,并根据FEC分配标签,通告给上游的LSR,以便建立标签转发表和LSP。

       

      2)MPLS 转发

      MPLS 基本转发过程

      MPLS标签转发的3个基本动作:包括标签压入(Push)、标签交换(Swap)和标签弹出(Pop)

    • Push:当IP报文进入MPLS域时,MPLS边界设备在报文二层首部和IP首部之间插入一个新标签;或者MPLS中间设备根据需要,在标签栈顶增加一个新的标签(即标签嵌套封装)。  
    • Swap:当报文在MPLS域内转发时,根据标签转发表,用下一跳分配的标签,替换MPLS报文的栈顶标签。
    • Pop:当报文离开MPLS域时,将MPLS报文的标签剥掉。在最后一跳节点,标签已经没有使用价值。这种情况下,可以利用倒数第二跳弹出特性PHP(Penultimate Hop Popping),在倒数第二跳节点处将标签弹出,减少最后一跳的负担。最后一跳节点直接进行IP转发或者下一层标签转发。默认情况下,设备支持PHP特性,支持PHP的Egress节点分配给倒数第二跳节点的标签值为3。

      以支持PHP的LSP为例,说明MPLS基本转发过程。

         

      如上图,MPLS标签已分发完成,建立了一条LSP,其目的地址为4.4.4.2/32。则MPLS基本转发过程如下:
      1. Ingress节点收到目的地址为4.4.4.2的IP报文,压入标签Z并转发。
      2. Transit节点收到该标签报文,进行标签交换,将标签Z换成标签Y。
      3. 倒数第二跳Transit节点收到带标签Y的报文。因为Egress分给它的标签值为3,所以进行PHP操作,弹出标签Y并转发报文。从倒数第二跳转发给Egress的报文以IP报文形式传输。
      4. Egress节点收到该IP报文,将其转发给目的地4.4.4.2/32。

    LDP

      LDP是标签发布协议的一种,用来动态建立LSP。通过LDP,LSR可以把网络层的路由信息映射到数据链路层的交换路径上。

    1.基本概念

    • LDP会话:LDP会话建立在TCP连接之上,用于在LSR之间交换标签映射、标签释放、差错通知等消息。
    • LDP对等体:LDP对等体是指相互之间存在LDP会话,并通过LDP会话交换标签-FEC映射关系的两个LSR。

    2.LDP协议的四类消息:

    • 发现(Discovery)消息:用于通告和维护网络中LSR的存在;
    • 会话(Session)消息:用于建立、维护和终止LDP对等体之间的会话;
    • 通告(Advertisement)消息:用于创建、改变和删除“标签—FEC”映射关系;
    • 通知(Notification)消息:用于提供建议性的消息和差错通知。

      为保证LDP消息的可靠发送,除了发现消息使用UDP传输外,LDP的会话消息、通告消息和通知消息都使用TCP传输。

    3.LDP工作过程的四个阶段:

      1)发现阶段

      所有希望建立LDP会话的LSR都周期性地发送Hello消息,通告自己的存在。通过Hello消息,LSR可以自动发现它的LDP对等体。

      LDP对等体发现机制分为两种:

    • 基本发现机制:用于发现本地的LDP对等体,即通过链路层直接相连的LSR,并与其建立Link hello邻接关系。这种方式下,LSR周期性地向“子网内所有路由器”的组播地址224.0.0.2发送LDP链路Hello消息,以便链路层直接相连的LSR发现此LDP对等体。
    • 扩展发现机制:用于发现远端的LDP对等体,即不通过链路层直接相连的LSR,并与其建立Targeted hello邻接关系。这种方式下,LSR周期性地向指定的IP地址发送LDP目标Hello消息,以便指定IP地址对应的LSR发现此LDP对等体。

      两个LSR为基本发现机制和扩展发现机制配置的传输地址(用来建立TCP连接的源IP地址)相同时,这两个LSR之间可以同时建立Link hello邻接关系和Targeted hello邻接关系,并且Link hello邻接关系和Targeted hello邻接关系关联到同一个会话。在LDP对等体之间存在直连(只有一跳)和非直连(多于一跳)多条路径的组网环境中,同时建立Link hello邻接关系和Targeted hello邻接关系可以实现利用扩展发现机制来保护与对等体的会话。当直连链路出现故障时,Link hello邻接关系将被删除。如果此时非直连链路正常工作,则Targeted hello邻接关系依然存在,因此,LDP会话不会被删除,基于该会话的FEC—标签绑定等信息也不会删除。直连链路恢复后,不需要重新建立LDP会话、重新学习FEC—标签绑定等信息,从而加快了LDP收敛速度。

      两个LSR为基本发现机制和扩展发现机制配置的传输地址不同时,如果在这两个LSR之间已经建立了一种邻接关系,则无法再建立另一种邻接关系。

      2)会话建立与维护

      发现LDP对等体后,LSR开始建立会话。这一过程又可分为两步:

    • 建立传输层连接,即在LSR之间建立TCP连接;
    • 对LSR之间的会话进行初始化,协商会话中涉及的各种参数,如LDP版本、标签发布方式、Keepalive定时器值等。

      会话建立后,LDP对等体之间通过不断地发送Hello消息和Keepalive消息来维护这个会话。

      3) LSP建立与维护

      LDP通过发送标签请求和标签映射消息,在LDP对等体之间通告FEC和标签的绑定关系,从而建立LSP。

      4)会话撤销

      在以下情况下,LSR将撤销LDP会话:

    • LSR通过周期性发送Hello消息表明自己希望与邻居LSR继续维持这种邻接关系。如果Hello保持定时器超时仍没有收到新的Hello消息,则删除Hello邻接关系。一个LDP会话上可能存在多个Hello邻接关系。当LDP会话上的最后一个Hello邻接关系被删除后,LSR将发送通知消息,结束该LDP会话。
    • LSR通过LDP会话上传送的LDP PDU(LDP PDU中携带一个或多个LDP消息)来判断LDP会话的连通性。如果在会话保持定时器(Keepalive定时器)超时前,LDP对等体之间没有需要交互的信息,LSR将发送Keepalive消息给LDP对等体,以便维持LDP会话。如果会话保持定时器超时,没有收到任何LDP PDU,LSR将关闭TCP连接,结束LDP会话。
    • LSR还可以发送Shutdown消息,通知它的LDP对等体结束LDP会话。因此,LSR收到LDP对等体发送的Shutdown消息后,将结束与该LDP对等体的会话。

    基于MPLS的VPN

      传统VPN一般是通过GRE(Generic Routing Encapsulation)、L2TP(Layer 2 Tunneling Protocol)、PPTP(Point to Point Tunneling Protocol)等隧道协议来实现私有网络间数据在公网上的传送,而MPLS LSP是通过标签交换形成的隧道,数据报文不再经过封装或者加密,因此,用MPLS实现VPN具有天然的优势。

      基于MPLS的VPN可以创建一个安全性类似于FR(Frame Relay)网络的专用网。用户设备无需为VPN配置GRE、L2TP等隧道,网络时延被降到最低。

      基于MPLS的VPN通过LSP将私有网络的不同分支联结起来,形成一个统一的网络,如下图所示。基于MPLS的VPN还支持对不同VPN间的互通控制。下图中:

    • CE(Customer Edge)是用户边缘设备,可以是路由器,也可以是交换机或主机。

    • PE(Provider Edge)是IP/MPLS骨干网的边缘设备。

    • P(Provider)是IP/MPLS骨干网的骨干设备,不与CE直接相连。P设备只需要具备基本MPLS转发能力,不维护VPN信息。

      

      基于MPLS的VPN具有以下特点:

    • PE负责对VPN用户进行管理、建立各PE间LSP连接、同一VPN用户各分支间路由信息发布。

    • PE之间发布VPN用户路由信息通常是用MP-BGP协议实现。

    • 支持不同分支间IP地址复用和不同VPN间互通。

    MPLS 对TTL 的处理
      MPLS对TTL的处理模式
      MPLS标签中包含一个8比特的TTL字段,其含义与IP头中的TTL域相同。MPLS对TTL的处理除了用于防止产生路由环路外,也用于实现Traceroute功能。RFC3443中定义了两种MPLS对TTL的处理模式:Uniform和Pipe。缺省情况下,MPLS对TTL的处理模式为Uniform。  

      Uniform模式
      IP报文经过MPLS网络时,在入节点,IP TTL减1映射到MPLS TTL字段,此后报文在MPLS网络中按照标准的TTL处理方式处理。在出节点将MPLS TTL减1后映射到IP TTL字段。如下图所示。

        

       Pipe模式

      在入节点,IP TTL值减1,MPLS TTL字段为固定值,此后报文在MPLS网络中按照标准的TTL处理方式处理。在出节点会将IP TTL字段的值减1。即IP分组经过MPLS网络时,无论经过多少跳,IP TTL只在入节点和出节点分别减1。如下图所示。

      

       在MPLS VPN应用中,出于网络安全的考虑,需要隐藏MPLS骨干网络的结构,这种情况下,对于私网报文,Ingress上使用Pipe模式。  

      ICMP响应报文

      在MPLS网络中,当LSR收到TTL为1的含有标签的MPLS报文时,LSR生成ICMP的TTL超时消息。

      LSR将TTL超时消息回应给报文发送者的方式有两种:
    • 如果LSR上存在到达报文发送者的路由,则可以通过IP路由,直接向发送者回应TTL超时消息。
    • 如果LSR上不存在到达报文发送者的路由,则ICMP响应报文将按照LSP继续传送,到达LSP出节点后,由Egress节点将该消息返回给发送者。

      通常情况下,收到的MPLS报文只带一层标签时,LSR可以采用第一种方式回应TTL超时消息;收到的MPLS报文包含多层标签时,LSR采用第二种方式回应TTL超时消息。

      但是,在MPLS VPN中,ASBR(Autonomous System Boundary Router,自治系统边界路由器),接收到的承载VPN报文的MPLS报文可能只有一层标签,此时,这些设备上并不存在到达报文发送者的路由,则采用第二种方法回应TTL超时消息。 

      LSP连通性检测

      在MPLS网络中,如果通过LSP转发数据失败,负责建立LSP的MPLS控制平面将无法检测到这种错误,加大了网络维护的难度。MPLS Ping/MPLS Tracert为用户提供了发现LSP错误、并及时定位失效节点的机制。

      MPLS Ping主要用于检查LSP的连通性。MPLS Tracert在检查LSP的连通性的同时,还可以分析网络什么地方发生了故障。类似于普通IP的Ping/Tracert,MPLS Ping/MPLS Tracert使用MPLS回显请求(Echo Request)报文和MPLS回显应答(Echo Reply)报文检测LSP的可用性。这两种消息都以UDP报文格式发送,其中Echo Request的UDP端口号为3503,该端口号只有使能MPLS功能的设备才能识别。

      MPLS Echo Request中携带需要检测的FEC信息,和其他属于此FEC的报文一样沿LSP发送,从而实现对LSP的检测。MPLS Echo Request报文通过MPLS转发给目的端,而MPLS Echo Reply报文则通过IP转发给源端。另外为了防止LSP断路时Echo Request进行IP转发,从而保证LSP的连通性测试,将Echo Request消息的IP头中目的地址设置为127.0.0.1/8(本机环回地址),IP头中的TTL值为1。

      MPLS Ping 

      

      如上图,LSR_1上建立了一条目的地为LSR_4的LSP。从LSR_1对该LSP进行MPLS Ping时的处理如下:

    1. LSR_1查找该LSP是否存在。如果不存在,返回错误信息,停止Ping。如果存在,则继续进行以下操作。
    2. LSR_1构造MPLS Echo Request报文,IP头中的目的地址为127.0.0.1/8,IP头中的TTL值为1,同时将4.4.4.4填入Echo Request报文中的目的FEC中。然后查找相应的LSP,压入LSP的标签,将报文发送给LSR_2。
    3. 中间节点LSR_2和LSR_3对MPLS Echo Request报文进行普通MPLS转发。如果中间节点MPLS转发失败,则中间节点返回带有错误码的MPLS Echo Reply报文。
    4. 当MPLS转发路径无故障,则MPLS Echo Request报文到达LSP的出节点LSR_4。然后检查目的FEC中包含的目的地址4.4.4.4是否为自己的Loopback接口地址,以此来确认LSR_4是该FEC的真正出口后,返回正确的MPLS Echo Reply报文。至此整个MPLS Ping过程结束。

      MPLS Tracert

      如上图,从LSR_1对4.4.4.4/32进行MPLS Tracert时的处理如下:

    1. LSR_1检查LSP是否存在。如果不存在,返回错误信息,停止Tracert,否则继续进行如下处理。
    2. LSR_1构造MPLS Echo Request报文,IP头中的目的地址为127.0.0.1/8,同时将4.4.4.4填入MPLS Echo Request报文中的目的FEC中,然后查找相应的LSP,压入LSP的标签并且将MPLS TTL设置为1,将报文发送给LSR_2。此MPLS Echo Request报文中包含Downstream Mapping TLV(用来携带LSP在当前节点的下游信息,主要包括下一跳地址、出标签等)。
    3. LSR_2收到LSR_1发送来的报文后,将MPLS Echo Request中MPLS TTL减1为0后发现TTL超时,然后LSR_2需要检查是否存在该LSP,同时检查报文中Downstream Mapping TLV的下一跳地址、出标签是否正确,如果两项检查都正确,返回正确的MPLS Echo Reply报文,并且报文中必须携带LSR_2本身的包含下一跳和出标签的Downstream Mapping TLV给LSR_1。如果检查有不正确,则返回错误的MPLS Echo Reply报文。
    4. LSR_1收到正确的MPLS Echo Reply报文后再次发送MPLS Echo Request报文,报文的封装方式跟步骤2类似,只是将LSP标签的MPLS TTL设置为2,此时的MPLS Echo Request报文中的Downstream Mapping TLV是从MPLS Echo Reply报文中复制过来的。然后LSR_2收到该报文后进行普通MPLS转发。LSR_3收到此报文,标签的TTL超时,跟步骤3同样的处理方式后返回MPLS Echo Reply报文。
    5. LSR_1收到正确的MPLS Echo Reply报文后重复步骤4把LSP标签的MPLS TTL设置为3,复制Downstream Mapping TLV后发送MPLS Echo Request报文。LSR_2和LSR_3对该报文进行普通MPLS转发。LSR_4收到此报文,重复步骤3处理方式对报文进行处理,同时检查目的FEC中包含的目的IP 4.4.4.4为自己的Loopback接口地址,以此来发现已经是该LSP的出节点,因此返回不带下游信息的MPLS Echo Reply报文,至此整个MPLS Tracert过程结束。

      通过上述步骤中返回携带下游信息的MPLS Echo Reply报文,在LSR_1上就获取了该LSP沿途每一个节点信息。


     
  • 相关阅读:
    LeetCode 1110. Delete Nodes And Return Forest
    LeetCode 473. Matchsticks to Square
    LeetCode 886. Possible Bipartition
    LeetCode 737. Sentence Similarity II
    LeetCode 734. Sentence Similarity
    LeetCode 491. Increasing Subsequences
    LeetCode 1020. Number of Enclaves
    LeetCode 531. Lonely Pixel I
    LeetCode 1091. Shortest Path in Binary Matrix
    LeetCode 590. N-ary Tree Postorder Traversal
  • 原文地址:https://www.cnblogs.com/xinghen1216/p/11941957.html
Copyright © 2011-2022 走看看