1

我有一个混合架构,其中 A 是试图从 B 请求内容的客户端,B 是可能位于 NAT 后面的服务器(尽管不一定)。S 是一个服务器,充当 A 和 B 之间的中间人,以下列方式使用打孔:

A联系S并说我想从B那里得到一些东西。S给了A B最后知道的IP地址和端口,A开始尝试联系B。同时,S给了B A的IP地址和端口,B开始尝试联系 A。

S不会充当中继服务器;相互连接后,所有通信都将在 A 和 B 之间直接连接。如果无法直接连接,则连接将失败。UDP和TCP都有这个问题。

我的问题是,让 S 与 B 的 IP 地址和端口保持同步的最有效方法是什么,以便任何数量的 As 可以随时连接到 B。我还希望解决方案能够处理这样一种情况,如果 B 背后的 NAT 与端口混淆(例如将它们增加 1),我将能够“猜测”端口的实际情况是。

我想到的解决方案(但我并不完全满意):

通过每 X 秒从 B 向 S 发送一个请求,用 B 的 IP 地址和端口更新 S。我的问题是,如果 X 太高,S 将没有 B 的正确信息,如果太低,则会对 B 和 S 施加开销。我怀疑这最终会成为最终答案,并且诀窍是为 X 找到合适的值。

4

0 回答 0