我正在研究游戏的点对点网络架构。 我从多个来源了解到,点对点模型使人们很容易被黑客攻击。发送有关您的游戏角色的错误数据,无论是您的错误位置还是您拥有的生命值。
现在我读到,让点对点更安全的方法之一就是在游戏中加入反作弊系统,该系统控制一些事情,例如:某人从地点 A 移动到地点 B 的速度有多快,或者控制某人的健康点是否没有无故剧烈变化。
我还读过有关Lockstep的内容,它被描述为点对点网络中所有客户端之间的“握手”,其中客户端承诺不做某些事情,例如“移动速度比X快或无法跳得比Y更高”,然后将他们的动作与“握手”中设定的规则进行比较。 对我来说,这似乎是一个反作弊系统。
我最后要问的是:Peer-To-Peer模型中的Lockstep是什么,它是反作弊系统还是其他什么,以及这个系统应该放在Peer-To-Peer中的什么位置。在每个玩家的计算机中,或者如果它不在所有玩家的计算机中,它是否可以工作,该系统应该控制整个游戏,还是仅控制一个子集?
Lockstep 的设计主要是为了节省带宽(在宽带出现之前)。
问题:当您只有极少量的带宽(14400-28800 波特)时,如何模拟分布在多个系统中的(数万)万个单元?
你不能做什么:通过网络发送数以万计的头寸或增量,每个价格变动。
你可以做什么:仅发送每个玩家所做的输入,例如,“玩家A命令这个(有限大小)组ID=3的选定单位前往x=12,y=207”。
但是,现在每个客户端应用程序(或者更确切地说,P2P 客户端代码的开发人员)都有责任将这些输入转换为每个逻辑标记“完全”相同的游戏状态,就像所有其他客户端在该标记上所做的那样。否则,您会遇到同步错误和模拟失败,因为没有对等方具有权威性。这些同步错误可能不仅仅由作弊者造成,也就是说,它们可能在许多合法的、非作弊的场景中出现(事实上,当我还是个 90 年代的年轻人,玩锁步游戏时,这甚至是一种常见的挫败感)通过 LAN,这应该是可靠的)。例如,当相同的浮点计算在不同的客户端架构(例如 Intel 与 ARM)上产生略有不同的结果时。 所以现在您只使用了带宽的一小部分。但是,确保客户端不会产生不同步条件所需的细致编码使得这比权威服务器更难编码,在权威服务器中,服务器可能会丢弃不理智的输入或游戏状态。
作弊:很容易看到你不应该看到的东西:每个客户都拥有所有可用的模拟数据。很难修改游戏状态而不立即导致游戏崩溃。
Lockstep 不是一个反作弊系统,它是用于在游戏中实现在线多人游戏(尤其是在策略游戏中)的常见 p2p 网络模型之一。基本概念相当简单:
游戏模拟被分为相当短的时间范围。
如果有人需要具体的例子,这里有一篇关于帝国时代系列中使用的锁步模型的古老但仍然
很好的文章。