作为一个业余爱好者,我一直在学习使用请求函数我对中继的工作原理感到困惑。假设我在 DigitalOcean 上有一个中心化服务器,托管在公共地址上。我有两台机器想要建立 p2p 连接。我理解 NAT 会将我的私有 IP 转换为公共 IP,因此中心服务器会通过某种 UDP 状态获得我的公共 IP?我可以与我想要通信的另一个 NATed 主机建立相同的连接。所以,在我看来,中心化服务器现在对两个主机的两个 IP 都有某种状态?现在,我的问题是,
- 如果我想与其他 NATed 主机通信,我该如何发送第一个请求,因为我仍然不知道公共 IP?
- 中继服务器是否必须将另一个 NAT 主机的公共 IP 传达给我?
- 对方是否只需写入在另一端建立的 UDP 连接?因此它必须知道向另一台 NATed 主机开放了哪个端口?
答案1
一些答案:
如果我想与其他 NATed 主机通信,我该如何发送第一个请求,因为我仍然不知道公共 IP?
服务器永远不会主动访问任何客户端。客户端进行连接并通过已建立的连接返回答案。
如果两台计算机位于同一个路由器后面,则两台计算机将具有相同的公共 IP。路由器没有问题,也不需要区分两者,因为它只是连接的管道。
中继服务器是否必须将另一个 NAT 主机的公共 IP 传达给我?
任何中继服务器都不会修改其传递的消息中的源 IP 地址。服务器将知道原始 IP 地址,但无需知道所有中继计算机或网络的 IP 地址。
对方是否只需写入在另一端建立的 UDP 连接?因此它必须知道向另一台 NATed 主机开放了哪个端口?
源端口和目标端口在消息中指定,因此服务器知道它们。
请查看以下参考资料中的消息格式: