首页> 中国专利> 网络接口卡传输控制协议加速卸载故障检测和恢复机制

网络接口卡传输控制协议加速卸载故障检测和恢复机制

摘要

一种检测和恢复网络接口卡TCP加速卸载故障的计算机实现的方法和数据处理系统。响应于接收对传输控制协议段的确认失败,所述传输控制协议段包含对网络接口卡中的传输控制协议卸载功能的请求,在没有对传输控制协议卸载功能的请求的情况下重传所述传输控制协议段。当在没有对传输控制协议卸载功能的请求的情况下接收到对重传的传输控制协议段的确认时,递增指示所述传输控制协议卸载功能的故障的计数器。响应于所述计数器超过预定的允许故障数,停止所有对所述网络接口卡的所述传输控制协议卸载功能的请求。

著录项

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2012-07-11

    授权

    授权

  • 2010-02-03

    实质审查的生效

    实质审查的生效

  • 2009-12-09

    公开

    公开

说明书

技术领域

本发明一般地涉及改进的数据处理系统,具体地说,涉及检测和恢复网络接口卡(NIC)传输控制协议(TCP)加速卸载故障的计算机实现的方法和数据处理系统。

背景技术

近年来,由于通信标准及网络可用性的增强,数据通信呈指数式发展。传输控制协议(TCP)是一种确保传输和接收数据分组的顺序与发送所述数据的顺序相同的标准,并且将网际协议(IP)与TCP结合使用来指定如何跨因特网在系统之间传输信息。多数计算机都具有使用TCP/IP协议通过网络发送和接收信息的网络接口卡。

在传统网络接口卡中,TCP栈先使用系统处理器将TCP段分为以太网帧,然后再将数据传输给网络接口卡。这需要大量的处理时间,尤其是在网络接口卡每秒可以生成数万个中断的千兆网络中。这些中断甚至将使用更多的处理器周期。

尽管局域网(LAN)技术(具体地说,以太网),每三到四年将介质速度提高十倍,但是中央处理单元(CPU)的速度却是每隔一年提高一倍。因此,CPU很快成为高输入/输出(I/O)性能系统中的瓶颈。为了缓解处理器性能中的这种滞后,可以将不断增多的本机功能卸载到I/O适配器以加速数据吞吐量。吞吐量是对特定时间量内传输的数据量的测量。卸载功能减少了主机CPU的工作负荷并且有利于提高I/O适配器的吞吐量。

一种TCP加速卸载功能是TCP分段卸载(TSO)。在TCP分段卸载(也称为“大量发送卸载”(LSO))中,主机TCP协议栈创建最大为64KB的大型TCP段。此大型段然后被传递到IP协议栈,在IP协议栈中,所述段被封装在单个IP分组中。封装后的段然后被传递到网络接口卡设备驱动器并最终被传递到网络接口卡以便传输。实现TCP分段卸载的网络接口卡然后将此单个大型TCP段再次分段为多个更小的TCP段并为每个分段插入必要的以太网/IP/TCP标头信息,对于标准以太网连接,这些更小的TCP段通常为1460个字节。借助主机TCP栈可以创建较大的分组,可以获得使用分段卸载的性能益处,这通常可转换为降低主机处理器利用率。借助较大的PCI数据事务通常转换为较高的PCI总线吞吐量,可以获得附加的性能益处。由于将缓冲区分段为以太网帧的工作由网络接口卡完成,因此处理器可用于执行其他任务。

另一TCP加速卸载功能是TCP校验和卸载(TCO)。在TCP校验和卸载中,实现TCP校验和卸载的网络接口卡执行TCP校验和的计算,而不是主机CPU计算TCP校验和。TCP校验和卸载可以显著降低主机CPU的工作负荷,因为执行TCP有效负载、TCP标头以及IP标头的校验和的任务被卸载到网络接口卡。主机协议层可以可选地计算TCP伪标头校验和(取决于网络接口卡的特定要求)并将该值放入校验和字段中。网络接口卡然后可以计算正确的TCP校验和而不必引用IP标头。

当TCP加速卸载功能按预期运行时,可显著增强网络和系统性能。因此,许多操作系统利用这些加速功能,包括公司出品的(Advanced Interactive eXecutive)。

