한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

遊戲 Lag 白皮書 › L8 Socket 與協定

UDP 封包的 IP 分段 IP fragmentation of large UDP

原因 ID sk-fragment · 主要負責 遊戲開發團隊(伺服器開發)

在含圖解與實驗的完整版中開啟卡片 →

超過 MTU(一次能傳送的最大大小)的 UDP 封包會在 IP 層被分段(fragmentation),只要遺失其中一個分段,整個封包就會被丟棄。

為什麼 人多之處的快照超過 1,500 位元組 → 於是 拆成多個分段傳送,只要遺失一個就整個丟棄 → 畫面上 封包越大,遺失率高出好幾倍。只在人多的地方出現瞬移

症狀
瞬移
因素
遺失
誰會遇到
特定地點/頻道, 特定地區/電信業者
何時
人潮湧入時
負責單位
主要負責 遊戲開發團隊(伺服器開發)
遊戲開發團隊要做的事
自行把封包切成 1,200 位元組以下、只傳送變更的部分。
數值參考
在遺失率 2% 的線路上,拆成 4 個分段的封包約有 8% 會消失。也有防火牆或電信業者會直接丟棄分段的封包,這些玩家就完全收不到大封包。
圖表上
隨人數/負載上升 · IP 分段數(IpFragCreates)、快照大小
查看位置
在伺服器上看 nstat -az 的 IpFragCreates(傳送時產生的分段數)增加量,接收端則看 IpReasmFails(重組失敗次數)。用遊戲伺服器 log 或封包擷取確認 UDP 封包大小的分布
符合的跡象
人潮聚集的地方 IpFragCreates 增加,出現超過 1,500 位元組的 UDP 封包,同時瞬移的回報也變多
不符合的跡象
IpFragCreates 沒有增加時,伺服器傳送端沒有發生分段
確認方式
用基礎設施工具確認(不需要遊戲程式碼)

出處

  1. RFC 8085: UDP Usage Guidelines IETF
    遺失一個分段就無法重組,整個封包都會遺失;UDP 應用程式應避免 IP 分段
  2. RFC 8900: IP Fragmentation Considered Fragile IETF
    防火牆與部分網路丟棄 IP 分段的案例
  3. net/ipv4/proc.c (Linux v6.12) Linux kernel
    nstat 顯示的計數器名稱:Ip 群組的 FragCreates(產生的分段數)、ReasmFails(重組失敗次數)

相關原因

同一層:L8 Socket 與協定

同一症狀(瞬移)在其他層的原因

查看含圖解與實驗的完整版卡片