我目前正在尝试从头开始为Unity构建网络层。目前我正在使用Node.js为服务器和客户端测试通过UDP的通信。但是我想实现的语言对我要求的内容无关紧要。
将Node.js用于服务器和客户端的当前方法非常基本。我只是将一个数据包从客户端发送到我的服务器,而客户端和服务器不在同一个本地网络中。两者都在路由器后面,因此也在NAT后面。
然后,服务器会回复从客户端发送的UDP数据包中收到的IP和端口的答案。
我很担心客户端上有关在客户端计算机和路由器上打开端口的安全性。到目前为止,我认为我不需要做任何事情来保护客户端免受攻击者或其他任何可以对我的应用程序使用的端口做某事的事情。以下假设说明为什么我认为我不需要做任何事来保护客户。
服务器正在设置回调。
服务器开始侦听特定端口,该端口也会转发到路由器内的服务器计算机。
服务器现在将在收到UDP消息时调用回调。然后,服务器将UDP消息发送到通过收到的消息获得的客户端的地址和端口。
客户端正在设置回调。
客户端开始侦听端口0,这对于Node.js的dgram
来说意味着:
对于UDP套接字,使dgram.Socket在命名端口和可选地址上侦听数据报消息。如果未指定port或为0,则操作系统将尝试绑定到随机端口。 - https://nodejs.org/api/dgram.html#dgram_socket_bind_port_address_callback
了解服务器地址和端口的客户端启动向服务器发送UDP消息的过程。
客户端路由器收到UDP消息。 NAT创建一个随机端口(在公共端使用)并将其映射到客户端(本地)地址和端口。
客户端路由器将包含公共地址和NAT生成端口的UDP消息发送到服务器。
服务器收到消息并调用3中描述的回调。因此服务器发送到公共地址和NAT生成的客户端端口。
与服务器路由器和服务器本地地址和端口相同。
与服务器路由器相同8.
客户端收到服务器的UDP消息,并调用处理消息内容的回调。
我的假设是否正确,我真的不需要保护客户免受任何会以任何方式损害客户的攻击?