但是,目前的TCP加速卸载功能的显著限制是当这些加速卸载功能无法正确运行时,可能导致严重的问题。例如,由于实现TCP校验和生成器逻辑的网络接口卡的硬件状态机或微代码的故障,因此网络接口卡中的所述逻辑可能转变为“不良”状态。在这种情况下,由适配器发送的每个TCP校验和卸载分组都具有无效的TCP校验和,这将导致这些分组被目的地主机丢弃。因此,当加速卸载功能无法按预期运行时,可能发生严重的网络性能下降,通常严重到网络似乎无法实际使用。

发明内容

示例性实施例提供了一种检测和恢复网络接口卡TCP加速卸载故障的计算机实现的方法和数据处理系统。响应于接收对传输控制协议段的确认失败,所述传输控制协议段包含对网络接口卡中的传输控制协议卸载功能的请求,在没有对传输控制协议卸载功能的请求的情况下重传所述传输控制协议段。当在没有对传输控制协议卸载功能的请求的情况下接收到对重传的传输控制协议段的确认时,递增指示所述传输控制协议卸载功能的故障的计数器。响应于所述计数器超过预定的允许故障数,停止所有对所述网络接口卡的所述传输控制协议卸载功能的请求。

附图说明

现在仅通过实例的方式参考附图描述本发明,这些附图是:

图1是其中可以实现示例性实施例的数据处理系统网络的图形表示;

图2是其中可以实现示例性实施例的数据处理系统的方块图;

图3是根据示例性实施例的网络接口卡的方块图;

图4是根据示例性实施例的传输控制协议/网际协议(TCP/IP)及类似协议的示意图;以及

图5是示出根据示例性实施例的检测和恢复网络接口卡TCP加速卸载故障的流程图。

具体实施方式

现在参考附图,具体地说,参考图1-2,提供了其中可实现示例性实施例的数据处理环境的示例图。应理解,图1-2只是示例,并非旨在断言或暗示对其中可实现不同实施例的环境的任何限制。可以对所示环境做出许多修改。

图1示出了其中可以实现示例性实施例的数据处理系统网络的图形表示。网络数据处理系统100是其中可以实现示例性实施例的计算机的网络。网络数据处理系统100包含网络102,后者是用于提供在网络数据处理系统100内连接在一起的各种设备和计算机之间的通信链路的介质。网络102可以包括连接,例如有线、无线通信链路、或光缆。

在所示实例中,服务器104和106连同存储单元108一起与网络102相连。此外,客户机110、112和114与网络102相连。客户机110、112和114可以例如是个人计算机或网络计算机。在所示实例中,服务器104将诸如引导文件、操作系统映像和应用之类的数据提供给客户机110、112和114。在此实例中,客户机110、112和114是服务器104的客户机。网络数据处理系统100可以包括其他服务器、客户机以及其他未示出的设备。

在所示实例中,网络数据处理系统100是因特网,同时网络102代表全球范围内使用传输控制协议/网际协议(TCP/IP)协议集来相互通信的网络和网关的集合。在因特网的核心是主节点或主机之间的高速数据通信线路的主干,它包括数以千计的商业、政府、教育以及其他路由数据和消息的计算机系统。当然,网络数据处理系统100也可以被实现为许多不同类型的网络,例如内联网、局域网(LAN)或广域网(WAN)。图1旨在作为一个实例,并非旨在作为对不同实施例的体系结构限制。

现在参考图2,示出了其中可实现示例性实施例的数据处理系统的方块图。数据处理系统200是诸如图1中的服务器104或客户机110之类的计算机的实例,其中可以为示例性实施例定位实现所述过程的计算机可用程序代码或指令。

在所示实例中,数据处理系统200采用包括北桥和存储控制器集线器(NB/MCH)202以及南桥和输入/输出(I/O)控制器集线器(SB/ICH)204的集线器体系结构。处理单元206、主存储器208以及图形处理器210与北桥和存储控制器集线器202相连。处理单元206可以包含一个或多个处理器甚至可以使用一个或多个异构处理器系统来实现。例如,图形处理器210可以通过加速图形端口(AGP)与NB/MCH相连。

