# 网络同步基础

理解网络延迟为什么是游戏最大的敌人,三种同步模型各解决什么问题

前置知识:3_2_cs-fundamentals(TCP/UDP底层原理)


阅读指南(初学者必看)

为什么你需要学习网络同步基础?

网络同步是游戏开发最难的领域之一。60fps 游戏每帧只有 16.7ms,而一个网络往返延迟(RTT)是 60200ms——一个 RTT 等于 412 帧的延迟!不理解这些基础,后续的帧同步、状态同步、预测回滚都会像天书。

学完本章,你能回答:

  • 为什么网络延迟是游戏最大的敌人?
  • 网络抖动和丢包对游戏有什么影响?
  • 帧同步、状态同步、预测回滚三种模型的核心区别是什么?

本文结构

第一部分:网络基础知识——延迟为什么这么难
第二部分:网络抖动与丢包——真实网络的恶劣环境
第三部分:三种同步模型概览——帧同步/状态同步/预测回滚的对比
第四部分:WebSocket基础——H5游戏的长连接方案

一、网络基础知识

为什么网络同步是游戏开发最难的领域之一?

物理世界:光速 30万km/s
上海到北京(1000km):理论延迟 3.3ms
实际网络延迟:30~100ms(经过多个路由器)

这意味着:
- 玩家按了按钮,30~100ms 后服务器才收到
- 服务器发回响应,又是 30~100ms
- 往返延迟(RTT):60~200ms

60fps 游戏每帧只有 16.7ms
一个 RTT = 4~12 帧的延迟!

二、网络抖动与丢包

理想网络:每包 50ms 到达
  ●─●─●─●─●─●─●─●─●─●   均匀

现实网络:延迟波动 + 丢包
  ●───●─●────●─●──●     50~150ms 抖动
  ●───●─●────×─●──●     偶尔丢包

三、三种同步模型概览

帧同步 状态同步 预测回滚
传输内容 只传输入 传状态 传输入+校正
带宽
服务器计算 不计算(只转发) 全部计算 校验+校正
客户端计算 全部计算 渲染+预测 全部计算+回滚
确定性要求 极高
反作弊 容易 中等
适用游戏 RTS/格斗/MOBA MMO/RPG/FPS 竞技格斗

四、WebSocket基础

H5游戏最常用的长连接方案。WebSocket在TCP之上提供全双工通信,适合实时游戏。

// 客户端连接
const ws = new WebSocket('wss://game.example.com/room');

ws.onopen = () => {
    console.log('连接成功');
    ws.send(JSON.stringify({ type: 'join', roomId: '123' }));
};

ws.onmessage = (event) => {
    const data = JSON.parse(event.data);
    handleGameMessage(data);
};

ws.onclose = () => {
    console.log('连接断开,准备重连...');
    reconnect();
};

自问自答

Q:为什么不用 TCP 做游戏同步? A:TCP 的可靠有序特性会导致队头阻塞——一个包丢了,后面所有包都等着。而游戏对实时性要求极高,旧的位置数据到了也没用,不如用 UDP 自己控制可靠性。

Q:三种同步模型该怎么选? A:看游戏类型。需要确定性复现的(RTS/MOBA)用帧同步;服务器权威的(MMO/FPS)用状态同步;对操作手感要求极高的(格斗)用预测回滚。很多游戏会混用。

Q:网络抖动和延迟哪个更严重? A:抖动更难处理。延迟可以预测和补偿(客户端预测),但抖动是随机的,无法预测。抖动严重时,缓冲策略需要更大,导致操作延迟增加。

Q:为什么说 RTT = 4~12 帧的延迟? A:60fps 游戏每帧 16.7ms,RTT 60200ms。60ms ÷ 16.7ms ≈ 4帧,200ms ÷ 16.7ms ≈ 12帧。这意味着玩家按了按钮后,要等 412 帧才能看到服务器的响应。


实践任务

  • 任务1:用 ping 命令测量到不同服务器的延迟和抖动,记录平均值和标准差
  • 任务2:用 Wireshark 抓包观察 TCP 的重传行为和 UDP 的丢包情况
  • 任务3:实现一个简单的延迟模拟器,在本地模拟 50ms/100ms/200ms 延迟 + 随机抖动
  • 任务4:在延迟模拟器下,对比 TCP 和 UDP 传输游戏数据的体验差异
  • 任务5:画一个三种同步模型的数据流图,标注每个环节的延迟

与其他章节的关联

本章内容 关联章节 关联点
TCP/UDP 基础 3_2_cs-fundamentals TCP/UDP 底层原理在本章直接应用
帧同步概览 第03章 帧同步Lockstep 本章概述,第03章深入实现
状态同步概览 第04章 状态同步 本章概述,第04章深入实现
预测回滚概览 第05章 预测与回滚 本章概述,第05章深入实现
自定义 UDP 第06章 自定义UDP协议与KCP 理解 UDP 的局限性后,第06章自己造协议
WebSocket 第13章 弱网优化与实战 WebSocket优化在第13章深入

上一章:01-系统设计方法论 下一章:03-帧同步Lockstep