中央服务器如何知道如何将消息发送给另一个客户端?

中央服务器如何知道如何将消息发送给另一个客户端?

作为一个业余爱好者,我一直在学习使用请求函数我对中继的工作原理感到困惑。假设我在 DigitalOcean 上有一个中心化服务器,托管在公共地址上。我有两台机器想要建立 p2p 连接。我理解 NAT 会将我的私有 IP 转换为公共 IP,因此中心服务器会通过某种 UDP 状态获得我的公共 IP?我可以与我想要通信的另一个 NATed 主机建立相同的连接。所以,在我看来,中心化服务器现在对两个主机的两个 IP 都有某种状态?现在,我的问题是,

  1. 如果我想与其他 NATed 主机通信,我该如何发送第一个请求,因为我仍然不知道公共 IP?
  2. 中继服务器是否必须将另一个 NAT 主机的公共 IP 传达给我?
  3. 对方是否只需写入在另一端建立的 UDP 连接?因此它必须知道向另一台 NATed 主机开放了哪个端口?

答案1

一些答案:

如果我想与其他 NATed 主机通信,我该如何发送第一个请求,因为我仍然不知道公共 IP?

服务器永远不会主动访问任何客户端。客户端进行连接并通过已建立的连接返回答案。

如果两台计算机位于同一个路由器后面,则两台计算机将具有相同的公共 IP。路由器没有问题,也不需要区分两者,因为它只是连接的管道。

中继服务器是否必须将另一个 NAT 主机的公共 IP 传达给我?

任何中继服务器都不会修改其传递的消息中的源 IP 地址。服务器将知道原始 IP 地址,但无需知道所有中继计算机或网络的 IP 地址。

对方是否只需写入在另一端建立的 UDP 连接?因此它必须知道向另一台 NATed 主机开放了哪个端口?

源端口和目标端口在消息中指定,因此服务器知道它们。

请查看以下参考资料中的消息格式:

相关内容