在游戏中使用 UDP 套接字通信是否安全?



我正在使用Unity开发一款多人安卓游戏。对于服务器端,我使用python。没有登录系统或用户名。基本上,有一个匹配系统和房间。我将包含房间键,用户位置等的JSON对象从客户端发送到服务器。客房钥匙是唯一的,由 10 位十六进制数字组成。我使用 UDP 套接字进行通信。

  1. 仅使用 UDP 套接字玩游戏是否安全?客户端已经有源代码,可以轻松更改它。因此,他们可以更改从客户端到服务器的数据。我是否需要实现一种算法来更安全地防止黑客或作弊?任何人都可以更改apk文件并破坏此游戏中的所有内容吗?
  2. 我可以将端口(例如 8000(用于 TCP 和 UDP 连接,其中 TCP 接受用户/玩家进行匹配,并在服务器准备就绪时创建一个唯一的房间密钥以发送客户端?客户端获得密钥后,服务器将决定哪个房间中的哪个用户使用该房间密钥或使用UDP,即使在匹配时也是如此。此方法会使服务器变慢吗?

1-仅使用udp套接字进行游戏是否安全。客户端已经有源代码,可以轻松更改它。因此,他们可以更改从客户端到服务器的数据。我是否需要实施一种算法来更安全地免受黑客攻击或作弊?任何人都可以更改apk文件并破坏此游戏中的所有内容吗?

UDP 本身默认不会给您任何依赖,因此如果您使用 UDP 并且需要对数据到达的一些依赖或保证,则需要在协议中实现确认逻辑,这样就可以避免数据包复制。

关于安全性,是的,您将需要实现握手,压缩和加密逻辑,并且需要使用校验和算法来确保要解析的数据不会损坏。 您还需要在客户端上实现一些内存管理逻辑,以使客户端和服务器之间的通信不易通过内存转储进行映射,以避免通过内存覆盖作弊。

2-我可以将端口(例如8000(用于TCP和udp连接,其中tcp接受用户/播放器进行匹配,并在服务器准备就绪时为发送的客户端创建唯一的房间密钥。客户端获得密钥后,服务器将决定哪个房间中的哪个用户使用该房间密钥或使用udp,甚至在匹配时也是如此。这种方法会使服务器变慢吗?

您可以使用范围为 1024-49151 的用户端口。

大多数伟大的游戏网络机制都同时使用 TCP 和 UDP 以及一些限制技术来保持客户端和服务器之间的同步。对你来说,一个很好的阅读应该是这篇文章:

https://gafferongames.com/post/udp_vs_tcp/

希望对您有所帮助。

最新更新