遊戲伺服器IP/TCP協議(王者榮耀為例)
第一部分
先分別介紹IP/TCP協議族:
IP協議:
對於TCP/IP網路來說,網路層是其核心所在。該層的IP協議負責生成發往目的地的資料報以實現邏輯定址,完成資料從網路上一個節點向另一個節點的傳輸。
IP的主要目的是通過一個互聯的網路傳輸資料報,涉及兩個最基本的功能。
●定址(Addressing):IP協議根據資料報首部中包括的目的地址將資料報傳送到目的節點,這就要涉及傳送路徑的選擇,即路由功能。IP協議使用IP地址來實現路由。
●分片(Fragmentation): IP協議還提供對資料大小的分片和重組,以適應不同網路對資料包大小的限制。如果網路只能傳送小資料包,IP協議將對資料報進行分段並重新組成小塊再進行傳送。
IP是一個無連線的、不可靠的、點對點的協議,只能盡力(BestEffort)傳送資料,不能保證資料的到達。具體地講,主要有以下特性。
●IP協議提供無連線資料報服務,各個資料報獨立傳輸,可能沿著不同的路徑到達目的地,也可能不會按序到達目的地。
●IP協議不含錯誤檢測或錯誤恢復的編碼,屬於不可靠的協議。所謂不可靠,是從資料傳輸的可靠性不能保證的角度而言的,查詢的延誤及其他網路通訊故障都有可能導致所傳資料的丟失。對這種情況,IP協議本身不處理。它的不可靠並不能說明整個TCP/IP協議不可靠。如果要求資料傳輸具有可靠性,則要在IP的上面使用TCP協議加以保證。位於上一層的TCP協議則提供了錯誤檢測和恢復機制。
●作為一種點對點協議,雖然IP資料報攜帶源IP地址和目的IP地址,但進行資料傳輸時的對等實體一定是相鄰裝置(同一網路)中的對等實體。
IP協議的效率非常高,實現起來也較簡單。這是因為IP協議採用了盡力傳輸的思想,隨著底層網路質量的日益提高,IP協議的盡力傳輸的優勢體現得更加明顯。
下圖是IP資料包的格式:
TCP/UDP協議:
傳輸層是TCP/IP協議中的非常重要的層次,提供了面向連線的傳輸控制協議(Transmission Control Protocol,TCP)和無連線的使用者資料報協議(User Datagram Protocol,UDP),負責提供端到端的資料傳輸服務,將任意資料通過網路從傳送方傳輸到接收方。TCP提供的是可靠的、可控制的傳輸服務,適用於各種網路環境;UDP提供的服務輕便但不可靠,適用於可靠性較高的網路環境。大部分Internet應用都使用TCP,因為它能夠確保資料不會丟失和被破壞。本章將對這兩種協議進行詳細分析。
在OSI模型中,傳輸層是介於網路層和會話層之間的一箇中間層次,彌補高層服務和網路層服務之間的差距,並向高層使用者((應用程式)遮蔽通訊子網的細節,使高層使用者看到的只是在兩個傳輸實體間的一條端到端的、使用者可控的、可靠的資料通路。在TCP/IP模型中,由於3個高層簡化為1個應用層,傳輸層是介於網路層與應用層之間的一個層次。
網路層協議提供網路地址、路由、交付功能,而傳輸層協議提供了端到端資料傳輸的必要機制。傳輸層協議通常要負責以下幾項基本功能。
●建立程序到程序的通訊,程序即正在執行的應用程式。程序之間通過傳輸層進行通訊,傳送程序向傳輸層傳送資料,接收程序從傳輸層接收資料。
●提供控制機制,如流量控制、差錯控制。資料鏈路層定義相鄰節點的流量控制,而傳輸層定義端到端使用者之間的流量控制。
●提供連線機制。在資料傳輸開始時,通訊雙方需要建立連線。在傳輸過程中,雙方還需要繼續通過協議來通訊以驗證資料是否被正確接收。資料傳輸完成後,任一方都可關閉連線。
第二部分
下面就以王者榮耀為例說明TCP/IP協議族在網路遊戲中的應用。
2.1啟動、登入遊戲
首先我們啟動王者榮耀遊戲APP。進人APP資頁,第一步會進行版本更新檢測。若檢查到資源包有更新則進行下載,若未檢查到更新的資源包,則本地載入遊戲資源包及解壓資源包。這期間會跟圖片伺服器(image.smoba.qq.com),使用者資訊(game.eve.mdt.qq.comgame.str.mdt.qq.com)、資料伺服器(down.qq.com,dliedl.qq.com)進行互動,遊戲介面載入過程主要是TCP傳輸。
通過對啟動階段進行抓包分析,遊戲啟動過程中,客戶端通過DNS域名解析獲得王者榮耀遊戲伺服器的IP地址,建立TCP連結,進行資料互動來啟動遊戲。
2.2遊戲對戰階段
在實時對戰的過程中,客戶端與伺服器間主要有兩個互動連線,一個為TCP連線,一個為UDP連線。開戰(玩家選擇自己的英雄角色及技能)及遊戲分出勝負(水晶被毀)時,會觸發大量UDP包,包數量大於150;正式遊戲過程中,終端與主伺服器保持UDP和TCP連線。
(1)TCP長連線
遊戲客戶端與伺服器之間建立一個TCP長連線,由終端發起,通過這個TCP長連線進行心跳和其它資訊互動,用以確認伺服器狀態正常,心跳間隔3s,訊息大小固定,流程如圖1所示:
(2)UDP報文
客戶端和伺服器之間互動的報文,除了TCP連線報文以外,還有大量的UDP報文,分為兩類:
上行UDP報文:客戶端通過上行UDP報文將玩家所做的操作上報給伺服器。
下行UDP報文:伺服器彙總參加對戰的所有玩家的操作,通過下行UDP報文廣播給參加對戰的所有玩家的客戶端。
據騰訊訊息,王者榮耀遊戲採用的同步機制為幀同步(非狀態同步),主要流程如下:
1、玩家上報操作。
2、伺服器收集各玩家上報的各自操作,進行彙總,以固定的時間間隔(例如60 ms)向參加對方的各玩家廣播所有玩家的操作。
令各客戶端接收到廣播,知道了所有玩家的操作,按照相同的遊戲邏輯進行運算,得到相同的結果,呈現在遊戲介面上。
通過上述幀同步機制,基本可以保證參加對戰的各玩家遊戲步調是一致的,即遊戲玩家間的顯示基本是相同的(因為網路時延的不同會略有差異)。圖2王者榮耀遊戲幀同步流程:
根據以上分析,總結如下:
一、王者榮耀遊戲的啟動和登入採用TCP連線,並且遊戲互動過程中保持TcP連線通過心跳包(3s間隔)來檢測使用者是否線上。
二、王者榮耀遊戲的客戶端操作與介面顯示是通過UDP資料流與伺服器進行互動的,下行速率最小需80 kbps,上行速率需64 kbps。因此王者榮耀遊戲對速率要求較小。