探讨“浩方对战平台”
2007-05-14 03:55
        最近在网上看到了关于《虚拟局域网》方面讨论。下面就以国内著名的《浩方对战平台》来作为案例分析。(以下言论纯属个人观点)
        
          阅读时大家请注意文中颜色标记出来部分,以及文中出现的图片!
        (以下介绍引用浩方官方解说)
          浩方对战平台是一种全新概念的网络游戏平台,自2002年9月投入运作以来,目前已成为全球最大的互动、对战游戏平台之一。 浩方通过网络技术将Internet变成一个巨大的网吧平台使用者可以轻松地通过Internet同时和多人对战反恐精英、魔兽争霸、星际争霸等数十款热门单机游戏,并拥有实时与其他用户进行多媒体交流、查看当前在线游戏状况、自动启动游戏等功能。用户可以在其中任意遨游,与其他玩家切磋技艺增进了解。
从上图可以看出“浩方”的基本架构原理!
目前网上对“浩方”、“VS”、“QQ对战平台”有很多种说话。有的说“白粥是燕窝”,有的说“鲍鱼是泥鳅”,自己看久了,都要晕。。。
下面是经过本人测试得出来的现象(仅供参考!!!)
1、首先从本机的 Ipconfig 处入手:
从(图一)Ipconfig 上来看,不管是否以浩方形式登录游戏,浩方并没有改变我的IP地址。
以下(图二)---(图八)是本人在“浩方”大厅里的截图
图八中用户并非本人ID,这一点,我一开始感觉很奇怪。但是,后来正好验证了我的一个想法。下文有说明。
从以上截图中,浩方的原理的大致轮廓,就已经呈现出来了。
接下来,我们讨论一下,究竟浩方是采用了哪种思路开发出来的。(PS:很多网友老是会问到,浩方是用什么开发语言编写的,其实就算是DELPHI / C++ BUILDER / VB / JAVA 都可以编写出来(但是这类型软件,用VC开发,较为合适!原因就不再解释!),既然很多网友关心这个问题,我就肯定一点的回答大家,目前的浩方平台是在 VC++6.0 上开发出来的)。
大家在注意看上图,加星方框内的Function内容,可以看出是使用了IPX OVER TCP/IP的方式来处理的。
下面,我来架设一下,浩方对战平台的整体构架(未实际验证,凭经验猜想!)
浩方用服务器中转(或服务器端含有VLAN   ×××),个人认为 采用后者 VLAN ×××方案,可能性较大。通过(图1)---(图8)得出个人的一下观点,在此举个例子来说明。
假如 A、B、C、D、 四个人去唱K,A和B被分到了 1号包房;C和D,被分到了 2号包房。A只能和B对唱,C也只能和D对唱。如果此刻再来一个 E ,E进入了 1号包房,也只能和A\B一起娱乐,不能同C\D一起娱乐。
浩方也是相对应的,当你登录进浩方的某个ROOM内,你只能和该ROOM内的PLAYER娱乐。
当你进入房间后。浩方服务器端接收到你的IP信息后,在后台将你的IP地址发送至VLAN ×××上进行地址分配,每次分配。内网以你的IP为标准,比如说:A用户的IP为222.11.13.102 , B用户的IP为55.37.128.113 ,未进入房间前,这是A\B用户的IP,但是当你进入房间后,其实A\B用户就得到了一个浩方服务器传递过来的虚拟IP,192.168.0.118 、 192.168.0.119   ……
      跳回(图8)处,我的IP其实222.71.40.100 ,但是我在浩方游戏房间里,确发现这个IP已经被另一用户占用,而且,当我在房间右侧单击用户列表出的用户名时,发现了一个规则, 此刻 我单击A用户的IP是显示为 222.71.40.31,过了2分钟后,当我再单击A用户是,发现该用户IP已经变为 222.71.40.30,再过了3分钟后,我再单击此用户时,发现该用户IP,已变为 222.71.40.27 ,由此可见,浩方服务器端,按队列规则,向用户派发虚拟局域网IP。
总结一下,A用户进入浩方时,浩方通过(IPX OVER TCP/IP)会自动分配一个虚拟局域网IP给A用户(此处需注意,不同的房间,IP段不同)。
虽然浩方科技是高科技企业,但是浩方平台本身的技术含量并不高,它的基本原理是虚拟局域网( VLAN )和虚拟专用网技术( ××× ),它可以利用网络技术(我估计90%就是 IPX over TCP/IP,当然也还可以一些HOOK,API)使物理上不在同一个局域网内的客户机通过逻辑专线形成虚拟的局域网环境。
以上言论。纯属个人观点。
目的只是为了大家互相沟通,一步步探索技术内幕!
希望大家看过后,能发表自己的观点,互相学习,共同进步!!!
虽然浩方经过商业化后,有很多恶意的弹窗,和广告,但是毕竟也会推动中国电子竞技发展,其对中国电子竞技所产生的影响,也意义深远!!!
其实很早时候就想写这篇了,这几天由于在写书的提纲所以一直没写,现在书的提纲已经交过去了,不知道情况如何,如果可以的话下个星期就可以签合同了。废话少说先来游戏数据包分析,其实你随便找个抓包工具,然后运行魔兽就能看出个究竟来。在这里来说说,当按了游戏进入局域网时,游戏会采用局域网UDP广播的形式通知在一个局域网中的游戏者说明他进来了,然后每个一段时间均会广播一次,这样的作用我猜想是通知其他玩家证明它还存在着,而不会悄然无息的掉线。当游戏开始后采用的是P2P的方式,因为当主机掉线时其他玩家还是可以继续游戏,但是我在抓包工具里发现每个玩家间均有两条TCP的链接,我也尽行了证实,一条是发送游戏数据的,一条是聊天的,当一个主机退出的时候,其他玩家中有一个人就会成为主机,继续这样的连接方式。
    前面那篇文章已经分析了浩方的实现原理,在这里再深入一步分析下我们要设计的Battlenet平台的情况,这里分为服务器和客户端,服务器其实是用来转发和记录些玩家信息的,而客户端呢是一个传消息给游戏的中转站(当然这里其实是客户端与已经注入进游戏的DLL的通信).
    在这里简单说说客户端服务器如何通信的过程,当玩家登陆客户端时就会把自己真实的IP地址传递给放在公网上的服务器,而当玩家进入对应的游戏房间时,也就是玩家通知服务器我将要映射为什么样的虚拟IP,有了虚拟IP玩家才能进入相应的虚拟局域网,当服务器收到玩家消息时,服务器就把消息对所在相同房间的其他玩家都发一遍,确认玩家能加入局域网,其他玩家的客户端收到服务器发来的虚拟IP时,就把这个虚拟IP发送给已经注入进游戏的DLL,然后DLL把虚拟IP发送给游戏,这样游戏就被欺骗了,但游戏发送数据报给虚拟IP时,注入的DLL同样把消息截获,发送给那个加入房间启动游戏的玩家,这里其实就是把虚拟IP还原成真实IP的过程。然后游戏开始后就是P2P的过程。服务器在游戏开始前起到的作用其实就是中转IP的作用,游戏开始后中转将在客户端实现,其实就是P2P的过程,当然其中包括的IP映射与逆映射的过程。