转存文章— 网游加速器实现原理解析

2023-10-30

http://blog.csdn.net/kidwei/article/details/8559842

1. 前言

网游加速器是针对个人用户快速连接网游服务器的一种服务。为了解决国内南北网络互联瓶颈的问题,“网络加速器”厂商通过搭建多个高带宽的双线机房(或通过租用双线VPS主机),并在这些机房的两大线路中架设多个节点服务器,然后为其编写“网络加速器客户端”,通过客户端判断用户的网络线路类型,并将用户应用客户端的网络数据转发到指定的节点服务器,由节点服务器转发给用户应用客户端请求的真正服务器。“网络加速器客户端”通过自动选择速度最快的节点服务器进行数据转发,以达到数据加速作用。优秀的网络加速器可以有效减少网络丢包和网络延迟

本文基于前期对各种加速器的分析以及对其中的关键技术进行试验。文章首先对互联网上流行的网游加速器分析结果进行简要汇总,然后针对各种不同的加速器实现方式进行详细实现细节的介绍。

2. 流行加速器分析

本文前期对目前流行的网游加速器(或网络加速器)客户端进行了一定的深度分析,了解了这些网络加速器的使用特点、应用领域以及所采用的关键技术。目前网络上流行的网络加速器主要有:迅游加速器、迅雷网游加速器、盛大ET加速器、LavaVPN、NetPas等。

