浩方等對戰平台的原理是什麼?

看了其他的一些虛擬區域網的軟體,都會在系統中安裝一個虛擬網卡,而浩方不需要。


2002年前後做過一個類似的實現,本質上來說,類似浩方這樣的平台要提供兩種功能:

1.區域網協議在廣域網上的實現。

2.打通兩個內網用戶的直接連接。

前者其實是類似IPX over UDP的實現,如果區域網遊戲只支持IPX(很早期的遊戲),那麼需要用UDP封裝IPX,如果本來就支持UDP或者TCP,那麼就直接完成IP地址轉換,把外網的IP地址轉成內網。

在具體實現的時候可以用網路驅動層(類似虛擬網卡或者Windows Driver),也可以利用Hook API進入遊戲網路進程內部截獲函數處理,然後修改每次的connect或者send函數的參數。(具體實現還會更加複雜,因為某些遊戲公司,比如暴雪,網路模塊實現極其變態和不規範,大量使用微軟不支持的方法)

浩方用的是後者(別問我為什麼知道)。

打通區域網用戶的直連其實也是很複雜的一部分工作,因為各個網關設備的NAT機理不同,有些「欺騙手段」未必對所有網關都有效,大致原理是兩個客戶端分別協助伺服器獲得自己的真實IP和內網IP,然後伺服器根據不同情況,偽造數據包啟動一個欺騙連接,協助兩個客戶端建立直接連接。

當然也有方案是採用中間伺服器轉發兩個內網用戶的數據包,實測性能上有點問題,某些FPS遊戲延時嚴重。

本質上這些技術都不太難,關鍵要對操作系統的函數調用機理相對熟悉,網路協議要清晰,剩下來的大部分工作量是調試各種奇怪的環境和奇葩的遊戲。


之前有在某對戰平台做過,這類平台的原理類似,主要是通過socket hook + udp,針對war3來說,支持tcp,先在本地通過hook模擬建立tcp連接,然後將tcp的數據轉成外網udp數據發給外網伺服器轉發給其他客戶端,客戶端接收到後通過本地tcp模擬連接轉發到遊戲進程。這個過程中通過中轉伺服器協助進行p2p,成功後,不僅可以減少中轉伺服器壓力,同時也可以減少延遲,特別是一個一起開黑的時候。附上一張以前畫的圖


應該是在系統中加鉤子

可以參照開源商業實現NetHook來看


話說現在各家遊戲自己都有了自己的戰網,後面...之前做過一個類似的產品,原理上就是HOOK遊戲里所有socket函數,然後通過公網伺服器轉發數據包。舉例說明:在上海的A想和在北京的B打一局帝國時代。A、B均打開遊戲連上浩方,A選擇對戰開了一局等待其他玩家加入,因遊戲網路被hook過程中所有數據包被轉發到浩方伺服器,浩方又把數據包轉發到B的電腦上,這時B就能在區域網對戰模式下搜到了A的電腦,雖然兩台電腦雖然不在同一個區域網但實際上通過浩方伺服器轉發,兩者的網路數據已經互聯互通(實際上是間接互通)、遊戲會認為兩台電腦是在同一個區域網內。對戰過程原理一樣


推薦閱讀:

為什麼自我調侃、分享自己糗事的網站那麼火,而卻沒有一個分享自己好事的網站火起來?
像qq這類的軟體怎樣實現通信的呢?
如何看待《使命召喚14》到現在都沒有任何鎖區的現況?
為什麼用搜索引擎搜過的東西,在上別的網站時會顯示類似的廣告?這是互聯網的陰謀嗎?
華為EchoLife HG8120C接無線路由器 如何破解?

TAG:MicrosoftWindows | 區域網 | 計算機網路 | 浩方遊戲對戰平台 |