在所示实例中,局域网(LAN)适配器212与南桥和I/O控制器集线器204相连,并且音频适配器216、键盘和鼠标适配器220、调制解调器222、只读存储器(ROM)224、通用串行总线(USB)端口及其他端口232,以及PCI/PCIe设备234通过总线238与南桥和I/O控制器集线器204相连,并且硬盘驱动器(HDD)226和CD-ROM 230通过总线240与南桥和I/O控制器集线器204相连。PCI/PCIe设备可以例如包括以太网适配器、外接卡以及笔记本计算机的PC卡。PCI使用卡总线控制器,而PCIe则不使用。ROM 224可以例如是闪速二进制输入/输出系统(BIOS)。硬盘驱动器226和CD-ROM 230可以例如使用集成驱动器电子设备(IDE)或串行高级技术附件(SATA)接口。超级I/O(SIO)设备236可以与南桥和I/O控制器集线器204相连。

操作系统在处理单元206上运行并协调和提供对图2中的数据处理系统200内的各个组件的控制。所述操作系统可以是诸如XP(Microsoft和Windows是Microsoft Corporation在美国和/或其他国家/地区的商标)之类的商用操作系统。诸如JavaTM编程系统之类的面向对象的编程系统可以与操作系统一起运行并通过在数据处理系统200上执行的JavaTM程序或应用来提供对操作系统的调用。JavaTM和所有基于JavaTM的商标是Sun Microsystems,Inc.在美国和/或其他国家/地区的商标。

用于操作系统、面向对象的编程系统以及应用或程序的指令位于诸如硬盘驱动器226之类的存储设备上,并可以加载到主存储器208内以便由处理单元206执行。示例性实施例的过程可以由处理单元206使用计算机实现的指令来执行,所述指令可以位于诸如主存储器208、只读存储器204之类的存储器之中,也可以位于一个或多个外围设备中。

图1-2中的硬件可以根据实施方式而不同。除了图1-2中所示的硬件以外,或替代图1-2中所示的硬件,还可以使用诸如闪存、等效的非易失性存储器或光盘驱动器之类的其他内部硬件或外围设备。同样,示例性实施例的过程可以应用于多处理器数据处理系统。

在某些示例性实例中,数据处理系统200可以是个人数字助理(PDA),其通常具备闪存来提供用于存储操作系统文件和/或用户产生的数据的非易失性存储器。总线系统可以包含一条或多条总线,例如系统总线、I/O总线以及PCI总线。当然,可以使用在与结构或体系结构连接的不同组件或设备之间提供数据传输的任意类型的通信结构或体系结构来实现总线系统。通信单元可以包括一个或多个用于发送和接收数据的设备,例如调制解调器或网络适配器。存储器可以例如是主存储器208或诸如在北桥和存储控制器集线器202中找到的高速缓存。处理单元可以包括一个或多个处理器或CPU。图1-2中所示的实例以及上述实例并非旨在暗示体系结构限制。例如,除了采取PDA的形式以外,数据处理系统200还可以是平板计算机、膝上型计算机或电话设备。

示例性实施例提供了一种检测和恢复网络接口卡(NIC)传输控制协议(TCP)加速卸载故障的计算机实现的方法和数据处理系统。具体地说,示例性实施例利用TCP中现有的重传协议来使得操作系统的TCP栈能够检测慢性的网络接口卡TCP加速卸载故障并从中恢复。TCP的现有重传协议包括重传未被接收设备确认的数据段的能力。例如,TCP可以利用重传计时器,后者导致TCP多次重新发送数据段,直到接收设备确认接收到数据段,或当TCP确定已超过到接收设备的最大重传次数为止。此外,示例性实施例还利用支持网络接口卡TCP加速卸载功能(如TCP校验和卸载或TCP分段卸载)的操作系统TCP栈的现有功能来针对TCP构建的每个单独数据段显式地请求卸载服务。因此,即使基础网络接口卡支持卸载功能,这些TCP栈也有能力选择不请求TCP加速卸载功能。

使用上述现有的TCP功能,示例性实施例提供了一种机制,其中操作系统的TCP栈可以检测明确由网络接口卡TCP加速卸载故障(与其他网络问题或故障相对)导致的传输故障。所述机制还允许TCP栈停止使用发生故障的网络接口卡的网络接口卡TCP加速卸载功能,从而促进从故障恢复而无需用户干预。

