使用通用路由封装的网络虚拟化双向转发检测的制作方法

文档序号:11455596阅读:265来源:国知局
使用通用路由封装的网络虚拟化双向转发检测的制造方法与工艺



背景技术:

本发明一般涉及通信故障的检测,更具体地涉及使用通用路由封装隧道来检测网络虚拟化的网络通信故障的双向转发检测。

使用通用路由封装(nvgre)的网络虚拟化是适于改善与大型云计算部署相关的可扩展性问题的网络虚拟化技术。nvgre使用与虚拟局域网(vlan)类似的封装技术,在第3层数据包中封装基于媒体访问控制(mac)的第2层以太网帧。根据nvgre隧道机制,称为起始虚拟隧道端点的第一设备根据nvgre协议封装数据包,并将封装的数据包发送到称为终止虚拟隧道端点的第二设备。终止虚拟隧道端点解封装数据包,并将解封装的数据包转发到预期的目的设备。

网络管理的一个越来越重要的特征是快速检测相邻系统之间的通信故障,以便更快地建立替代路径。双向转发检测(bfd)是网络设备中常用的快速故障检测方法。然而,目前还没有支持bfd以检测nvgre隧道端点之间故障的机制。



技术实现要素:

在一个实施例中,用于检测起始虚拟隧道端点(vtep)的通信状态的系统和方法包括在起始vtep处使用根据nvgre协议的通用路由封装(nvgre)数据包来生成网络虚拟化。双向转发检测(bfd)数据包封装在nvgre数据包中,以生成nvgrebfd数据包。将nvgrebfd数据包发送到终止vtep,以在nvgre隧道上建立bfd会话。基于根据接收时间间隔从终止vtep接收的应答bfd数据包,为bfd会话确定nvgre隧道的通信状态。

在一个实施例中,nvgrebfd数据包可以被配置为提供nvgrebfd数据包包括bfd帧的指示。可以通过在nvgre数据包的外部nvgre报头中设置路由器警报选项来提供该指示。还可以通过将nvgrebfd数据包的内部以太网报头中的目的媒体访问控制(mac)地址设置为预定值来提供该指示。

可以基于在接收时间间隔内未从终止vtep接收到应答bfd数据包而确定nvgre隧道的通信状态。当在其各自的接收时间间隔内没有接收到特定数量的应答bfd数据包时,nvgre隧道的通信状态可以被确定为关闭。起始vtep可以基于传输时间间隔向终止vtep发送初始bfd数据包。

在nvgre隧道上建立bfd会话还可以包括从终止vtep接收响应bfd数据包。响应bfd数据包可在bfd报头中具有对方(your)标识符(discriminator)字段,该对方标识符字段设置为等于nvgrebfd数据包的bfd报头中的己方(my)标识符字段的值。可以基于在nvgrebfd数据包的所需最小接收间隔字段中设置的值和响应bfd数据包的所需最小接收间隔字段中设置的值来协商接收时间间隔。

在另一个实施例中,用于检测终止vtep的通信故障的系统和方法包括从起始vtep接收nvgrebfd数据包,以在nvgre隧道上建立bfd会话。nvgre数据包包括封装bfd数据包的根据nvgre协议的nvgre数据包。基于根据接收时间间隔从起始vtep接收的初始bfd数据包,确定nvgre隧道的通信状态。

通过参考以下详细描述和附图,本发明的这些和其它优点对于本领域普通技术人员将是显而易见的。

附图说明

图1示出了通信系统的高级概览;

图2示出了用于在起始和终止虚拟隧道端点之间进行通信的系统;

图3示出了示例性nvgrebfd数据包;

图4示出了nvgrebfd数据包的示例性外部nvgre报头;

图5示出了nvgrebfd数据包的示例性内部以太网报头;

图6示出了nvgrebfd数据包的示例性内部ip报头;

图7示出了nvgrebfd数据包的示例性内部bfd报头;

图8示出了用于在起始vtep处检测通信故障的方法的流程图;

图9示出了用于在终止vtep处检测通信故障的方法的流程图;和

图10示出了可用于检测通信故障的示例性计算机的组件。

具体实施方式

