解决NAT的最有效方法?

时间:2014-03-11 13:51:01

标签: java multithreading sockets networking

我试图建立一个分布式系统,每个节点都有自己的服务器和客户端。 让一个节点的服务器客户端为AServer和AClient,第二个节点为BServer和Bclient。

目前,操作是这样的,即AClient从任何空闲端口发送数据报包,例如Y,并且始终在特定端口上监听(使用AServer),例如X.BServer端始终在预定义端口回复数据包地址X

由于NAT创建的端口映射,这在NAT后面不起作用。由于BServer回复的NAT的X可能无法映射到正确的AClient 所以这些是我想到的解决这个问题的解决方案和问题,

任何新的想法都非常受欢迎,我希望听到所有这些想法的效率和易于实施。

  1. 解决方案AClient从AServer侦听的端口发送数据包。 BServer回复与Apacket相关的端口。 (我尝试了这一点,但它显示错误,我不确定UDP是完全双工还是处理套接字上的多次写入有多好)

  2. 使用jpcap创建一个Apacket,它将其源端口作为我正在侦听的端口(比如X),并通过不同的端口(比如Y)发送,这样当BServer回复Apacket端口,它到达我正在听的端口(X)。

  3. 创建一个侦听来自BServer的响应的AClient线程,然后将该响应发送给它自己,作为AServer侦听的端口的环回。 (发送环回数据包的效率如何?)

  4. 创建一个侦听来自BServer的响应的AClient线程,然后使用线程同步来防止对从AClient和AServer收到的信息中写入的对象进行多次同时写入。

  5. 我害怕答案是第4点。另外,如果需要,请随时询问任何代码!

0 个答案:

没有答案