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

游戏卡顿白皮书 › TCP 重传的根本原因

物理层错误(线缆/光模块/连接器不良) Bit errors: bad cable, optics, dirty fiber

原因 ID rt-physical · 主责 运维团队·网络运维 · 配合 运维团队·系统运维, 外部·外部

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

线缆损坏、光纤连接器积灰、光模块老化都会产生误码,损坏的数据包会被设备悄无声息地丢弃。

起因 线缆、光模块或连接器不良,导致比特翻转 → 结果 设备丢弃校验和(CRC)不对的数据包 → 画面表现 只有经过这条路径的玩家反复顿一下再快进,与时段无关

症状
卡住, 快进, 瞬移
因素
丢包
谁会遇到
特定地点/分线, 同一家庭
何时出现
一直
负责方
主责 运维团队·网络运维 · 配合 运维团队·系统运维, 外部·外部
运维团队要做的事
CRC 错误记在出错方向的接收端,所以两端都要查。网络:检查设备端口的 CRC 和入方向错误计数器;检查光功率(交换机上的光模块信息);清洁光纤连接器;更换线缆或光模块。服务器/OS:检查服务器 ethtool -S 的 rx_crc_errors(各驱动的名称略有不同);检查光功率(ethtool -m);更换服务器侧线缆或网卡。
外部要做的事
问题在玩家家中时,引导玩家更换网线或路由器;在运营商线路上时,要求运营商检修线路。
数值参考
即使只有 0.1% 的丢包,也是每 1,000 个游戏数据包丢一次。经过这条路径的玩家有几十人时,每隔几秒就会有人顿一下。包越大,越容易碰上误码。
监控图上
仅部分偏高 · 各端口的 CRC 错误数,各服务器、各端口的重传率
查看位置
看链路两端的 CRC 计数器。服务器看 ethtool -S 的 rx_crc_errors 或 ip -s -s link 的 crc,交换机看端口的 FCS 错误(dot3StatsFCSErrors)和入方向错误(ifInErrors)。光链路用 ethtool -m 和交换机的光模块信息查看接收光功率
确认依据
某个端口的 CRC 错误不分时段持续增加,只有经过该端口的服务器和连接重传率高。接收光功率比同类其他链路低
排除依据
CRC 不变,只有出方向丢弃增加,属于队列溢出(“突发发送导致浅缓冲区溢出”“瓶颈队列溢出”)。一端的晚期冲突和另一端的 CRC 同时增加,看“双工不匹配”
确认手段
运维工具即可确认(无需游戏代码)

出处

  1. Interface statistics Linux kernel
    rx_crc_errors 是接收端接口因 CRC 错误计数的数据包数,可用 ip -s -s link 和 ethtool -S 查看
  2. ethtool(8) — Linux manual page ethtool
    用 -S 查看各网卡、驱动的统计,用 -m 查看光模块(SFP+、QSFP)的 EEPROM 和光诊断信息
  3. RFC 3635: Definitions of Managed Objects for the Ethernet-like Interface Types IETF
    交换机端口的 FCS 错误(dot3StatsFCSErrors),这类错误计入入方向错误(ifInErrors)

相关原因

同一层:TCP 重传的根本原因

其他层中同样导致“卡住”的原因

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