迅游加速器(http://www.xunyou.com)和迅雷网络加速器迅游版(http://jaisuqi.xunlei.com)是专门针对网游的加速器。迅雷共有两款加速器,自研的“给力加速器”提供免费加速服务,“迅游版加速器”是与迅游合作的产品。它们在软件UI设计和功能大致相同,使用流程也如出一辙:启动加速功能前需要选择指定的游戏及其区服,注意:待加速游戏必须是其客户端列表中指定的游戏,对于未指定的游戏不能被加速。

启动加速后加速客户端对其全部节点服务器进行测速(迅游加速器部署了82个节点服务器),然后选择速度最快的服务器作为转发服务器,并在本地建立IP地址以172开头的虚拟网卡(局域网地址)。启动后通过抓包工具分析,所有发送到该游戏服务器的数据都是从该172开头的虚拟网卡地址发出的(VPN技术?),而不是从物理网卡地址发出。通过查看路由表,被加速的游戏当前所使用的服务器被增加到了路由表中,并指向了该172开头的虚拟网卡地址。

在对迅游加速器分析过程中还发现,迅游加速器在加速过程中使用了LSP技术(一种通过在TCP/IP协议上层安装一层用户自定义协议,可以对WinSock2  API进行拦截的技术),并对WSAConnnect函数进行了拦截。

迅雷给力加速器也提供了四种加速模式,模式一采用的是基于LSP的代理加速方式,通过LSP技术,将用户的网络数据直接转发给代理服务器,再由代理服务器将数据转发给真正的游戏服务器;模式二采用的是基于L2TP协议的VPN技术;模式三采用的是基于PPTP协议的VPN技术;模式四采用的是基于基于OpenVPN的VPN技术。这三种模式在启动加速后都需要修改路由表,以实现针对指定目的IP的加速功能。

VPN顾名思义,虚拟专网,你接入VPN就是接入了一个专有网络,那么你访问网络都是从这个专有网络的出口出去,好比你在家,你家路由器后面的网络设备是在同一个网络,而VPN则是让你的设备进入了另一个网络。同时你的IP地址也变成了由VPN分配的一个IP地址。通常是一个私网地址。你和VPN服务器之间的通信是否加密取决于连接VPN的具体方式/协议。
代理服务器则是把你的网络数据请求通过一条连接你和代理服务器之间的通道,由服务器转发到目的地。你没有加入任何新的网络,只是http/socks数据经过代理服务器的转发送出,并从代理服务器接收回应。你与代理服务器通信过程不会被额外处理,如果你用https,那本身就是加密的。

LavaVPN(http://www.lavajsq.com,已经改名为LavaJSQ)是一款可以针对所有网络应用进行加速的网络加速器。它采用了VPN技术对网络进行加速,并提供四种VPN协议模型进行加速:PPTP、L2TP、OpenVPN(SSL_TCP)、OpenVPN(SSL_UDP),并可以通过增删路由表的形式,针对不同的应用进行加速:仅加速国外访问、仅加速对网通(电信)的网络访问、仅加速某些进程的网络访问等等。

对LavaVPN的分析过程中未发现其有使用到LSP技术的迹象。

盛大ET加速器(http://etspeed.sdo.com)是一款可以针对网络游戏加速以及语音加速的工具。ET加速器在结构设计上与迅游加速器有明显区别,但是功能类似:仅支持对其游戏列表中的游戏加速、启动加速功能后在本机建立了虚拟网卡,并添加了指向虚拟网卡地址的路由、在本机安装了LSP协议。ET加速器启动加速后,在“我的连接”面板里新增出现了一个名为“etaaaaaa”的网络连接。

3. 加速器实现方式概要

通过对以上加速器的分析进行参考,并查阅相关资料,目前主流的加速技术可以采用两种方式来实现:“代理服务器方式”和“VPN方式”。

代理服务器方式通过部署SOCKS5代理服务器作为加速节点,加速客户端自动选择最快的代理服务器作为当前的转发节点。在客户端主要采用LSP技术,在用户的主机安装分层协议,在游戏客户端调用connect函数(或WSAConnect函数)试图连接游戏服务器时,将连接重定向到代理服务器,并采用SOCKS5协议规范与代理服务器进行数据协商,由代理服务器来连接真正的游戏服务器,并将游戏服务器的数据原封不动转发给用户、将用户的数据原封不动转发给游戏服务器。

VPN方式需要部署双线VPN服务器作为加速节点,加速客户端自动选择速度最快的VPN服务器,并通过VPN拨号连接到VPN服务器并获取一个虚拟IP地址,同时通过修改路由表的方式,将指定进程的网络访问路由到虚拟IP上,而其余地址仍经过原默认路由途径访问。

下面就这两种加速方式的具体实现以及重要的技术难点进行详细分析。另外,报告中的所有代码截图均来自之前写的测试程序,并测试通过;VPN加速方式由主要进行了原理的详细介绍,并编写了支持PPTP协议的VPN客户端和服务器进行了测试。

4. VPN加速方式

4.1. VPN加速概述

VPN技术常常被广泛应用于“网游加速技术”和“FQ技术”中。如前面提到的迅游加速器、迅雷网游加速器、LavaVPN都采用到了VPN技术进行加速,而且目前主流的网游加速器都主要是采用的VPN技术。由于VPN环境的测试需要建立VPN服务器,本人的测试环境有限,所以只是进行了客户端的代码编写并连接通过,无法做相关的代理效果的测试。下面只针对实现的流程和原理给以介绍。

4.2. VPN加速实现步骤

通过建立如下步骤,可以采用VPN技术来实现网络加速:

1. 部署双线VPN服务器节点;

2. 加速器客户端启动后选择网络性能最好的VPN服务器,并在客户端进行RAS拨号,与该VPN服务器建立隧道连接,连接建立后将会自动在本机生成一个虚拟网络地址,同时客户端的默认路由会被修改成指向该虚拟网络地址,如果此时不进行特殊处理,客户端的所有网络访问将都会通过该VPN通道出去;

3. 因为网游加速器的功能需求是仅仅针对某款游戏进行加速,即:在知道这款游戏连接的服务器IP的前提下,只有发送到该服务器IP的数据才被加速,其他网络数据应该不受影响。因此加速客户端在建立完VPN通道以后,需要立即修改路由表:在拨号前通过修改拨号参数,使其不修改本机的默认路由表;其次,将游戏服务器IP增加到路由表中,并让其指向VPN拨号建立的虚拟网络地址上。这样,与游戏服务器之间的通信都走VPN通道,而其他网络数据都不受影响。

4.3 VPN加速使用的三种协议介绍

目前网络上现有的网游加速器(或网络加速器)都使用到了三种VPN协议:PPTP、L2TP和OpenVPN。各种不同的协议在使用时可能受用户的网络状况的限制而无法使用,因此一般的网络加速器都会提供不同的加速模式供用户选择。或在启动加速过程中根据用户当前的网络状况自动选择可用的加速模式。

PPTP协议:PPTP协议是在PPP协议基础上开发的增强型安全协议。PPTP协议中有两个流:控制流和数据流。PPTP协议的数据流采用了GRE协议,由于该协议的特殊性,如果同一个NAT中有两个或以上的主机同时在发送PPTP协议数据包,当数据包从外部达到NAT时,NAT将无法通过端口将数据转发到不同的主机,因此,当使用PPTP协议时,如果用户所在的NAT网关不支持VPN穿透功能(即支持PPTP协议的NAT编辑器,该编辑器在GRE协议的报头使用了一个CallId用来表示NAT下的一个会话,通过CallId来模拟端口,做NAT映射),那么内部主机只能与同一个服务器中间建立一个会话,不能有第二个客户端。目前,大多数NAT网关都具有PPTP NAT编辑器,能很好的支持PPTP协议。

L2TP协议:第二层隧道协议,该协议是PPTP协议和Cisco第二层转发协议L2F的结合体。在windows建立的基于L2TP协议的VPN连接中,默认是启用了证书方式的IPSec协议作为安全传输协议,IPSec协议为了保护IP数据包的完整性,会禁止任何对数据包的修改,否则修改后的数据包达到目的主机后其解密和完整性认证就会失败,从而导致这个报文被认为是非法数据而被丢弃。而当加速器客户端位于NAT后时,数据包在通过NAT时,NAT会对IP头数据等进行修改,导致数据到达VPN服务器时被认为是非法数据而丢弃。

解决该问题的一种方式是通过硬件方式:要求通信的双方的边界路由都支持NAT-T,基本原理是在IPSec封装好的数据包外再进行一次UDP的数据封装,因此,当数据包穿过NAT网关时,被修改的只是外层IP/UDP头,而真正的IPSec数据未被修改;到目的主机时再将IP/UDP封装去除,这样就可以得到未被修改的IPSec数据包。

另一种方式是在L2TP协议中禁用IPSec。对于我们制作网络加速器应用来讲,IPSec协议并非必须的,因此,我们可以在加速器连接中去除IPSec协议,而不影响加速功能。在Windows系统下采用RAS进行VPN连接时,若要去除IPSec协议,需要修改注册表并重启机器使之生效。迅游的给力加速器中就是采用这种方式。

OpenVPN模式:OpenVPN是一个基于OpenSSL加密和验证的应用层VPN实现,能够在NAT环境下很好的工作,是今年来新出现的一个基于开源软件体系的VPN项目。使用OpenVPN进行连接前,需要在客户端机器上安装一个虚拟网卡设备,并需要客户端修改路由表。

以上VPN协议中,除了OpenVPN的使用可以不受用户当前网络的限制外,其他两种方式都可能收到用户的NAT情况影响而导致加速失败,因此在实际应用中,各种加速器都会把这几种模式都提供给用户,并根据用户的网络情况进行选择。

4.4 VPN拨号客户端的实现

试验过程中对RAS拨号建立VPN连接功能进行了测试。如下客户端实现了连接到VPN服务器,并同时客户端用户输入的“待加速地址”列表,修改路由表,已达到“仅指定IP走VPN通道”的功能,而用户的其他网络访问完全不受影响。

4.5 VPN方式尚存在的问题

1. 与采用代理方式一样,判断与当前启动的游戏通讯的是哪个服务器是个问题(原因如前所述),这里可以用到前面描述的LSP技术,通过在connect函数中判断欲建立连接的IP是否在当前游戏的服务器列表中。此时用到LSP技术并不是用于转发,仅仅用于判断是否加速。

2. 采用VPN方式有一个问题:如果用户修改路由表,让其他进程的服务器IP(如p2p下载软件)或默认路由表经过VPN通道的话,可能会造成VPN通道中的数据量增大,可能会影响正常的游戏。迅游加速器也没有对该问题进行很好的解决,早前的测试发现迅游加速功能启动后,通过修改路由表,可以使任意客户端进程都使用迅游的加速通道来访问网络。

该问题的也许可以通过两种方式来解决:一种是在客户端限制用户修改路由表,另一种是通过在服务器端进行限制非游戏服务器相关的数据。具体实现方式有待研究。

5. 代理加速方式

5.1. 代理加速的基本原理

采用代理服务器进行网络加速是一类使用较早的技术。目前某些网游客户端和网络应用程序都直接支持SOCKS5代理协议来连接其客户端,客户端提供设置代理服务器IP和端口的方式供玩家来设置。然而大部分网游客户端并不直接支持SOCKS5代理技术。此处介绍的代理加速模式不仅支持那些无法设置SOCKS5代理的网络游戏,即使那些可以设置SOCKS5代理的游戏,玩家也可以不用手动去设置,而自动采用下面介绍的代理加速技术进行代理加速。

代理加速方式可以直接采用SOCKS5协议,由于SOCKS5协议有现成的服务器程序可用,可以节省服务器编写时间;但是也可以自己定义一个“类SOCKS5”的代理协议,自行实现代理协商和身份验证功能。下面的介绍将会基于自己定义代理协议的模式。

在使用代理方式加速时,LSP技术的使用是关键。Microsoft在Winsock2中提供了Winsock服务器提供者(SPI),允许用户在基础TCP/IP协议上层插入自己定义的分层协议(LSP),当用户通过Winsock2 API连接网络或发送网络数据时,如调用WSAConnect函数,将会首先执行到LSP协议的dll中我们定义的函数,这样我们可以先进行处理,然后再交给真正的WSAConnect函数,这样就会起到API Hook的作用。

要使用LSP技术,必须要将写好的LSP协议安装到用户的机器上,安装过程实际就是将DLL放入系统目录,并在注册表中写入该DLL位置信息的过程。注意:安装未签名的LSP时,安装过程中一般防火墙都会有警告提示。

5.2. 代理加速方式的实现概要

采用LSP方式进行网络加速需要部署SOCKS5代理服务器作为加速节点,加速客户端自动选择最快的代理服务器作为当前的转发节点。

开发人员在客户端需要完成的动作有:

1. 编写我们自己的LSP协议动态库,重新实现我们需要的相关socket函数,如connect;

2. 在用户的主机安装我们自己的LSP协议,这一操作可以放入我们的应用程序部署的时候完成,也可以在我们的加速器每次启动的时候进行部署;

3. 当游戏客户端调用connect函数(或WSAConnect函数)试图连接游戏服务器时,通过LSP将连接重定向到代理服务器,并采用SOCKS5协议规范与代理服务器进行数据协商,由代理服务器来连接真正的游戏服务器,并将游戏服务器的数据原封不动转发给用户、同时将用户的数据原封不动转发给游戏服务器。

由于Socks5协议并不涉及协议加密,而且Socks5协议本身协商过程较长,实际在开发中,网络加速器开发商一般都不会直接采用socks协议,而是对该协议进行改造,定义自己的代理协议。

5.3. Socks5协议与LSP结合

通过LSP技术Hook到相应的套接字函数进行数据转发之前,需要进行Socks5代理协商,即将鉴权信息告诉代理服务器,以及告诉代理服务器自己想连接的真正游戏服务器地址。代理协商完成后才能进行数据的收发。

针对不同的网络连接方式,代理协商的方式有所不同:

1. 普通阻塞方式的TCP连接最简单,可以在hook到connect函数后直接在内部进行阻塞式的代理协商,直到协商完毕后才将connect函数返回给用户,这时候用户拿到的socket实际上是连接到代理服务器的socket,当应用程序通过这个socket收发数据时,实际上是在和代理服务器交互,而这一过程对应用程序来说是透明的,应用程序以为自己是直接在和游戏服务器通信。

目前的网络应用程序很少会采用阻塞方式进行TCP连接,所以这种情况应用场景比较少。

2. 非阻塞方式的TCP连接情况比较复杂,有的TCP连接的socket是可以修改阻塞选项,这样,我们可以在connect函数的入口处判断一下当前socket是否是非阻塞,如果是则将其改为阻塞方式,修改后以阻塞方式进行socks5代理协商,协商完毕后再将socket的阻塞方式修改为非阻塞。

3. 另一种更为复杂的非阻塞TCP连接是基于Windows异步消息的连接,这种连接采用了WSAAsynSelect方式设置了网络消息到来时的Windows接收窗口,所有的网络数据都需要在这个窗口的消息处理函数中处理(QQ飞车的TCP连接就是采用的这种方式)。这类网络模型不能简单采用修改socket阻塞方式的方法来解决。

解决这一问题的唯一办法是在LSP中hook住WSAAsynSelect,在该函数中创建一个我们自己的隐藏窗口,让网络应用程序的所有数据都转发我们自己的窗口上来,在我们的窗口的消息处理函数中进行代理协商和网络数据转发。

4. 对于UDP网络数据的socks5代理转发比TCP又要稍微复杂一些,TCP只需要hook到connect和WSAAsynSelect,对于网络收发数据的send和recv函数是不需要我们自己来实现的。UDP由于是不保持连接的,因此每次发送和接收的UDP包都要包含代理协商信息,因此我们需要把RecvFrom函数和SendTo函数都hook住。

对于UDP连接,需要在应用程序发送第一个UDP包的时候进行代理协商,以后发送数据的时候按照socks5协议的规定,加上socks5头部;收到的信息去除socks5头部再交给应用程序。

5.4. 代理加速方式详细实现

下面就详细介绍每一步的具体实现方式,为了方便流程分析,这里从LSP实现数据包转发开始介绍,最后介绍代理服务器的实现。

1. 利用LSP编写DLL,实现客户端数据包转发功能:

编写LSP协议并安装到现有协议之上,需要建立基于DLL的工程,并导出WSPStartup函数,这样当有应用程序创建套接字时,会自动执行到该WSPStartup函数。在WSPStartup函数函数中,参数信息指明了应用程序期望采用哪种协议来创建套接字(所有的协议存在于一个协议链中,该协议链也包含了我们安装的LSP协议),我们需要在该函数中加载下层协议,并调用下层协议提供者的WSPStartup函数初始化,并修改传递给上层的函数表,将我们需要Hook的Winsock2函数指针的地址指向我们自己的函数。关键代码如下:

如果测试程序只针对TCP数据包的转发,只需要实现WSPConnect函数就可以了,其余函数只需要直接调用g_NextProcTable中的默认函数就可以了。

当用户应用程序调用connect函数或WSAConnect函数试图进行TCP连接时,将会先进入LSP的DLL中定义的WSPConnect函数,该函数进入后我们会判断应用程序试图连接的服务器IP和端口是不是我们待加速的服务器,如果是,会执行到socksProxy函数与代理服务器连接,并进行代理协商;如果不是待加速服务器,则执行g_NextProcTable中原有的连接函数,此时LSP就没有起作用,流程与不安装LSP前的流程是一致的。

2. 安装LSP。

要使我们上一步实现的转发协议生效,还必须将上一步生成的DLL安装到用户的系统上。只有安装了LSP,应用程序在调用ws2_32.dll中的函数时就会执行到我们的LSP的DLL中。一般来讲,生成的DLL需要放入Windows/System32目录下,一个原因是DLL路径不能有中文等特殊字符,另一方面,如果有其他程序误删了该DLL,会导致整个系统无法上网的现象,还可能导致整个系统崩溃。

安装LSP首先需要安装协议链,需要将下层协议的信息拷贝过来,修改成我们需要的协议特点,并进行安装;然后对协议链进行排序,将我们的协议放在协议链的最上层,以保证ws2_32.dll调用到的第一个协议是我们的协议。

这里需要注意的是,当安装了“迅游加速器”后,系统上原有安装的分层协议将会被移到最下层,导致原有的协议无效。因此,我们在开发自己的网游加速器时需要考虑该问题,并予以避免。

5.4. 代理方式尚存在的问题

1. 不同网络加速器厂商的LSP安装程序相互之间可能会出现不兼容的情况,所以我们实现自己的加速LSP的时候,其他网络加速器厂商可能对我们安装的协议干扰,如迅游在安装和每次启动的时候会删除其他厂商的LSP协议;

2. 如前所述,LSP在Hook到connect函数后,在WSPConnect函数中会判断当前连接的服务器是否是需要被加速的目的地址。如何获得用户当前启动的游戏的IP和端口是多少是一个难点,因为一个游戏可能连接了多个服务器并开启了多个端口,而真正进行通讯的只是其中一个;另一方面,通过加速客户端启动的进行可能并不是真正的游戏进程(可能只是一个升级程序)。

迅游加速器可能收集了每款待加速游戏的服务器ip和端口,如果客户端发送网络包的目的地址是这些ip的时候,才会针对这些目的ip地址进行加速。本人有过测试:首先获取迅游加速器支持的某款游戏的某个服务器IP和端口,然后自己编写一个客户端不断给该服务器的端口发送数据,当该exe替换游戏的exe并启动后,从抓包结果来看,加速功能仍然有效;当从迅游列表中选择另一款游戏,启动exe时仍启动我们刚刚编写的exe时,加速功能就失效了。因此可以推测:迅游加速器并不是通过判断进程信息来获取目的服务器的(况且通过判断进程信息来获取目的服务器IP并不容易实现,如前所述),而是通过用户从列表中选择的游戏的名称。

6. 总结

本文主要介绍了两种实现网游加速的可行的技术方案,其中提到的对其他网络游戏加速器的分析以及具体实现细节可能会有一些不完善之处。

加速器实际实现过程中,还有关键一步就是判断当前用户的网络环境。比如用户当前连接的服务器是网通服务器,更智能的做法是在加速之前提前判断当前用户的网络情况,如果用户是网通用户,则不必启用加速功能,如果用户是电信或其他网络,则需要给用户提示可以启动加速功能,并由用户来决定是否启用加速。

当前游戏如果采用了P2P通信,用户网络环境的判断仍然需要被考虑。如QQ飞车和CF等对战游戏,启动游戏后建立了P2P连接,是否需要对这些P2P连接进行加速呢?这种情况也需要考虑用户的当前网络环境:如果P2P双方处于同一个NAT下,则不需要加速,如果一方是电信用户,而另一方是网通用户,就需要加速功能。

用户网络环境的判断(包括是否处于同一个NAT下的判断)是进行网络加速器的具体实现前需要解决的技术问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

转存文章— 网游加速器实现原理解析 的相关文章

  • 什么是RPC并实现一个简单的RPC

    1 基本的RPC模型 主要介绍RPC是什么 基本的RPC代码 RPC与REST的区别 gRPC的使用 1 1 基本概念 RPC Remote Procedure Call 远程过程调用 简单的理解是一个节点请求另一个节点提供的服务 本地过程
  • Linux环境下 通过V4L2读取视频+UDP发送图片文件

    该图为整个项目的流程图 其中左边的流程为总流程 包括通过中断读取摄像头的帧数据 通过内存映射将内核态的数据映射到用户态 读取用户态的数据 采用循环发送图片数据 右边是发送图片的流程图 将用户态的缓冲区的数据通过内存映射到用户态 通过内存拷贝
  • 计算机网络:IP数据报文分析

    IP 数据报前 40 字节 编号 1 45 00 05 dc 4a cb 20 00 40 01 4B 52 c0 a8 00 27 7c 7f cf 0f 08 00 45 2e 00 01 00 17 61 62 63 64 65 66
  • ODBC连接ORACLE数据库的设置

    一 建立服务名1 选择 Net8 Configuration Assistant 选择 本地网络服务名配置 2 选择 添加 3 选择 Oracle 8i数据库或服务 4 输入服务名 此为远程数据库已经定制好的数据库服务名字 比如 ORCL
  • 【SMTP】【POP】电子邮件相关协议分析

    一 实验环境 通过普通路由器连接英特网的计算机一台 通过VMWare安装的Linux虚拟机一台 抓包工具 Wireshark 邮件处理软件 Foxmail 二 实验原理 SMTP工作原理 SMTP提供了一种邮件传输的机制 当收件方和发件方都
  • 基础知识十一、Python解析网络报文之TCP首部报文解析

    文章目录 一 TCP首部解析器的实现 二 测试逻辑 上一节解析了 IP首部报文后 本节继续解析TCP报文首部 TCP协议处于OSI七层模型的传输层 传输层的作用就是负责管理端到端的通信连接问题 连续ARQ automatic repeat
  • 11、每日最新新闻接口,免费好用

    1 前言 在线自定义参数接口 这个是RollToolsApi通用系列接口的其中一个 内部包含了3个小接口 能实现获取分类新闻列表和新闻详情 这个接口的特点是内容更新延迟低 查看接口完整信息 https www mxnzp com doc d
  • Could not proxy request /captchaImage from localhost to http://localhost:8080/.

    项目场景 项目场景 配置若依环境前端通过 run npm dev 启动报500 问题描述 根据报错分析 无法将请求 路径 从本地主机代理到http 本地主机 8080 原因分析 我们可以看到前端配置的端口号80 地址就是本机没有问题 排除前
  • 【JavaWeb】网络原理初识

    网络原理初识 计算机网络的历史 局域网和广域网 网络组件中的重要设备 网络通信基础 基本概念 协议分层 OSI七层模型 TCP IP五层 或四层 模型 封装和分用 发送方 接收方 三层转发和二层转发 计算机网络的历史 计算机最初是为了打仗而
  • js的引入方式有哪几种,js的三种引入方式

    本篇文章给大家谈谈js引入方式有几种 分别是什么 以及js的引入方式有哪几种 希望对各位有所帮助 不要忘了收藏本站喔 一 JavaScript诞生于1995年由Netscape公司开发 JavaScript是一种解释性语言 也是一种基于对象
  • AUTOSAR从入门到精通-面向服务的中间件SOME/IP(二)

    目录 前言 几个高频面试题目 基于信号的通信和面向服务的通信特点和差异
  • 鉴赏 tcp vegas

    优秀的 vegas 之后 再鉴赏一下迄今唯一像那么回事的拥塞控制算法 vegas 从下图可看出所有的 对 所有的 aimd 都毫无伸缩性 z 吞吐 x rtt y 丢包率 由 buffer size 直接决定 一下就可看出 rtt 和 bu
  • http -- 跨域问题详解(浏览器)

    参考链接 参考链接 1 跨域报错示例 Access to XMLHttpRequest at http 127 0 0 1 3000 from origin http localhost 3000 has been blocked by C
  • http -- 跨域问题详解(浏览器)

    参考链接 参考链接 1 跨域报错示例 Access to XMLHttpRequest at http 127 0 0 1 3000 from origin http localhost 3000 has been blocked by C
  • Linux中使用HTTP协议进行远程访问的示例——你的“云端”小伙伴

    大家好 今天我们要聊聊的是如何在Linux中使用HTTP协议进行远程访问 是的 你没有听错 就是那个我们每天用来浏览网页的HTTP协议 首先 我们需要明白HTTP是什么 HTTP 全名为超文本传输协议 Hypertext Transfer
  • http通信 axios VS fetch

    基本用法 GET 两者都是基于Promise 所以可以使用 then 也可以使用async await fetch需要手动对相应内容进行转换 axios会根据响应头类型 进行自动转换 所以axios的代码更加简洁 axios get htt
  • 什么是DLNA

    DLNA旨在解决个人PC 消费电器 移动设备在内的无线网络和有线网络的互联互通 使得数字媒体和内容服务的无限制的共享和增长成为可能 DLNA的口号是Enjoy your music photos and videos anywhere an
  • 2024Web自动化测试的技术框架和工具有哪些?

    Web 自动化测试是一种自动化测试方式 旨在模拟人工操作对 Web 应用程序进行测试 这种测试方式可以提高测试效率和测试精度 减少人工测试的工作量和测试成本 在 Web 自动化测试中 技术框架和工具起着至关重要的作用 本文将介绍几种常见的
  • 什么是DLNA

    DLNA旨在解决个人PC 消费电器 移动设备在内的无线网络和有线网络的互联互通 使得数字媒体和内容服务的无限制的共享和增长成为可能 DLNA的口号是Enjoy your music photos and videos anywhere an
  • 搞懂 三次握手四次挥手

    计算机网络体系结构 在学习TCP 三次握手四次挥手之前 让我们先来看下计算机网络分层 主要分为OSI模型和TCP IP模型 OSI模型比较复杂且学术化 所以我们实际使用的TCP IP模型 以连接Mysql服务器为例理解这五层 应用层 应用层

随机推荐

  • centos7安装python3及问题解决

    centos7安装python3及问题解决 Centos7中默认的Python版本为2 7 在2020年python官方将不再支持2 7版本的python 所以使用3 x版本的python是必要的 下载地址 https www python
  • 如何管理一个技术团队

    一 流程规范 迭代流程规范 制定迭代流程规范 详情见 https www cnblogs com expiator p 17149931 html 编码规范 可以使用 阿里巴巴java开发手册 规范代码 二 考核 研发考核 1 优秀的考核方
  • 计算机绘图中有六种方法绘圆,计算机绘图3_5-6章.ppt

    计算机绘图3 5 6章 第5章 规划与管理图层 5 3 使用图层 当前主流的图形 图像处理软件 Flash UG Potoshop 都具有图层概念 AutoCAD也不例外 图层好比是一张透明的纸 图形被画在其中 如图示 图层A上放置了剖面线
  • 水仙花数python代码多种方式_水仙花数的三种解决方法(Python实现)

    先来了解一下什么是水仙花数 水仙花数是这样一个三位数 它的个位数 十位数 百位数的三次方之和 等于它自身 例如 153就是一个水仙花数 因为153 1 3 5 3 3 3 470也是一个水仙花数 因为470 4 3 7 3 0 3 我们今天
  • VScode前端开发必备插件——Emmet配置及常用语法

    Emmet是前端开发中必不可少的一个vscode插件 配置好后 可以通过tab键结合其特定的语法来实现快速生成包含嵌套结构的批量HTML标签 本文只整理常用语法 不常用的可至官网查询 https emmet io 0x01 VScode中配
  • Flask基本用法,可用于mock测试

    基本用法 可用于mock测试 对于一些三方接口不方便造数据的情况下 自定义接口返回是自己的目标数据来处理自己的程序逻辑 from flask import Flask app Flask name 启用后 表示使用post请求http 12
  • java获取中文全拼/首字母工具以及大小写转换

    pom
  • 解决Jetbrains旗下产品 Android Builder插件安装失败的问题

    原因 http plugins jetbrains com 访问失败 解决办法 接一个代理账号 用浏览器访问下载 最后使用Android Studio安装本地插件
  • java封装的比较器,比较是否全相同,获取不同字段名字

    非常实用的java比较器 贴上代码 import java util HashSet import java util List import java util Set import net sf json JSONArray impor
  • JMeter中如何实现参数化(CSV)

    1 参数化的定义 参数化是自动化测试脚本的一种常用技巧 可将脚本中的某些参数使用变量来代替 例如登录操作时 利用GET POST请求方式传递参数的场景 可在脚本运行时指定参数的取值范围和规则 脚本在运行时 根据需要选取不同的参数值作为输入
  • mysql 修改collation_[mysql]修改collation为utf8_bin

    mysql默认字段值区分大小写 character set server utf8 collation server utf8 bin init connect SET NAMES utf8 SELECT DEFAULT CHARACTER
  • vue的url带参数跳转

    vue的url带参数跳转 1 router带参数 path operate id 带参数 name operate meta requireAuth true component gt import page user operate 然后
  • STM32--MPU6050 DMP读角度总结

    前言 我TM爆肝 MPU6050简介 MPU6050一般为六轴或九轴传感器 正常情况下为 三轴陀螺仪 测角速度 三轴加速度仪 三轴磁场轴 有些没有 一般测量角度 陀螺仪和加速度仪就够了 若想测量角度 通过一些滤波算法 可以将所测速度和所测加
  • 程序视界——聚焦程序员的

    http blog csdn net foruok article details 74908128
  • vs2022配置Qt开发环境

    参考了一篇非常优秀的博客 https blog csdn net yao hou article details 108015209 devc 的 成功在vs2022上跑起来了
  • C0185 [2006普及组-A]明明的随机数(C语言写)

    题目描述 明明想在学校中请一些同学一起做一项问卷调查 为了实验的客观性 他先用计算机生成了 N 个 1 到 1000 之间的随机整数 N 100 对于其中重复的数字 只保留一个 把其余相同的数去掉 不同的数对应着不同的学生的学号 然后再把这
  • Excel在统计分析中的应用—第二章—描述性统计-方差系数的计算及应用

    方差 标准差和四分位数偏差 其均为含有量纲的值 因此会受到计量单位不同或者改变而变得缺乏可比性 而方差系数则是从相对的角度 通过比值来衡量分散程度 因此消除了量纲的影响 标准差系数 又称为均方差系数 离散系数 在财务管理中 称为变化系数 指
  • 如何解释“我篡改了区块链”这个问题

    区块链数据 全局一致 难以篡改 这两个特性已经广为人知 是区块链营造 信任 的基石 为了达到这两个效果 区块链的共识 同步 校验等技术细节足可大书特书 而本文要从 我篡改了区块链数据 讲起 我篡改了区块链数据 FISCO BCOS开源联盟链
  • java往数组中添加元素

    往字符串数组追加新数据 param arr param str return public static String insert String arr String str 原数组的长度 int size arr length 要添加的
  • 转存文章— 网游加速器实现原理解析

    http blog csdn net kidwei article details 8559842 1 前言 网游加速器是针对个人用户快速连接网游服务器的一种服务 为了解决国内南北网络互联瓶颈的问题 网络加速器 厂商通过搭建多个高带宽的双线