示例性实施例中的机制可以在操作系统TCP栈创建TCP段(其请求网络接口卡为该段执行TCP校验和卸载或TCP分段卸载)时实现。如果操作系统TCP栈在预定时间间隔内没有接到对该段的确认,则操作系统TCP栈重传该段。为了检测网络接口卡TCP加速卸载故障并从中恢复,当操作系统TCP栈在预定的重传尝试数之后仍未接收到确认并且先前已针对该段请求了TCP校验和卸载或TCP分段卸载时,操作系统TCP栈在不请求TCP校验和卸载或TCP分段卸载的情况下重传该段。如果操作系统TCP栈之后接收到对该段的确认,则操作系统TCP栈递增专用计数器,后者指示了操作系统TCP栈怀疑网络接口卡的TCP加速卸载功能发生故障的次数。如果专用计数器达到预定的“允许”故障数,则操作系统TCP栈对于任何现有或新的TCP连接并且在预定时间段(分钟、小时、天或直到重新引导系统)内,停止从网络接口卡请求任何TCP加速卸载功能。

现在转到图3,示出了根据示例性实施例的网络接口卡的图。网络接口卡300可实现为图2中的网络适配器212。如图所示,网络接口卡300包括以太网接口302、数据缓冲区304,以及PCI总线接口306。这三个组件提供了网络与数据处理系统的总线之间的路径。以太网接口302提供到与数据处理系统相连的网络的接口。PCI总线接口306提供了到总线的接口。数据缓冲区304用于存储通过网络接口卡300发送和接收的数据。该数据缓冲区还包括与SRAM接口的连接以提供额外的存储。

网络接口卡300还包括电可擦写可编程只读存储器(EEPROM)接口308、寄存器/配置/状态/控制单元310、振荡器312以及控制单元314。EEPROM接口308提供到EEPROM芯片的接口,所述芯片可以包含网络接口卡300的指令和其他配置信息。可以通过EEPROM接口308将不同的参数和设置存储在EEPROM芯片上。

寄存器/配置/状态/控制单元310提供了位置来存储用于配置和运行网络接口卡300上的处理的信息。例如,计时器的计时器值可以存储在这些寄存器内。此外,不同处理的状态信息也可以存储在此单元内。振荡器312为网络接口卡300上执行的处理提供时钟信号。

控制单元314控制网络接口卡300执行的不同处理和功能。控制单元314可以采取各种形式。例如,控制单元314可以是处理器或专用集成电路(ASIC)。在这些实例中,本发明的用于管理数据的流控制的处理由控制单元314执行。如果被实现为处理器,则这些处理的指令可以存储在通过EEPROM接口308访问的芯片中。

在接收操作中通过以太网接口302接收数据。该数据存储在数据缓冲区304中以便通过PCI总线接口306传送到数据处理系统。例如,可以使用PCI本地总线或通过图2中的ICH 210将数据传送到总线。

图4是传输控制协议/网际协议(TCP/IP)及类似协议的图并且根据本发明的示例性实施例示出。TCP/IP及类似协议由通信体系结构400使用。在本实例中,通信体系结构400为四层系统。该体系结构包括应用层402、传输层404、网络层406以及链路层408。每个层负责处理不同的通信任务。链路层408也称为数据链路层或网络接口层并且通常包括计算机中的操作系统以及相应的网络接口卡内的设备驱动器。该层处理与诸如光缆或以太网电缆之类的所使用的网络介质物理连接的所有硬件细节。

网络层406也称为网际层并处理数据分组围绕网络的移动。例如,网络层406处理在网络上传送的各种数据分组的路由。TCP/IP协议集中的网络层406由不同的协议组成,包括网际协议(IP)、网际控制信息协议(ICMP)以及网际组管理协议(IGMP)。

接下来,传输层404提供网络层406和应用层402之间的接口以促进两个主计算机之间的数据传输。示例性实施例中所述的检测和恢复方法可以使用各种传输协议实现。传输层404涉及的操作例如包括:为下面的网络层将应用传送给它的数据分为适当大小的块、确认接收的分组,以及设置超时以确保另一端确认发送的分组。在TCP/IP协议集中,存在两个截然不同的传输层:TCP以及用户数据报协议(UDP)。TCP提供可靠性服务以确保数据在两个主机之间正确地传输,包括丢失检测和重传服务。

