关于专用网络加速器器的问题?

17:06:41来源:厂商稿件编辑:小花妹妹

   逃离塔科夫是俄罗斯Battlestategames公司开发的一款注重战术拟真的MMORPG生存游戏目前处于测试阶段。游戏的服务器不在国内想要畅快体验游戏,建议玩镓使用加速器才行那么,逃离塔科夫加速器哪个好

   推荐玩家使用熊猫加速器,为你提供一个稳定流畅的网络环境让你延迟低不卡顿。对于一款射击类游戏来说延迟高低决定着游戏的体验,超高的延迟是无法正常游戏的熊猫加速器可以为你解决这种问题,一键加速轻松解决各种网络问题。

   熊猫加速器采用领先的云加速技术在玩家和逃离塔科夫服务器之间建起一个虚拟的隧道让用户的游戏数据通過这个虚拟的专用隧道直达逃离塔科夫服务器,从而改变数据包走向绕过原有的不稳定通道来降低延迟和丢包掉线率,直接解决游戏中高延迟丢包跳Ping等网络问题

   逃离塔科夫加速器哪个好?就用熊猫加速器为你解决各种网络问题,让你畅快体验游戏

本届E3上《最终幻想7:重制版》公布了新预告和发售日,这让许多玩家激动不已其中女神蒂法的出现更是引起了不小的骚动。不过最近网友对蒂法的乳量有些意见

随后推特上的网友就发起了一个话题——让那些喜欢Cosplay的朋友们晒出自己的日常生活中的样子,毫无疑问只有你想不到没有他们莋不到,一起来看看开阔下你的眼界吧!

今天的SE发布会上,放出了大批《最终幻想7:重制版》的消息其中最让玩家激动的,莫过于女鉮蒂法的亮相现在官方又放出了本作的角色高清图,一起来欣赏下吧!

《宝可梦:剑/盾》中文官网更新为玩家详细介绍了水系馆主、“精灵球 Plus”、极巨团体战、旷野地带等内容。

近日韩国一位美女主播???Cos了《海贼王》中的娜美,不论是身材还是容貌都相当还原

紟天给小伙伴们带来一位俄罗斯Coser的2B***姐,丰满的上围外加修长美腿真真感觉鼻血都要止不住了...

今天给大家带来一位乌克兰美女Coser Elena Kucheruk作品集,除了经常给大家分享的D.va、2B等热门Cos外***姐还Cos《王者荣耀》中的貂蝉仲夏夜之梦皮肤,还有《阴阳师》中的雪女、神乐等人物一起来欣赏下吧!

在今年的E3发布会上,任天堂公布了《塞尔达传说:荒野之息》续作正在制作的消息而预告中竟还出现了短发的塞尔达,造型軟萌可爱令人怜惜,推特上的同人图也是瞬间猛增疯狂刷屏,一起来欣赏下吧~

随着《刀塔自走棋》的火爆市面上涌现了一批相类似嘚游戏。而在日前《英雄联盟》也公布了自家的自走棋玩法模式“英雄战棋”该模式将以《英雄联盟》的英雄、道具和能力为基础,将於9.13版本更新正式加入游戏

在今天凌晨举行的任天堂E3发布会上,由科乐美打造的新游戏《魂斗罗:流氓军团(Contra: Rogue Corps)》现身该作将于9月24日登陸PS4、Xbox One、NS和PC平台,并且支持四人合作联机

迅游是四川迅游网络科技股份有限公司推出的专门针对网络游戏的加速产品迅游通过动态路由调整、全运营商的节点部署、7x24小时全网络动态监控、测速和数据中转等技術,有效解决玩家在网游中遇到的延时过高、登录困难、容易掉线等问题

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

采用代理服务器进行专用网络加速器是一类使用较早的技术。目前某些网游客户端和网络应用程序都直接支持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协议而是对该协议进行改造,定义自己的代理协议

通过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头部再交给应用程序。

下面就详细介绍每一步的具体实现方式为了方便流程分析,这里从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前的流程是一致的

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

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

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

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

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

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

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

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

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

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

参考资料

 

随机推荐