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

时间:2018-10-15 14:35:00

标签: android sockets unity3d server udp

我正在使用Unity进行多人Android游戏。对于服务器端,我使用python。没有登录系统或用户名。基本上,有一个婚介系统和房间。我从客户端到服务器发送包含房间密钥,用户位置等的JSON对象。房间密钥是唯一的,且为10位十六进制数字。我使用UDP套接字进行通信。

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

1 个答案:

答案 0 :(得分:1)

  

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

默认情况下,UDP本身不提供任何依赖,因此,如果您使用UDP并且需要某种依赖或保证数据到达,则需要在协议中实现确认逻辑,这样可以避免数据包复制。

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

  

2-我可以在tcp和udp连接中使用端口(例如8000),其中tcp接受用户/玩家进行配对,并在服务器就绪时为发送的客户端创建唯一的房间密钥。客户端获取密钥后,服务器将使用该房间密钥​​或在配对过程中决定哪个用户使用哪个房间密钥或使用udp。这种方法会使服务器变慢吗?

您可以使用应该在1024-49151范围内的用户端口。

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

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

希望有帮助。