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

遊戲 Lag 白皮書 › L5 資料中心網路設備

MTU 不一致(只有大封包消失) MTU black hole

原因 ID dc-mtu · 主要負責 基礎設施團隊(網路基礎設施) · 協同 基礎設施團隊(伺服器基礎設施), 遊戲開發團隊(伺服器開發)

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

中途區段的 MTU(一次能傳送的大小)變小,而大小超過的通知又被擋掉時,只有大封包會一直消失。

為什麼 在通道或 VPN 區段中 MTU 變小 → 於是 大小超過的通知(ICMP)被防火牆擋下,傳送端不知道 → 畫面上 只有打開背包、角色清單這類大畫面時,畫面會停住,接著斷線

症狀
定格, 斷線, 連不上/無限讀取
因素
遺失
誰會遇到
特定地區/電信業者, 只有我
何時
做特定動作時, 剛登入/維護剛結束
負責單位
主要負責 基礎設施團隊(網路基礎設施) · 協同 基礎設施團隊(伺服器基礎設施), 遊戲開發團隊(伺服器開發)
遊戲開發團隊要做的事
要在伺服器端直接調低,須設定 socket 的最大區段大小 TCP_MAXSEG(光在遊戲程式碼裡把訊息切小是擋不住的),UDP 封包維持在 1,200 位元組以下。
基礎設施團隊要做的事
網路:在通道區段縮小 TCP 封包大小(MSS 調整),在防火牆與雲端網路 ACL 允許大小超過的通知(ICMP)。伺服器設備/OS:在伺服器防火牆與雲端安全群組也允許大小超過的通知(ICMP),開啟伺服器 kernel 的 MTU 探索 tcp_mtu_probing=1(這是要停住幾秒後才會作動的最後一道防線)。
數值參考
一般為 1,500 位元組,經過通道後會縮小到 1,400 左右。
圖表上
只有部分偏高 · 各地區/電信業者的斷線、大型回應失敗
查看位置
從問題玩家的電腦對伺服器送出開啟禁止分段旗標(DF)的 ping,並改變大小。Windows 用 ping /f /l 1472 SERVER_IP,Linux 用 ping -M do -s 1472 SERVER_IP(1,472 是 MTU 1,500 減去 IP 標頭 20 位元組與 ICMP 標頭 8 位元組的值)。逐步縮小大小找出能通過的最大值,並確認伺服器端安全群組與防火牆是否允許 ICMP 大小超過通知(Fragmentation Needed)
符合的跡象
小的 ping 能通,1,472 位元組的 DF ping 卻失敗(沒有回應,或出現需要分段的錯誤),能通過的最大值只有 1,400 左右。同一地區的玩家只有在打開大畫面時畫面停住
不符合的跡象
1,472 位元組的 DF ping 也能順利通過時,就不是路徑 MTU 的問題。連小的 ping 都不通時,是 ICMP 本身被擋,無法用這個方法判斷
確認方式
在玩家端環境確認

出處

  1. RFC 2923: TCP Problems with Path MTU Discovery IETF
    防火牆擋掉 ICMP(Fragmentation Needed)時,路徑 MTU 探索會失敗,只有大封包一直消失(黑洞),ping 與小型通訊正常,因此難以診斷
  2. Maximum transmission unit and maximum segment size Cloudflare
    網際網路路徑 MTU 1,500,經過 GRE 通道後為 1,476,建議把 TCP MSS 限制在 1,436 以下
  3. IP Sysctl Linux kernel
    tcp_mtu_probing=1 平時關閉,偵測到 ICMP 黑洞時才開啟 TCP 路徑 MTU 探索
  4. ping(8) — Linux manual page iputils
    -M do 開啟 DF 旗標並拒絕大於路徑 MTU 的封包,-s 指定資料大小(預設 56 位元組,另加 ICMP 標頭 8 位元組)
  5. ping Microsoft
    /f 開啟 DF 旗標,用來找出路徑 MTU 問題,/l 指定資料大小

相關原因

同一層:L5 資料中心網路設備

同一症狀(定格)在其他層的原因

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