我目前正在做一个需要穿越NAT的项目,但我似乎遇到了困难。 我有以下设置运行testing:
介绍服务器和客户端说明:
当A和B启动客户端时,客户端在端口6666上向外部地址R1(72.82.59.10)发送一个“HelloPacket”。
接收到一个HelloPacket后,服务器首先检查是否已经看到源地址和源端口标识符。
在客户端最初将HelloPacket发送到Intro服务器后,如果有已经将自己引入到服务器的对等端,则可以期望从服务器接收名为IntroPackets的数据包。 这些IntroPackets包含对等体的外部和内部IP /端口。
既然对等方知道现有的对等体,那么新连接的对等体就有责任将HelloPacket发送给现有的对等体,让他们知道它的存在。 这是我有麻烦的地方。
我没有足够的声望发布图像,但这里是我在设置的颜色的图表: http : //i.stack.imgur.com/7E5I8.png
这里是事件的顺序和我遇到的问题:
同侪A:72.82.59.10,1024
对等B:72.82.59.10,1025
第6步是我的devise失败的地方。 Peer A永远不会收到来自Peer B的HelloPacket。据我了解,当路由器收到一个目标端口为1024的数据包时,它将使用它的NAT映射到内部地址和端口。 它是否正确?
我试过运行一个外部程序,只是发送数据报到外部地址和端口映射到客户端A,但这些似乎并没有通过,所以我不认为这是一个超时问题。
我也知道我应该尝试连接到内部地址和端口,看看客户端是否在同一个NAT后面,并计划在未来实现这一点。
而且,在客户端和服务器代码中都使用Go-Back-N可靠地完成所有通信。
问题:
任何input是非常感谢! 谢谢!