TCP分段和TCP校验和被用作本发明的实施例的示例性实施方式并且决非将分段卸载和校验和卸载限于TCP协议集。在其他实施例中,分段卸载和校验和卸载可以与任何传输协议(例如,用户数据报协议和其他版本的TCP协议)一起使用。

相反地,用户数据报协议为应用层提供简单得多的服务,其只是将称为数据报的数据分组从一台主机发送到另一台主机,而不提供任何保证正确传输数据的机制。当使用UDP时,应用层必须执行可靠性功能。

应用层402处理特定应用的细节。对于几乎每一种实施方式都存在许多常见的TCP/IP应用,包括用于远程登录的Telnet;文件传输协议(FTP);用于电子邮件的简单邮件传输协议(SMPT);以及简单网络管理协议(SNMP)。

图5是示出根据示例性实施例的检测和恢复网络接口卡TCP加速卸载故障的处理的流程图。TCP是经常用于数据传输的协议,并出于此原因提供示例性协议中的一个示例性实施例的实施方式的示例性实例。TCP栈在设备的操作系统中实现并由处理器执行。TCP栈向/从网络接口卡驱动器发送/接收信息以确保成功分段。TCP栈和相应操作系统的指令可以存储、加载到数据处理系统并在其中执行,例如存储在数据处理系统200的盘226或主存储器208中,并由图2中示出的处理单元206或网络适配器212执行。

所述处理在操作系统TCP栈创建TCP段时开始(步骤502)。操作系统TCP栈在消息缓冲区标头中设置一个或多个控制标志以向网络接口卡指示为此段执行TCP校验和卸载或TCP分段卸载(步骤504)。操作系统TCP栈还在主存储器中的TCP栈的每个会话的内部控制块内维护表。

对于与TCP卸载请求关联的每个传输的段,该表都包含一个表项。在步骤504中,操作系统TCP栈为与TCP卸载请求关联的每个传输的段创建这些表项并将它们置于该表中。操作系统TCP栈然后将消息缓冲区传送到IP进行传输(步骤506)。

操作系统TCP栈判定在预定时间间隔内是否接收到对该段的确认(步骤508)。如果接收到确认(步骤508输出“是”),则过程随后终止。如果尚未接收到确认(步骤508输出“否”),则操作系统TCP栈重传该段(步骤510)。每次执行重传时,重传补偿(backoff)算法可导致预定时间间隔增加。

应指出的是,此前的步骤按照TCP协议当前的运行方式对其进行描述。下面的步骤所描述的TCP功能在示例性实施例中使能检测和恢复网络接口卡TCP加速卸载故障。

操作系统TCP栈然后判定在预定时间间隔内是否接收到对重传的段的确认(步骤512)。如果接收到确认(步骤512输出“是”),则过程随后终止。如果尚未接收到确认(步骤512输出“否”),则操作系统TCP栈判定是否已发生预定数量的重传尝试(步骤514)。换言之,操作系统TCP栈判定重传数是否等于预定值。操作系统TCP栈为每个活动TCP会话维护一个重传计数器以便实现TCP协议的重传功能。当操作系统TCP栈为给定会话执行分组重传时,它还递增该会话的重传计数器。操作系统TCP栈可以将重传计数器存储在主存储器中的每个会话的内部控制块内。

如果尚未达到预定的重传尝试数(步骤514输出“否”),则过程循环回步骤510。如果已达到预定的重传尝试数(步骤514输出“是”),则操作系统TCP栈判定先前是否为该段请求了TCP校验和卸载或TCP分段卸载(步骤516)。可以通过以下操作执行此判定:访问步骤504中维护的表以判定是否随TCP加速卸载请求(诸如TCP校验和卸载或TCP分段卸载)一起发送了该段。

如果先前未针对该段请求任何TCP校验和卸载或分段卸载(步骤516输出“否”),则TCP重传算法返回步骤510并继续按照当前的实现方式(即,按照与业界的现有TCP栈实施方式一致的方式)工作。

如果先前已针对该段请求了TCP校验和卸载或分段卸载(步骤516输出“是”),则操作系统TCP栈在不请求任何TCP校验和卸载或TCP分段卸载的情况下重传该段(步骤518)。

操作系统TCP栈然后判定是否接收到在不请求卸载功能的情况下对重传的段的确认(步骤520)。如果接收到对重传的段的确认(步骤520输出“是”),则操作系统TCP栈递增专用计数器,后者指示操作系统TCP栈怀疑网络接口卡的TCP加速卸载功能发生故障的次数(步骤522)。专用计数器可以包含在由主机TCP栈维护的每个会话的内部控制块中,并存储在主存储器内。如果未接收到对重传的段的确认(步骤520输出“否”),则操作系统TCP栈可以假设传输故障不是由网络接口卡TCP加速卸载故障引起的,因此不递增专用计数器,并且处理返回步骤510以按照当前的实现方式工作(即,主机TCP栈继续按照业界当前定义的方式执行TCP重传算法)。

返回步骤522,操作系统TCP栈判定专用计数器是否达到预定的“允许”故障数(例如,4次故障)(步骤524)。如果未达到预定的“允许”故障数(步骤524输出“否”),则过程随后终止。如果已达到预定的“允许”故障数(步骤524输出“是”),则操作系统TCP栈停止从该网络接口卡请求任何TCP加速卸载功能(步骤526)。操作系统TCP栈可以针对任何现有的或新的TCP连接以及在预定时间段(分钟、小时、天或直到重新引导系统等)内,停止从网络接口卡请求任何TCP加速卸载功能。如果需要,同样可以通过预定时间段来限定“允许”故障数。例如,操作系统TCP栈可以要求在60分钟的时间间隔内不超过4次故障。

应指出的是,示例性实施例可以避免“错误肯定”条件,在此条件下,由于成功的传输恰好与网络接口卡TCP栈加速卸载功能的不能使用同时发生,因此操作系统TCP栈可能错误地认为网络接口卡TCP加速卸载功能发生故障。通过使用专用计数器以及预定的“允许”故障数,可以显著降低禁用良好运行的网络接口卡的可能性。

本发明可以采取完全硬件实施例、完全软件实施例或包含硬件和软件元素两者的实施例的形式。在一个优选实施例中,本发明以软件实现,所述软件包括但不限于固件、驻留软件、微代码等。

此外,本发明可以采取可从计算机可用或计算机可读介质访问的计算机程序产品的形式,所述计算机可用或计算机可读介质提供了可以被计算机或任何指令执行系统使用或与计算机或任何指令执行系统结合的程序代码。出于此描述的目的,计算机可用或计算机可读介质可以是任何能够包含、存储、传送、传播或传输由指令执行系统、装置或设备使用或与所述指令执行系统、装置或设备结合的程序的有形装置。

所述介质可以是电、磁、光、电磁、红外线或半导体系统(或装置或设备)或传播介质。计算机可读介质的实例包括半导体或固态存储器、磁带、可移动计算机盘、随机存取存储器(RAM)、只读存储器(ROM)、硬磁盘和光盘。光盘的当前实例包括光盘-只读存储器(CD-ROM)、光盘-读/写(CR-R/W)和DVD。

适合于存储和/或执行程序代码的数据处理系统将包括至少一个通过系统总线直接或间接连接到存储器元件的处理器。所述存储器元件可以包括在程序代码的实际执行期间采用的本地存储器、大容量存储装置以及提供至少某些程序代码的临时存储以减少必须在执行期间从大容量存储装置检索代码的次数的高速缓冲存储器。

输入/输出或I/O设备(包括但不限于键盘、显示器、指点设备等)可以直接或通过中间I/O控制器与系统相连。

网络适配器也可以被连接到系统以使所述数据处理系统能够通过中间专用或公共网络变得与其他数据处理系统或远程打印机或存储设备相连。调制解调器、电缆调制解调器和以太网卡只是几种当前可用的网络适配器类型。

出于示例和说明目的给出了对本发明的描述,并且所述描述并非旨在是穷举的或是将本发明限于所公开的形式。对于本领域的技术人员来说,许多修改和变化都将是显而易见的。实施例的选择和描述是为了最佳地解释本发明的原理、实际应用,并且当适合于所构想的特定使用时,使得本领域的其他技术人员能够理解本发明的具有各种修改的各种实施例。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号