遊戲 Lag 白皮書 › 依症狀查找
拉回:14 個原因與負責團隊
其他說法:被拉回原位、橡皮筋效應(rubber banding)、位置回溯
在含圖解的完整版症狀辭典中開啟 →
自己的角色往前走到一半,被拉回剛剛經過的位置。
跑到一半突然往後退 1~5m。有時同一段路要重走兩三次。
自己畫面上的預測和伺服器判定對不上。可能是自己的輸入沒送到伺服器(封包遺失)、伺服器的移動驗證把它擋掉,或是兩邊的移動計算不一致。
造成這個症狀的原因
L1 用戶端遊戲程式
- 用戶端預測不一致: 自己的用戶端已經先顯示移動,伺服器卻算出不同的結果時,自己的角色就會被拉回去。 (遊戲開發團隊(用戶端開發))
L3 家用網路
L4 網際網路線路
- 尖峰時段 peering 區段壅塞: 晚上 9~11 點左右影音流量暴增,電信業者之間的互連區段(peering)容易壅塞。 (基礎設施團隊(網路基礎設施))
- ECMP 其中一條路徑異常: 電信業者與資料中心會為同一個目的地準備多條路徑,並替每條連線指定其中一條傳送。只要其中一條路徑故障,被分配到那條路徑的人就會持續遇到 lag。 (基礎設施團隊(網路基礎設施))
L5 資料中心網路設備
L6 伺服器網路卡
- NIC 中斷集中在單一核心: NIC 只把封包到達的中斷(interrupt)送給一個 CPU 核心時,那個核心就會成為瓶頸。 (基礎設施團隊(伺服器基礎設施))
L13 伺服器架構與維運
- 切換 zone(跨伺服器轉移): 進入其他地圖或副本時,把角色資料交給另一台伺服器的過程中會產生延遲與失敗。 (遊戲開發團隊(伺服器開發))
- 配對與區域分配錯誤: 沒被分到近的區域、卻被分到遠方區域的伺服器時,即使線路正常,也只有那位玩家的 ping 一直偏高。 (遊戲開發團隊(伺服器開發))
同步設計
- 過於嚴格的伺服器驗證: 伺服器對移動速度、冷卻時間、射程檢查得太嚴格時,連因抖動而擠在一起抵達的正常輸入也會被拒絕。 (遊戲開發團隊(伺服器開發))
- 先行演出後遭伺服器拒絕: 自己畫面上先呈現的打擊、技能,事後沒有被伺服器認可時,明明看到的結果就變成沒發生過。 (遊戲開發團隊(用戶端開發))
- 指令同步的路徑計算不一致: 只互傳「走到這裡」、路徑由兩邊各自計算時,計算只要有一點不同,角色或怪物就會走上不同的路徑,再被拉回原位。 (遊戲開發團隊(伺服器開發))
只有部分人遇到的問題
TCP 重傳的根本原因
- 瓶頸佇列溢位(壅塞遺失): 分享器、電信業者之間的互連區段、資料中心線路這類最窄的地方,佇列一滿就會丟棄新進來的封包。 (基礎設施團隊(網路基礎設施))
- ACK 延遲或消失(上傳飽和): 資料已順利送達,但「收到了」的 ACK 在塞滿的上傳佇列裡延遲或消失時,傳送端會判斷為遺失而重傳。 (外部(外部))
查看含圖解的完整版症狀辭典