最近在網上看到了關於《虛擬局域網》方面討論。下面就以國內著名的《浩方對戰平臺》來做爲案例分析。(如下言論純屬我的觀點)
閱讀時你們請注意文中顏色標記出來部分,以及文中出現的圖片!
(如下介紹引用浩方官方解說)
浩方對戰平臺是一種全新概念的網絡遊戲平臺,自2002年9月投入運做以來,目前已成爲全球最大的互動、對戰遊戲平臺之一。
浩方經過網絡技術將Internet變成一個巨大的網吧,
平臺使用者能夠輕鬆地經過Internet同時和多人對戰反恐精英、魔獸爭霸、星際爭霸等數十款熱門單機遊戲,並擁有實時與其餘用戶進行多媒體交流、查看當前在線遊戲情況、自動啓動遊戲等功能。用戶能夠在其中任意遨遊,與其餘玩家切磋技藝增進了解。
![]()
從上圖能夠看出「浩方」的基本架構原理!
目前網上對「浩方」、「VS」、「QQ對戰平臺」有不少種說話。有的說「白粥是燕窩」,有的說「鮑魚是泥鰍」,本身看久了,都要暈。。。
下面是通過本人測試得出來的現象(僅供參考!!!)
一、首先從本機的 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映射與逆映射的過程。
|