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

游戏卡顿白皮书 › L4 公网链路

ECMP 单条路径故障 ECMP / link bundle member fault

原因 ID isp-ecmp · 主责 运维团队·网络运维 · 配合 研发团队·服务器开发, 外部·外部

在含图示和实验的完整版中打开此卡片 →

运营商和数据中心通往同一目的地的路径往往有多条,每个连接固定走其中一条。只要有一条路径出故障,分到这条路径上的人就会一直卡。

起因 在多条线路捆绑的链路上,某一条线路或某台设备故障或拥塞 → 结果 路径按地址、端口组合(哈希)确定,只有分到该路径的连接出现丢包和延迟 → 画面表现 同一地区、同一运营商,只有部分人持续瞬移。重新连接后有时会恢复正常

症状
瞬移, 拉回, 一卡一卡
因素
丢包, 抖动
谁会遇到
只有我, 特定地区/运营商
何时出现
一直
负责方
主责 运维团队·网络运维 · 配合 研发团队·服务器开发, 外部·外部
研发团队要做的事
按连接记录丢包和重传统计,以便提取受影响玩家的 IP、端口和时间(TCP 用 TCP_INFO 里的重传次数,UDP 按缺失的包序号计算)。
运维团队要做的事
收集受影响玩家的 IP、端口和时间,转交给运营商或数据中心;按路径监控丢包;路径测量要用和游戏相同的协议、端口(mtr --tcp、--udp 加 --port);如果是我方设备上的路径,就把故障线路或设备从捆绑组中摘除。
外部要做的事
请运营商确认并更换故障路径;引导玩家通过重新连接临时避开(重连后端口会变的情况下)。
数值参考
有 4 条路径时,只有约四分之一的用户会遇到。ping 测量可能走的是和游戏不同的路径,结果反而正常。
监控图上
仅部分偏高 · 各连接的丢包、重传(按 IP/端口)
查看位置
按源 IP、源端口拆分查看各连接的丢包和重传;用 mtr 以 UDP(-u)发往游戏端口(-P),并固定源端口(-L)测量,再换几个源端口重复多次。只给 -P 不给 -L 时,每个请求的源端口都会变,多条路径的结果会混在一起
确认依据
同一地区、同一运营商内,只有特定的源端口(或地址)组合持续丢包,重新连接换了端口后恢复正常
排除依据
换了端口仍然都差,是某一段整体拥塞或故障
确认手段
运维工具即可确认(无需游戏代码)
深入了解
为了不打乱同一连接内数据包的顺序,设备会按地址和端口(视设备配置,也可能只用地址)算出的值,给每个连接固定一条路径(ECMP、LAG)。只用地址计算的地方,重新连接也还是同一条路径,不会好转。所以同时收到“ping 正常,只有游戏卡”“重连之后好了”这类反馈时,就要怀疑这个原因。

出处

  1. RFC 7424: Mechanisms for Optimizing Link Aggregation Group (LAG) and Equal-Cost Multipath (ECMP) Component Link Utilization in Networks IETF
    LAG、ECMP 用报头字段的哈希为每个流指定一条链路,以保证包序(流→链路为多对一映射)
  2. RFC 2991: Multipath Issues in Unicast and Multicast Next-Hop Selection IETF
    区分流的依据因实现而异(只看目的地址、看地址对、连端口一起看);多路径下 ping、traceroute 的结果难以信任
  3. mtr(8) manual page source mtr
    -u(UDP)、-P(目的端口)、-L(UDP 源端口)选项;只给 -P 时会把请求序号填进源端口,每个请求都不同

相关原因

同一层:L4 公网链路

其他层中同样导致“瞬移”的原因

查看含图示和实验的原卡片