图1示出了根据一个或多个实施例的通信系统100的高级概览。通信系统100包括通信地耦合到网络104的网络元件102-a,102-b,102-c,102-d,102-e等(统称为网元102)。网元102可以包括任何类型的能够通过网络104进行通信的设备。例如,网元102可以是服务器计算机,例如电子邮件服务器,数据库服务器,虚拟机,软件应用程序等。在另一示例中,网元102可以是路由器。应当理解,通信系统100可以包括任何数量的网元102,并且网元102可以指代网元中的任何一个。

网元102通过网络104进行通信。网络104可以包括任何类型的网络或不同类型的网络的组合。例如,网络104可以包括因特网,内联网,局域网(lan),广域网(wan),有线和/或无线网络,光纤通道存储区域网络(san),蜂窝通信网络等。也可以考虑其他类型的网络。

在一个实施例中,网络104内的两个或多个网元102利用网络虚拟化进行通信,所述网络虚拟化使用通用路由封装(nvgre)。nvgre采用封装技术,在第3层数据包中封装基于媒体访问控制(mac)的第2层以太网帧。根据nvgre隧道机制,诸如网元102-a的起始虚拟隧道端点(vtep)根据nvgre协议封装数据包,并将封装的数据包发送到终止vtep,例如网元102-b。终止vtep解封装数据包,并将解封装的数据包转发到预期的目的设备。

图2示出了根据一个或多个实施例的用于实现nvgre的系统200。系统200包括源设备202,起始vtep204,终止vtep212和目的设备218,它们中的每一个可以由通信系统100中的网元102表示。

起始vtep204包括封装模块206和起始应用程序208。封装模块206被配置为根据nvgre协议封装数据包,并且经由链路210将nvgre数据包发送到目的设备218的终止vtep212。链路210可以包括网络连接,直接连接等。在一个实施例中,数据包包括双向转发检测(bfd)数据包。然而,数据包还可以包括任何其他类型的数据包,例如因特网协议(ip)数据包。在一个示例中,数据包由源设备202生成。在另一示例中,数据包由起始应用程序208生成。

起始应用程序208可以包括具有任何类型的功能的任何类型的应用程序。在一个实施例中,起始应用程序208可以是用于网络故障检测的bfd任务,其创建bfd数据包并将其提供给封装模块206。还可以考虑其他类型的起始应用程序208,例如操作,管理和维护(oam)应用程序。

数据包可以由封装模块206根据nvgre协议封装,以提供nvgre数据包。nvgre数据包经由链路210发送到终止vtep202。终止vtep212包括解封装模块214和终止应用程序216。解封装模块214被配置为从nvgre数据包解封装数据包。在一个实施例中,解封装模块214将解封装的数据包发送到目的设备218。在另一实施例中,解封装模块214将解封装的数据包发送到终止应用程序216。终止应用程序216包括具有任何类型的功能的任何类型的应用程序。例如,终止应用程序216可以包括bfd任务,oam应用程序等。

根据一个或多个实施例,系统200可以被配置为在nvgre上实现bfd。有利的是,nvdr上的bfd可以提供通信故障快速检测,以便更快地建立替代路径。为了在nvgre上实现bfd,根据nvgre协议对bfd数据包进行封装。bfd数据包可以由源设备202或起始应用程序208(例如,bfd任务)生成。该bfd数据包由起始vtep204的封装模块206根据nvgre协议封装,以生成nvgrebfd数据包。

图3示出了根据一个或多个实施例的示例性nvgrebfd数据包300。nvgrebfd数据包300包括根据nvgre协议封装的bfd数据包302。nvgrebfd数据包300包括根据nvgre协议的外部报报头分和封装的bfd数据包302的内部报报头分。nvgrebfd数据包300的外部报报头分包括外部以太网报头304,外部ip(因特网协议)报头306和外部nvgre报头308。nvgrebfd数据包300的内部报报头分包括内部以太网报头310,内部ip报头312,内部bfd报头314和可选的有效载荷316。通过配置或设置nvgrebfd数据包300的参数,在系统200中实现nvgre上的bfd。

图4示出了根据一个或多个实施例的nvgrebfd数据包300的示例性外部nvgre报头308。外部nvgre头308包括多个部分。例如,外部nvgre报头308可以包括信息部分402,第一保留部分404(被称为“保留0部分”),版本部分406,协议类型部分408,虚拟子网标识符(vsid)部分410和第二保留部分412。外部nvgre头308还可以包括其他部分。

