cwchen0422 发表于 2013-10-11 17:31

[新手求教] UDP 打洞 没成功!

本帖最后由 cwchen0422 于 2013-10-11 17:32 编辑

网络拓扑

A - NAT A-- Server -- NAT B - B

A,B 为分别得内网主机。 Server为公司的主机。
NAT A , NAT B 为两条电信通路, 但是走不同的线路通往Server。

A 为 100.100.100.100:6666   穿透 NAT A 之后为58.61.99.4:4000
B 为 200.200.200.200:6666   穿透 NAT B 之后为183.39.189.98:4000

1)A, B 均为绑定本地的PORT,全局的socketfd,然后登陆Server。
2)交换彼此的NAT A / NAT B的地址信息。
3)A尝试给NAT B 发信息......
4)告诉Server 要 B 给 A 发信息............ B正确收到 A的NAT A信息,并且发送....
5)A 再次尝试给NAT B发信息.........

现在
   5) 这步A 发出去信息   但是B死活收不到信息。

然后
    我再次执行 3-5 这三个步骤, 发现NAT A 居然变了 公网之后的PORT变了..........(不是绑定了就不变的么, 再次执行的时间间隔不久 5s 而已)。

代码跟网上大体上相同........... 不知道为何会这样, 求大神指教!

井蛙夏虫 发表于 2013-10-11 18:48

回复 1# cwchen0422
nat分为Symmetic和Cone,看你的描述可能是Symmetic,这种nat最好放弃打洞
http://blog.csdn.net/jq0123/article/details/840302
你可以到linux系统管理模块问问


   

cwchen0422 发表于 2013-10-12 09:32

回复 2# 井蛙夏虫

谢谢回复! 具体是什么样子的NAT 我不是很清楚,

我目前NAT A 这边是公司内网,上面设有防火墙, 但是做了端口映射,预留的端口做的,
NAT B 这边是普通的家庭网络,直接接路由器,猫拨号上网!




   

井蛙夏虫 发表于 2013-10-12 12:39

回复 3# cwchen0422
你的服务器的iptables怎样设置端口映射的


   

cwchen0422 发表于 2013-10-12 14:25

回复 4# 井蛙夏虫

服务器是windows主机, 写的是VC程序。

现在我在A B两个客户端加了跟服务器的心跳连接,能保持住port不变。


现在是:(不知道是不是电信通路的问题)
NAT A 得到的ip:port 在B主机上ping不通。
NAT B得到的ip:port在A主机上能ping通。


   

cwchen0422 发表于 2013-10-15 16:57

最近研究发现同样是A这边的主机绑定本地相同的port 去连接服务器(服务器开两个程序),分别连接出现了NAT A之后是不同的port!(网上有说这种是对称型NAT? 不知道是不是真的)

cwchen0422 发表于 2013-10-15 17:33

摘抄H3C官网上的介绍:
Symmetric NAT
对称NAT,所有从同一个内网IP和端口号发送到一个特定的目的IP和端口号的请求,都会被映射到同一个IP和端口号。如果同一台主机使用相同的源地址和端口号发送包,但是发往不同的目的地,NAT将会使用不同的映射。此外,只有收到数据的外网主机才可以反过来向内网主机发送包。

我做了一次测试:
本地A主机 做两个程序clientA clientB 都是绑定同样的端口2000, 服务器开启两个程序SA, SB分别绑定端口4000和5000,
然后clientA clientB分别连接SA,SB, 发现穿透NAT之后两个session的端口不一样!
是不是表明我现在A主机所处于的NAT是对称型的NAT?
要是确实是对称型NAT,我就死心了! 因为公司服务器在北京,测试client在深圳,接2条电信通路出去。
页: [1]
查看完整版本: [新手求教] UDP 打洞 没成功!