Chinaunix

标题: 一个UDP穿透NAT的问题 [打印本页]

作者: l.darkfire    时间: 2006-07-13 12:43
标题: 一个UDP穿透NAT的问题
最近写了一个很小的程序来实现UDP穿透NAT,结果如下:

1. 两台分布在不同内网的机器,可以穿透。(但UDP包好像可能被防火墙挡住)

2. 一台机器在内网,一台机器拥有外网地址,可以穿透。

现在的问题是,如果两台机器处在同一内网中,似乎就不能连接了。这是为什么?
作者: unixlanser    时间: 2006-07-13 13:05
方便把你的代码贴出来研究研究吗
作者: l.darkfire    时间: 2006-07-13 13:36
不太方便,大致的原理是:两台机器,A和B,发UDP包给一台拥有公网地址的服务器,这样服务器就能知道它们的公网地址了,将两者的公网地址再发给对方,A和B收到对方的公网地址后,向对方不停的发包(其中有些包会被对方的NAT设备丢弃),然后接受对方的消息,这样就能穿透了。

大致是这样
作者: l.darkfire    时间: 2006-07-13 13:37
贴一个原理的帖子:
http://www.thysea.com/lb/cgi-bin ... c=1484&show=300
作者: elvispl    时间: 2006-07-13 14:55
两台都在内网应该可以连接啊
要不sip电话不就完了
sip电话原理不也一样的嘛.通过在服务器注册自己的地址.当有人呼叫时.服务器就会转发信令.有的服务器就返回对方地址.主叫自己去连接.这样就可以穿透了
作者: l.darkfire    时间: 2006-07-13 15:35
P2P的话,假设A和B在不同的内网,A和B获得对方的公网地址后,A或B单方面的发包,对方是收不到的。

我将两个程序运行在同一内网,它们还是先通过拥有公网地址的服务端告知对方自己的IP和端口,注意此时对方获得的IP是公网IP,即NAT设备映射后的IP,然后向对方发包,接受,好像是失败的。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2