起始vtep204配置外部nvgre报头308的参数,所述参数用于nvgre上的bfd。vsid410被设置为与被验证的nvgre段相同。这样可以确保nvgre数据包300与在该nvgre段上传输的任何其他终端系统数据相同的数据路径上传输。

nvgre路由器警报选项(在图4的外部nvgre报头308中示出为ra)也被设置在外部nvgre报头308的保留部分404中。例如,路由器警报选项ra可以包括路由器警报位,通过更新其值来设置该路由器警报位。在一个示例中,指示nvgrebfd数据包300中的bfd帧的路由器警报选项ra将警告终止vtep212不将nvgre帧转发到目的设备218,而是执行本地处理(例如,bfd)。

起始vtep204还配置内部以太网报头310的参数,以在nvgre上实现bfd。图5示出了根据一个或多个实施例的nvgrebfd数据包300的示例性内部以太网报头310。内部以太网报头310包括多个部分。例如,内部以太网报头310可以包括目的mac(媒体访问控制)地址502,源mac地址504,可选部分506和以太网类型508。内部以太网报头310还可以包括其他部分。

通过将目的mac地址502设置为明确定义的预定值来配置内部以太网报头310的参数,以指示nvgrebfd数据包300的有效载荷为bfd数据包。例如,目的mac地址502可以被设置为00-00-5e-90-xx-xx,其中x是任何十六进制数字,例如由因特网号码分配机构(iana)分配的值。源mac地址504也被设置为起始vtep204的mac地址。在一个实施例中,在mac地址表中不学习源mac地址504,因为这表示nvgrebfd。通常,vgre承载层2/以太网数据,接收数据的vtep从mac地址表中学习源mac地址。然而,由于nvgrebfd数据包300在nvgre数据包下封装了bfd控制数据包,所以不需要从mac地址表学习源mac地址504。

此外,内部ip报头312的参数被配置为通过起始vtep204在nvgre上实现bfd。图6示出了根据一个或多个实施例的nvgrebfd数据包300的示例性内部ip报头312。图6中的内部ip报头312被示意性地示出为ipv4(因特网协议版本4)报头,但是也可以考虑其他格式,例如ipv6(因特网协议版本6)。内部ip报头312包括多个部分。例如,内部ip报头312可以包括版本602,ihl(互联网报头长度)604,服务类型606,总长度608,标识610,标记612,分段偏移614,生存时间616,协议618,报头校验和620,源地址622,目的地址624,选项626和填充628。内部ip报头312还可以包括其他部分。

通过将源地址622设置为发送方(例如起始vtep204)的可路由地址,内部ip报头312的参数被配置用于nvgre上的bfd。例如,目的地址624是随机选择的范围为127/8的ipv4地址或范围为0:0:0:0:0:ffff:127/104的ipv6地址。生存时间616也设置为255。

内部bfd报头314的参数另外被配置通过起始vtep204在nvgre上实现bfd。图7示出了根据一个或多个实施例的nvgrebfd数据包300的示例性内部bfd报头314。内部bfd报头314包括多个不烦你。例如,内部bfd报头314可以包括版本702,诊断(diag)704,状态(sta)706,轮询(p)708,最终(f)710,独立于控制面(c)712,认证存在(a)714,需求(d)716,多点(m)718,检测时间乘数(dectmult)720,长度722,标志24,标志726,所需最小传输间隔728,所需最小接收间隔730和所需最小回波接收间隔732。内部bfd报头314还可以包括其他部分,例如,认证部分。

内部bfd头部314的参数通过将己方标志724设置为某些,例如,随机有效值(例如,10或20)并且将对方标志726设置为0来配置。己方标志724是由起始vtep204生成的唯一的非零标志,用于在同一对系统之间解复用多个bfd会话。对方标志726是从相应的远程系统接收到的标志,并返回己方标志接收值(如果值未知,则返回零)。还设置了所需最小传输间隔728和所需最小接收间隔730的定时器值。所需最小传输间隔728是起始vtep204发送nvgrebfd数据包的最小间隔。所需最小接收间隔730是接收bfd数据包之间的最小间隔。

如上所述,nvgrebfd数据包300用于在起始vtep204和终止vtep212之间通过nvgre隧道建立bfd会话。起始vtep204经由链路210将nvgrebfd数据包300发送到终止vtep212。终止vtep212的解封装模块214将nvgrebfd数据包300识别为包括nvgrebfd帧,并从nvgrebfd数据包300解封装bfd数据包302。解封装模块214基于外部nvgre报头308中的路由器警报和内部以太网报头310的目的mac地址502的预定值,将nvgrebfd数据包300识别为包括nvgrebfd帧。终止vtep212配置解封装的bfd数据包的参数,将对方标志726设置为来自nvgrebfd数据包300(从起始vtep204接收)的己方标志724的接收值。终止vtep212还设置所需最小传输间隔728和所需最小接收间隔730的定时器值。终止vtep212然后经由链路210将配置的bfd数据包302发送到起始vtep204。

在从终止vtep212接收到bfd数据包302时,发起vtep204将每个定时器(例如,所需最小传输间隔728和所需最小接收间隔730)协商为来自起始vtep的初始nvgrebfd数据包300和来自终止vtep212的响应bfd数据包之间的相应较慢值,以建立bfd会话。例如,所需最小传输间隔728被协商为从初始nvgrebfd数据包300(从起始vtep204发送至终止vtep212)和响应bfd数据包302(从终止vtep212发送至起始vtep204)接收的较慢值。在另一示例中,所需最小接收间隔730被协商为从初始nvgrebfd数据包300和响应bfd数据包302接收的较慢值。起始vtep204和终止vtep212还将vsid410与标志值(例如,己方标志724,对方标志726)相关联,以识别特定的nvgre隧道。

一旦建立了bfd会话,起始vtep204将周期性地发送初始bfd数据包,并且终止vtep212将根据定时器值用应答bfd数据包进行响应。初始bfd数据包和应答bfd数据包使用nvgre进行封装,并通过nvgre隧道传输。根据协商的所需最小传输间隔728周期性地发送初始bfd数据包。当任一发起vtep204或终止vtep212以协商的时间间隔停止接收bfd数据包时,这可以指示通信故障。例如,当起始vtep204在所需最小接收间隔730规定的期望接收时间间隔内没有收到来自终止vtep212的应答bfd数据包时,这可以指示通信故障。在另一个示例中,当终止vtep212在所需最小传输间隔728内规定的期望的时间段内没有从起始vtep204接收到初始bfd数据包时,这可以指示通信故障。

在一个实施例中,nvgre隧道将在缺少特定数量(例如,连续的)bfd数据包之后被宣告关闭。丢失的bfd数据包的特定数量可能是在起始vtep204和终止vtep212处丢失的bfd数据包的数量。丢失的的bfd数据包的特定数量是基于bfd报头314的检测时间乘数720。一旦nvgre隧道被宣告关闭,起始vtep204或终止vtep212的通过nvgre隧道创建的任何状态将被删除。

有利地,系统200被配置为使用在nvgre隧道上的bfd实现快速故障检测。这允许系统200更快地建立替代路径。

图8示出了根据一个或多个实施例的用于检测起始vtep的通信故障的方法800的流程图。在步骤802,在起始vtep处根据nvgre协议生成nvgre数据包。在步骤804,在起始vtep处将bfd数据包封装在nvgre数据包中,以生成nvgrebfd数据包。bfd数据包可以由源设备或源应用程序产生,例如源vtep的bfd任务。在步骤806,nvgrebfd数据包被配置为指示nvgrebfd数据包包括bfd帧。例如,通过在nvgrebfd数据包的外部nvgre报头中设置路由器警报选项并通过将nvgrebfd数据包的内部以太网报头中的目的mac地址设置为明确定义的预定值(例如,00-00-5e-90-xx-xx,其中x是任何十六进制数字,例如,由iana分配的值),nvgrebfd数据包可以配置为指示bfd帧。

在一个实施例中,nvgrebfd数据包由起始vtep进一步配置如下。nvgrebfd数据包的外部nvgre报头的vsid设置为与正在验证的nvgre段(或隧道)的vsid相同。内部以太网报头中的源mac地址设置为起始vtep的mac地址。nvgrebfd数据包的内部ip头的源地址设置为起始vtep的可路由地址。内部ip报头的目的地址被设置为随机选择的范围为127/8的ipv4地址或范围为0:0:0:0:0:ffff:127/104的ipv6地址,并且生存时间设置为255。将nvgrebfd数据包的内部bfd报头中的一个标志字段设置为任何有效值,并将对方标志字段设置为零。还设置所需最小发送间隔和所需最小接收间隔。

