遊戲卡頓都怪"牆"?

看了部分有關遊戲卡頓的回答,總覺得有些人的回答太扯,什麼問題都丟到「牆」的身上去,似乎一個VPN就能拯救整個世界。

這不太對,我覺得不行。於是在一個問題下簡單做了個回答:

白袍過客:為何主機遊戲對網路要求高於pc和手游?

------------------------------------------------------------

【以下為回答原文】

大部分朋友可能並不是相關從業者,我盡量用較為通俗但不那麼科學嚴謹的語言講述。

首先,我要駁斥一個觀點:遊戲卡(特指Ping高),就是因為牆的原因,開了VPN能提速,是因為翻了牆。

當然我不是否定遊戲伺服器在國外才比較卡的觀點,而是反對因為"牆"才卡的觀點。請注意區分二者。

要想知道為什麼,想要進行一些基礎知識的科普。搬好板凳聽故事吧。

-----------------------------------------------

>先要知道我們是怎麼上網的?

輸入網址->經過DNS解析為公網IP(或者內網IP也行,但我們忽略這種情況,畢竟要說的不是區域網遊戲)->從目標IP的伺服器獲取數據

那麼牆是什麼?北郵校長當年設計牆的時候,基本就是一套DNS劫持(或者說DNS污染),後來開始出現封IP、封HTTP代理。

有些人可能知道改host可以翻牆,其原理就是在本地針對特殊域名進行IP解析,例如在host文件中寫上一行「119.75.217.109 www.baidu.com」,就是當你輸入百度域名(後面那串網址)時,會在本地解析為前面的IP並訪問,繞開了DNS的限制,真正起作用是IP不是那個網址。你在瀏覽器里輸入前面那串IP也能打開百度,不信你試試?

DNS的伺服器肯定不在你手裡,所以ISP(你可以簡單理解為電信、移動、鐵通這類給你提供網路服務的商人)可以響應國家號召在DNS上動手腳,你輸入域名不給你解釋成IP,這樣就達成了牆的效果。

有些人可能又要說了,有時候我改HOST也沒作用啊。那是因為對方的IP被禁掉了。中國的互聯網總會有一個對外的出口的,這肯定控制在國家手裡。他們檢測你發出的信息報報文頭,發現被封掉的IP就截掉,你一點辦法都沒有。

所以這時候你想到了VPN。

-----------------------------------------------

>什麼是VPN?

有些人眼中VPN就是個翻牆工具,甚至把所有能翻牆的東西都叫做VPN。

錯,全錯。

VPN的中文翻譯是虛擬專用網路,他的工作原理是建立一個專門的加密網路,對外封閉。

似乎從上面這個定義完全看不出他為什麼能翻牆對不對?

剛剛提到了有些發往特別IP的報文會被截掉。比如地址A被封掉了,那麼國內的地址Z,發往A的報文就會全線掛掉。那麼這時候如果存在一個通往國外地址B的VPN,Z向B發送加密後的報文,監控部門無法知道這個報文是發給A的,因為被加密了,也就沒法截掉(畢竟不可能把所有國外IP都封掉吧?);而B能解析這個報文,知道要發給A;於是在國內的Z發給了在國外且沒有被禁掉的B,B在解析報文知道要發給在國外但被國內禁掉的A,最終完成了Z->A的通信。(事實上HTTP代理也是這種原理,但我們略過不展開)

看完這個你就能知道VPN為什麼能翻牆了。可從這個過程你看到任何能完成加速的步驟了嗎?

要知道Z如果要和A通信,要麼徹底連不上,要麼就是能連上。連不上是因為有牆,但你說連上了但是會卡是因為牆就是扯淡了。

VPN之所以可以加速,是因為他節約了數據包的跳點。

-----------------------------------------------

>VPN為什麼能減小遊戲延遲?

也就是你們常說的加速遊戲。

互聯網之所以能叫互聯網,因為他是一個網路,Z要發送給用戶G,並不是直達的,中間可能會經過F、H、J...L、I、S的轉發最後才到G,而且是每次發送這個路徑都是不一樣的,每次都要等設備計算路徑(不確切地說,嚴格來說是建立路由表什麼的,略),才會進行轉發。

而VPN的作用就是,先在互聯網上開一條通道出來,這個通道里的所有設備的信息對內完全封閉。比如這時候Z要發給G,可能經過的節點就少了、等待設備轉發的時間也少了。(具體原理略)

尤其是對國外這種長距傳送(非地理距離,而是物理網路距離,並不是說在國外就一定更遠),VPN帶來的加速效果極為顯著。

(順便說一下,我在家裡都是自己建立一個VPN,這樣在公司或者KFC用支付寶也放心一點,畢竟所有的數據包都是通過我本人的VPN發出去的,減少了被截獲的風險。但顯然我這個VPN是翻不了牆的,畢竟我建VPN機器就在國內,也是國內的IP。那些說阿里雲隨便買個IP建一個VPN就能翻牆的動動腦子,要買也得買香港IP才能翻牆好么。)

看到這裡,你應該明白了,卡,不是因為牆,就算沒有牆,在國內現有的環境條件下(對外出口數目、路由設備質量),沒牆你也卡。(還準備用開了VPN就能提速反駁我的建議回去再看一遍VPN為什麼能提速以及提速跟牆有沒有關係)

另外,用vpn其實某種意義上也能解決NAT所帶來的無法定址的問題。不展開了。

-----------------------------------------------

>所以主機遊戲為什麼對網路的要求高於主機?

並沒有好嘛。

如果你玩過一些P2P通信的遊戲,你就會知道,NAT Strict該來的總會來的,不會因為你是主機還是PC而區別對待。我舉幾個PC上的遊戲作為例子,RUNNING WITH REFILE或者WARFRAME。

-----------------------------------------------

>什麼是P2P?什麼是NAT?什麼是C/S?

P2P全稱,就像某位答主所說的,是point to point(手動微笑,然而並不是,是peer to peer)。我們此處僅所說在遊戲中的應用。

常見的遊戲聯網方式有兩種,P2P和C/S。假設A與B要聯機:

P2P的聯機方式是,通過中介S協調(一般是UDP穿孔,待會兒再說),A勾搭上了B,B表示同意,於是A跟B就不再跟中介S通信,直接在AB之間發送數據包;

C/S的聯機方式是,A把要跟B說的話(數據包)告訴S,由S轉發給B;B也做同樣的轉發處理。

由於玩家A或B都是普通玩家,他們不可能有獨立、恆定的公網IP,所以A跟B利用P2P的方式聊天時,必須要先通過S找到對方的IP才能聊天,但S一定能找到對方的IP嗎?不行,原因我們下面說;而C/S架構中伺服器S必然有一個公網IP(要寫死在遊戲程序代碼里的,只不過一般寫的是域名),所以A必然可以找到S,B也必然找得到S,所以他們的轉發一定成功(A和B都只S聯絡,並不直接交流)。

為什麼P2P的方式下A通過S不一定找得到B?因為NAT。NAT的原理講起來麻煩,有興趣可以具體百度。總之,你們這樣理解,你家門牌號是唯一的,但你和你哥哥各分一個屋子,郵遞員每次只把信收到你家門口,你要是不去門口查收,根本不知道要送到哪個屋子裡去。

所以A要找到B,就可能會出現這樣的效果:A告訴S我要知道B在哪,S給B的家裡發了封郵件說你出來一下,告訴我你在哪個屋子。然而B在屋子裡土嗨根本沒收到這個消息,A要找B約炮的計劃宣告失敗。

為了解決NAT的這種問題,就衍生出了NAT穿孔技術。一般都是做UDP穿孔。這又是另外一個很複雜的故事了。UDP穿孔跟內網結構有關,也跟路由設備有關。我沒有自信把我研究了那麼多年的東西用兩句話講清楚,所以只好總結一下了:

C/S聊天必然暢通(只要開發商不倒閉或者炸服),P2P看天命。

你一定又要問為什麼不都用C/S呢?因為貴啊......那些做獨立遊戲的廠商做遊戲都困難了,你讓他去花錢維護一個高品質的伺服器?不存在的。

----------------------------------------------------------

回到主題,主機遊戲中大部分遊戲都是P2P的,但並不是說PC遊戲上就沒有基於P2P的遊戲,而是PC遊戲基數過大,加上部分人玩的遊戲可能都是網遊這種必然是C/S的遊戲(warframe除外,微笑臉),因此產生了他喵的主機遊戲都特么這麼卡的觀點。

至於手機....你告訴我哪個手游不是網遊?不是C/S架構的聯機?(請忘了區域網五子棋,謝謝!)

命苦如我,為了聯機某些獨立遊戲在PC上各種SDN,各種轉發,各種租伺服器,你就會知道PC上聯機並不比主機或手機遊戲上簡單。


推薦閱讀:

PlayStation 4獨佔遊戲列表(截至2017)
《怪物獵人:世界》開發秘聞(九) 戰鬥邏輯的進化和更多樣化的狩獵選擇
關於 APPLE TV 涵蓋『主機遊戲』的淺見
我們必然要開始接受不像「無雙」的《真·三國無雙8》
「區塊鏈」和遊戲到底存在什麼聯繫?

TAG:單機遊戲 | 家用主機遊戲 | 計算機網路 |