遊戲 Lag 白皮書 › L4 網際網路線路
ECMP 其中一條路徑異常 ECMP / link bundle member fault
原因 ID isp-ecmp · 主要負責 基礎設施團隊(網路基礎設施) · 協同 遊戲開發團隊(伺服器開發), 外部(外部)
在含圖解與實驗的完整版中開啟卡片 →
電信業者與資料中心會為同一個目的地準備多條路徑,並替每條連線指定其中一條傳送。只要其中一條路徑故障,被分配到那條路徑的人就會持續遇到 lag。
為什麼 在多條線路綁在一起的區段中,其中一條線路或一台設備異常或壅塞 → 於是 路徑由位址與 port 的組合(雜湊)決定,只有被分配到那條路徑的連線出現封包遺失與延遲 → 畫面上 同一地區、同一電信業者,卻只有部分人持續瞬移。重新連線後有時就恢復正常
- 症狀
- 瞬移, 拉回, 卡頓
- 因素
- 遺失, 抖動
- 誰會遇到
- 只有我, 特定地區/電信業者
- 何時
- 一直都有
- 負責單位
- 主要負責 基礎設施團隊(網路基礎設施) · 協同 遊戲開發團隊(伺服器開發), 外部(外部)
- 遊戲開發團隊要做的事
- 記錄每條連線的遺失與重傳統計,讓受影響者的 IP、port 與時間點能被撈出來(TCP 用 TCP_INFO 的重傳次數,UDP 用缺漏的封包序號計算)。
- 基礎設施團隊要做的事
- 收集受影響者的 IP、port 與時間點,提供給電信業者與資料中心;監控各路徑的遺失;量測路徑時使用與遊戲相同的協定與 port(mtr --tcp、--udp 搭配 --port);若是我方設備的路徑,就把異常線路或設備從綁定中移除。
- 外部要做的事
- 請電信業者確認並更換異常路徑,並引導玩家以重新連線暫時避開(重新連線會換 port 的情況)。
- 數值參考
- 有 4 條路徑時,只有約 1/4 的使用者會遇到。量測 ping 時可能走的是和遊戲不同的路徑,結果看起來正常。
- 圖表上
- 只有部分偏高 · 每條連線的遺失與重傳(依 IP/port)
- 查看位置
- 依來源 IP、port 分開查看每條連線的遺失與重傳;用 UDP(-u)把 mtr 送往遊戲 port(-P),並指定來源 port(-L)量測,再換不同來源 port 重複多次。只給 -P 不給 -L 時,每次請求的來源 port 都會變,多條路徑的結果會混在一起
- 符合的跡象
- 同一地區、同一電信業者內,只有特定來源 port(或位址)的組合持續遺失,重新連線換了 port 後就恢復正常
- 不符合的跡象
- 換了 port 仍然全部都差時,是整個區段的壅塞或故障
- 確認方式
- 用基礎設施工具確認(不需要遊戲程式碼)
- 深入了解
- 為了不打亂同一條連線的封包順序,設備會依位址與 port(依設備設定,也可能只看位址)算出的值,替每條連線固定一條路徑(ECMP、LAG)。只看位址的地方,重新連線後仍是同一條路徑,不會改善。因此同時收到「ping 正常,只有遊戲 lag」、「重新連線後就好了」這類回報時,就要懷疑是這個原因。
出處
- RFC 7424: Mechanisms for Optimizing Link Aggregation Group (LAG) and Equal-Cost Multipath (ECMP) Component Link Utilization in Networks IETF
LAG、ECMP 以標頭欄位的雜湊替每個 flow 指定一條鏈路,保持封包順序(flow→鏈路為多對一對應) - RFC 2991: Multipath Issues in Unicast and Multicast Next-Hop Selection IETF
區分 flow 的依據因實作而異(只看目的位址、位址對、連 port 也看),多路徑環境下 ping、traceroute 的結果難以採信 - mtr(8) manual page source mtr
-u(UDP)、-P(目的 port)、-L(UDP 來源 port)選項,只給 -P 時會把請求序號放進來源 port,每次請求都不同
相關原因
同一層:L4 網際網路線路
同一症狀(瞬移)在其他層的原因
查看含圖解與實驗的完整版卡片