在步骤808,nvgrebfd数据包从起始vtep发送到终止vtep,以在nvgre隧道上建立bfd会话。终止vtep解封装bfd数据包,并将bf报头中的对方标志字段设置为接收到的nvgrebfd数据包中的己方标志值。终止vtep还设置所需最小发送间隔和所需最小接收间隔。终止vtep然后将bfd数据包发送到原始vtep。所需最小传输间隔和所需最小接收间隔的定时器值各自协商为由起始vtep指示的值与终止vtep指示的值之间的较慢值。起始vtep和终止vtep还将vsid与标志值相关联,以识别特定的nvgre隧道。

在步骤810,基于根据协商的接收时间间隔从终止vtep接收的应答bfd数据包,由起始vtep为bfd会话确定nvgre隧道的通信状态。在一个实施例中,当起始vtep在协商时间内在特定数量的间隔(在内部bfd报头中的检测时间乘数字段中设置)中没有接收到bfd分组时,nvgre隧道被宣告为关闭。例如,如果例如在其各自的接收时间间隔内没有接收到三个bfd数据包,则nvgre隧道被宣告为关闭。在隧道被声明为关闭之后,由nvgre隧道创建的vtep上的任何状态都将被删除。

图9示出了根据一个或多个实施例的检测终止vtep的通信故障的方法900的流程图。在步骤902,终止vtep从起始vtep接收nvgrebfd数据包。nvgre数据包包括封装bfd数据包的根据nvgre协议生成的nvgre数据包。可以如上所述配置nvgrebfd数据包。在步骤904,终止vtep将nvgrebfd数据包识别为包括bfd帧,以在nvgre隧道上建立bfd会话。在一个实施例中,终止vtep基于在nvgrebfd数据包的外部nvgre报头中设置的路由器警报选项和nvgrebfd数据包的内部以太网报头中的目的mac地址的明确定义的预定值,将nvgrebfd数据包识别为包括bfd帧。

在步骤906,基于根据接收时间间隔从起始vtep接收的初始bfd数据包,终止vtep为bfd会话确定nvgre隧道的通信状态。在一个实施例中,当终止vtep在协商时间内在特定数量的间隔(在内部bfd报头中的检测时间乘数字段中设置)中没有接收到bfd数据包时,nvgre隧道被宣告为关闭。在隧道被声明为关闭之后,由nvgre隧道创建的vtep上的任何状态都将被删除。

本文所描述的系统,装置和方法可以使用数字电路或使用一个或多个使用公知的计算机处理器,存储器单元,存储设备,计算机软件和其他组件的计算机来实现。通常,计算机包括用于执行指令的处理器和用于存储指令和数据的一个或多个存储器。计算机还可以包括或耦合到一个或多个大容量存储设备,诸如一个或多个磁盘,内部硬盘和可移动盘,磁光盘,光盘等。

可以使用以客户端-服务器关系操作的计算机来实现本文描述的系统,装置和方法。通常,在这样的系统中,客户端计算机远离服务器计算机并经由网络进行交互。客户端-服务器关系可以由在相应的客户端和服务器计算机上运行的计算机程序来定义和控制。

本文描述的系统,装置和方法可以在基于网络的云计算系统内实现。在这种基于网络的云计算系统中,与网络连接的服务器或另一处理器经由网络与一个或多个客户端计算机进行通信。例如,客户端计算机可以经由驻留在客户端计算机上的网络浏览器应用程序与服务器进行通信。客户端计算机可以在服务器上存储数据并通过网络访问数据。客户端计算机可以经由网络向服务器发送数据请求或在线服务请求。服务器可以执行所请求的服务并向客户端提供数据。服务器还可以发送适于使客户端计算机执行指定功能的数据,例如执行计算以在屏幕上显示指定的数据等。例如,服务器可以发送适于引起客户端计算机执行本文描述的一个或多个方法步骤,包括图8和9中的一个或多个步骤的请求。本文描述的方法的某些步骤,包括图8和图9中的一个或多个步骤,可以由服务器或基于网络的云计算系统中的其他处理器执行。本文描述的方法的某些步骤,包括图8和9中的一个或多个步骤,可以由基于网络的云计算系统中的客户端计算机执行。本文描述的方法的某些步骤,包括图8和9中的一个或多个步骤,可以由服务器和/或由基于网络的云计算系统中的客户端计算机以任何组合来执行。

