前言:记录了总6w字的面经知识点,文章中的知识点若想深入了解,可以点击链接学习。由于文本太多,按类型分开。这一篇是 网络 常问问题总结,有帮助的可以收藏。
1. TCP与UDP的区别
区别
UDP
TCP
是否连接
不连接
面向连接
是否可靠
不可靠
可靠传输(传输过程中会丢失,但会重发)使用流量控制和拥塞控制
连接对象个数
支持一对一,一对多,多对一,多对多交互通信。
仅支持一对一通信。
传输方式
面向报文
面向字节流
数据边界
保存数据边界
不保存数据边界
速度
速度快
速度慢
发送消耗
轻量级(因为 UDP 传输的信息中不承担任何间接创造连接,保证交货或秩序的的信息。这也反应在包头大小。)
重量级
首部开销
首部开销小,仅8个字节
首部开销大,最小20字节,最大60字节。
有序性
不提供有序性的保证
TCP 保证了消息的有序性,即使到达客户端顺序不同,TCP 也会排序。
应用场景
IP电话,视频会议,直播,以及FPS竞技类的使用UDP帧同步。
要求可靠传输的应用例如文件传输,以及MMO类的TCP状态同步。
2. 帧同步与状态同步
2.1 帧同步让每个客户端在相同的时刻发送游戏数据到服务端,服务器广播分发所有客户端的数据,然后客户端根据服务端发来的数据做出相应的逻辑处理,保证每个客户端在同一时刻所有的数据都是一致同步的。客户端做游戏逻辑处理。
核心思想: 相同的输入+相同的时机=相同的表现
同步的实现:
同步随机种子 客户端上传当前逻辑帧的操作(帧索引+游戏操作) 服务器广播客户端操作帧同步可以说同步的是操作(输入)-服务器收到每个客户端当前的输入,将数据广播到所有客户端,客户端针对其他客户端的操作,做出逻辑处理,使得所有客户端在每一时刻的数据都是一致的。
优点:
单次同步数据很小,传输速率快,因为数据的逻辑处理主要是在客户端,服务器只起到分发同步的作用。 服务端压力小。 更容易实现录像功能,因为是帧同步,每一个时刻的帧序列都有记录,可以很好的还原游戏过程。 开发效率高,可以部分当作单机游戏来开发。 游戏精准度更高,能呈现更好的打击感、音效、特效等反馈、以及动作的反馈、动作的频率也可以更高。 流量消耗小,因为传输的数据量更少。大部分逻辑处理都在客户端处理好了。缺点:
1.反外挂能力弱。因为主要的数据处理是在客户端。
2.网络要求更高,因为是是实时同步,一旦客户端网络延迟过高,很容易影响用户体验,产生网络抖动。
3.断线重连难度很大,因为一旦掉线,本地数据丢失了,需要从服务器逐帧来读取游戏进度,直到与当前游戏进度一直。如果直接从当前游戏进度开始进行同步,是很容易出现数据错误的。
2.2 状态同步客户端将数据发送到服务端,服务端根据每个客户端发来的数据做出处理,再将处理完的数据广播发送到所有客户端,客户端根据数据进行数据表现。服务端做游戏逻辑处理。
优点:
反外挂能力强,因为大部分数据处理都是在服务端。 网络要求不高。 玩家可以随时加入到一个开始的战局,只需要同步当前战局内的所有玩家当前的状态即可。缺点:
传输数据大,传输速度慢。因为客户端会将大量数据传输给服务端,再由服务端进行逻辑处理,再分发给所有客户端。 服务