我们有一个在 Ubuntu Server 20.04 上运行的 Minecraft 服务器。我们正在使用 GeyserMChttps://geysermc.org/ 这样我们的Minecraft服务器就可以跨平台了。 Java 版本通过端口 25565 连接,基岩版通过端口 19132 连接。我们已经在路由器上转发了这两个端口。我们能够通过端口 25565 进行连接,但无法通过 19132 进行连接。
我们将其放入 /etc/netplan/config.yaml 中:
network:
version: 2
renderer: networkd
ethernets:
enp3s25:
dhcp4: no
addresses: [192.168.254.25/24]
gateway4: 192.168.254.254
nameservers:
addresses: [8.8.8.8,8.8.4.4]
我们是否需要添加另一个网络接口才能使第二个端口正常工作?我对网络几乎一无所知...
答案1
在当今的互联网协议 (IP) 网络模型中,两台主机之间的通信主要有两种方式:传输控制协议 (TCP) 和用户数据报协议 (UDP)。还有更多,但我们在这里坚持基础知识。
TCP 和 UDP 之间最简单的区别是,TCP 在两台主机之间进行握手,确认它们已建立通信并已收到另一台主机发送的网络数据包。这提供了错误检查和纠正,因为接收主机将意识到数据包是否在途中丢失,并可以请求发送主机重新发送这些数据包。然而,这会带来性能损失,因为发送数据需要更多的计算和带宽。
另一方面,UDP 不验证数据包是否已收到(或按顺序收到)。相反,UDP 侧重于网络接口的性能;使用 UDP 可以用更少的计算工作接收更多数据。
这和我的世界有什么关系?自推出以来,Minecraft 服务器的 Java 版本一直通过 TCP 端口 25565 进行通信。但是,随着基岩版的发布,微软决定更改该服务器版本将使用的协议UDP协议端口 19132,最有可能希望利用 UDP 提供的性能优势。然而,这使得向公共连接开放服务器变得复杂,因为消费者路由器往往默认转发 TCP 端口,因为这是我们通过路由器转发的大多数应用程序将使用的端口。
因此,在路由器中将转发协议从 TCP 切换为 UDP 将允许客户端连接到 Minecraft 服务器面向基岩的一侧。