我有一个混合架构,其中A是尝试从B请求内容的客户端,B是可能在NAT后面的服务器(尽管不一定)。 S是一个服务器,用作A和B之间以下列方式使用打孔的过程:
联系人S并说我希望从B.获得AB的最后已知IP地址和端口,并且A开始尝试联系B.同时,S给出BA的IP地址和端口,B开始尝试联系A.
S NOT 充当中继服务器;在相互连接之后,所有通信都将在A和B之间的直接连接中进行。如果它们无法直接连接,则连接将失败。我有UDP和TCP这个问题。
我的问题是,保持S与B的IP地址和端口保持同步的最有效方法是什么,这样任何数量的As都可以随时连接到B.我也希望解决方案能够处理这样一种情况:如果B背后的NAT与端口混淆(例如将它们递增1),我将能够“猜测”实际端口是什么是
我想到的解决方案(但我并不完全满意):
通过每隔X秒从B向S发送请求,用B的IP地址和端口更新S.我的问题是,如果X太高,S将没有B的正确信息,如果它太低,它将对B和S施加开销。我怀疑这最终将成为最终答案,并且诀窍是为X找到合适的值。