可以使用有形地体现在信息载体中(例如,非瞬时性机器可读存储设备中)的供可编程处理器执行的计算机程序产品来实现本文所描述的系统,装置和方法,并且本文描述的方法步骤,包括图8和9中的一个或多个步骤,可以使用可由这种处理器执行的一个或多个计算机程序来实现。计算机程序是一组计算机程序指令,其可以直接或间接地在计算机中用于执行某些活动或产生一定的结果。计算机程序可以以任何形式的编程语言编写,包括编译或解释语言,并且可以以任何形式部署,包括作为独立程序或模块,组件,子程序或适合在计算环境中使用的其他单元。

图10中描绘了可用于实现本文描述的系统,装置和方法的示例性计算机的高级框图1000。计算机1002包括可操作地耦合到数据存储设备1012和存储器1010的处理器1004。处理器1004通过执行计算机程序指令来控制计算机1002的整体操作,所述指令定义所述操作。计算机程序指令可以存储在数据存储设备1012或其他计算机可读介质中,并且当需要执行计算机程序指令时被加载到存储器1010中。因此,图8和9的方法步骤可以由存储在存储器1010和/或数据存储设备1012中的计算机程序指令定义,并由处理器1004执行计算机程序指令控制。例如,计算机程序指令可以被实现为本领域技术人员编程的用于执行图8和9的方法步骤的计算机可执行代码。因此,通过执行计算机程序指令,处理器1004执行图8和9的方法步骤。计算机1002还可以包括用于经由网络与其他设备通信的一个或多个网络接口1006。计算机1002还可以包括使得用户能够与计算机1002进行交互的一个或多个输入/输出设备1008(例如,显示器,键盘,鼠标,扬声器,按钮等)。

处理器1004可以包括通用和专用微处理器,并且可以是唯一的处理器或计算机1002的多个处理器中的一个。处理器1004可以包括例如一个或多个中央处理单元(cpu)。处理器1004,数据存储设备1012和/或存储器1010可以包括由一个或多个专用集成电路(asic)和/或一个或多个现场可编程门阵列(fpga),由其补充或并入其中。

数据存储设备1012和存储器1010各自包括有形的非瞬时性计算机可读存储介质。数据存储设备1012和存储器1010可以各自包括高速随机存取存储器,例如动态随机存取存储器(dram),静态随机存取存储器(sram),双倍数据速率同步动态随机存取存储器(ddrram)或其他随机存取固态存储设备,并且可以包括非易失性存储器,诸如一个或多个磁盘存储设备,例如内部硬盘和可移动磁盘,磁光盘存储设备,光盘存储设备,闪存设备,半导体存储设备,例如可擦除可编程只读存储器(eprom),电可擦除可编程只读存储器(eeprom),光盘只读存储器(cd-rom),数字通用盘只读存储器(dvd-rom)磁盘或其他非易失性固态存储设备。

输入/输出设备1008可以包括外围设备,例如打印机,扫描仪,显示屏等。例如,输入/输出设备1008可以包括显示设备,例如阴极射线管(crt)或液晶显示器(lcd)监视器,用于向用户显示信息,键盘以及诸如鼠标或轨迹球之类的指示设备,用户可以通过该设备向计算机1002提供输入。

本文讨论的任何或所有系统和装置(包括图1的通信系统100和图2的系统200的元件)可以使用一个或多个计算机,例如计算机1002来实现。

本领域技术人员将认识到,实际的计算机或计算机系统的实现可以具有其他结构并且还可以包含其他组件,并且图10是这样的计算机的一些组件的高级表示,为了说明的目的。

前述具体实施方式应被理解为在各方面都是说明性和示例性的而非限制性的,并且本文公开的本发明的范围不是根据具体实施方式来确定的,而是根据在专利法许可的全面范围内解释的权利要求确定的。应当理解,这里示出和描述的实施例仅仅是本发明的原理的说明,并且在不脱离本发明的范围和精神的情况下,本领域技术人员可以实现各种修改。本领域技术人员可以在不脱离本发明的范围和精神的情况下实现各种其他特征组合。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1