Networking 游戏中的网络问题

Networking 游戏中的网络问题,networking,latency,anti-cheat,Networking,Latency,Anti Cheat,我正在寻找特定于游戏的网络设计和技巧。我知道一些问题,我对其中一些问题有一些部分的解决方案,但也有一些问题我还看不到。我认为没有明确的答案,但我会接受一个我非常喜欢的答案。我能想到4类问题 坏网络 客户端发送的消息需要一些时间才能到达服务器。服务器不能只处理FCF,因为这对延迟更高的玩家不公平。部分解决方案是在消息上添加时间戳,但需要两件事: 能够信任客户。(我认为这是不可能的。) 可以测量的恒定延迟。对于可变延迟,您可以做些什么 很多游戏都使用UDP,这意味着消息可能会丢失。在这种情况下,

我正在寻找特定于游戏的网络设计和技巧。我知道一些问题,我对其中一些问题有一些部分的解决方案,但也有一些问题我还看不到。我认为没有明确的答案,但我会接受一个我非常喜欢的答案。我能想到4类问题


坏网络

客户端发送的消息需要一些时间才能到达服务器。服务器不能只处理FCF,因为这对延迟更高的玩家不公平。部分解决方案是在消息上添加时间戳,但需要两件事:

  • 能够信任客户。(我认为这是不可能的。)
  • 可以测量的恒定延迟。对于可变延迟,您可以做些什么
很多游戏都使用UDP,这意味着消息可能会丢失。在这种情况下,他们试图根据他们已有的信息来估计游戏状态。重新连接后,如何知道估计的状态是否正确

在MMO游戏中,服务器处理大量客户端。分配负载的最佳方式是什么?基于游戏中的位置?将一组客户端绑定到服务器?您能否避免通过服务器发送所有内容

玩家离开

在这种情况下,我看到了两种不同的行为。在大多数FPS游戏中,如果主持游戏的玩家(我猜他就是服务器)离开,其他人就不能玩了。在大多数RTS游戏中,如果有玩家离开,其他玩家可以在没有他的情况下继续玩。没有专用服务器怎么可能呢?每个人都知道整个州吗?他们是否以某种方式转移了服务器的角色

信息访问

下一个问题可以由专用服务器解决,但我很好奇,如果没有专用服务器,是否可以解决。在很多游戏中,玩家不应该知道游戏的全部状态。RTS中的战争迷雾和FPS中的墙壁就是很好的例子。但是,他们需要知道某个操作是否有效。(例如,你能从那里射我吗,或者你在地图的另一边。)在这种情况下,客户需要验证对未知状态的更改。这听起来像是可以通过巧妙地使用加密原语来解决的问题。有什么想法吗

作弊

在可信客户机环境中,上述一些问题很容易解决,但这是无法假设的。有没有解决方案可以在80%的普通用户-20%的骗子环境中工作?你真的能制作出一款反作弊软件吗(而且不需要像内核模块这样可笑的东西)


我确实读过这些问题和一些答案,但其他答案链接到不可用/受限内容。这是一个独立于平台/操作系统的问题,但也欢迎针对特定平台/操作系统的解决方案。

认为加密技术将解决此类问题是一个非常常见且非常严重的错误:客户机本身当然必须能够解密,因此它完全没有意义。你不是在增加安全性,你只是在增加模糊性(而将被破解)

作弊太过游戏化。有些游戏无法完全消除它(FPS中的aimbots),有些游戏如果不搞砸就根本不可能实现(基于服务器的回合游戏)


一般来说,像这样的网络问题与预测密切相关,预测充其量是一个非常复杂的主题,在关于它的文章中有很好的解释。

坏网络

具有高延迟的玩家应购买新调制解调器。我认为增加更多的延迟不是一个好主意,因为游戏中有一个人的连接不好。或者,如果你的意思是微小的延迟差异,谁在乎呢?如果你拒绝FCFS,你只会让事情变得更慢、更复杂

作弊:Aimbot和类似游戏

你真的能做一个有效的反作弊软件吗?不,你不能。你不知道他们是在运行你的程序还是另一个与你类似的程序

作弊:获取信息

如果你有一个可以信任的专用服务器的安全连接,那么作弊,比如看到的状态超过了允许的范围,应该是不可能的

在一些游戏中,加密技术可以防止作弊。像扑克这样的纸牌游戏,每个玩家都有机会“洗牌”。有关维基百科的详细信息:

理论上,使用RTS或FPS,您可以加密游戏状态的一部分。然后将它发送给每个人,只发送允许他们看到的部分或允许他们看到的部分的解密密钥。然而,我怀疑在2010年我们能否实时做到这一点

例如,如果我想确认你确实可能在位置B。那么我需要知道你从哪里来,以及你在那里的时间。但是如果你以前告诉过我,我知道一些我不被允许知道的事情。如果你事后告诉我,你可以告诉我任何你想让我相信的事情。你可以告诉我之前,加密,并给我解密密钥时,我需要验证它。这意味着,你必须用不同的加密密钥加密你的每一个动作。哎哟

如果你没有实现一个扑克网站,作弊也不会是你最大的问题

服务器不能只处理FCF,因为这对延迟更高的玩家不公平

是的,它可以。随着延迟的变化,准确猜测某人的延迟时间是不公平的

在这种情况下,他们试图根据他们已有的信息来估计游戏状态。重新连接后,如何知道估计的状态是否正确

服务器根本不需要猜测——它知道状态。客户端只需在连接关闭时进行猜测—当它备份时,它将被发送到新状态

在MMO游戏中,服务器处理大量数据