我目前正在尝试通过互联网发送UDP消息,并且必须为端点A和B(它们都在NAT后面)设置防火墙。为此,我想使用STUN服务器进行打孔。
当A向STUN服务器创建请求时(例如,private:85.1.1.12:6000和public:173.194.78.127:19302),我得到85.1.1.12:6000作为响应。如果我要将来自相同原始配置(用于STUN请求的相同源IP和端口)的数据包发送到任何其他目标地址(目标端口保持不变),那么我的NAT将再次更改公共端口(从6000到其他任何事情)。我通过对两个不同的STUN服务器请求使用相同的地址端口配置(对两个请求都使用端口19302)找到了。
像这样,在向B发送数据包时,我无法知道我的NAT对转换的端口是什么(B因为没有设置防火墙而无法接收任何内容)。
这是因为我的NAT类型与打孔不兼容,还是我的概念错了?
谢谢!
答案 0 :(得分:4)
85.1.1.12:6000不是您的私人IP地址。它是您的NAT的公共/外部IP:端口。专用IP是您的PC /设备的接口地址。
从你的场景中我猜你有一个对称的NAT。在对称NAT中,每次将某些数据包发送到其他目标时,NAT的公共端口都会更改。如果您的目的地保持不变,那么NAT的公共IP:端口也保持不变。
对于其他类型的NAT,如果您的私有IP没有更改,那么您发送数据包的位置无关紧要,您的NAT公共IP:端口(在您的情况下为85.1.1.12:6000)将保持不变。
如果一方有**对称NAT而另一方有对称/ PRC NAT,则无法进行打孔。
**通过对称NAT我指的是对称NAT,它提供随机端口分配。
答案 1 :(得分:0)
如果双方都有对称的NAT(虽然遍历过程可能太不可靠而不值得麻烦),但从技术上讲, 。请阅读我的论文:
https://drive.google.com/file/d/0B1IimJ20gG0SY2NvaE4wRVVMbG8/view?usp=sharing
或者它引用的一篇论文: