对称NAT穿越问题?

huziwu 2011-04-27 08:43:00
非对称的已经测试通过了,对称的该怎么穿越呢?
通过服务器(有公网IP)进行中转是不可行的,因为我要实现的功能是P2P的视频传输。

我要实现的功能为:
视频提供端P:通过3g无线上网卡上网(对NAT类型测试结果为:对称NAT)
视频接收端R:上网方式不可控,即什么类型都有可能(公网IP,对称NAT、非对称NAT)
服务器S:具有公网IP,用于P与R的登录和协助打洞。(对于P与R都为对称NAT时打洞失败)
说明一下:可能存在同时多对P2R的连接,通过服务器进行中转的话,怕服务器负载不了。

最好能给出例子,对于网络编程刚接触,谢谢。(对于非对称NAT打洞,也是通过参考高手的例子才实现的)
...全文
1709 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
klin99 2013-12-16
  • 打赏
  • 举报
回复
引用 18 楼 xpdavis 的回复:
[Quote=引用 17 楼 huziwu 的回复:] To 满衣兄: 公网IP的服务器,我这边有。 To SuperDay: 是不是说两对称NAT之间的客户端不能穿越,那么也就是说他们之间不能实现P2P呢? [/Quote] 这是肯定一定以及确定的,不要在这上面白费时间了。
这是真的吗,你研究过?
长江一01号 2013-12-10
  • 打赏
  • 举报
回复
我也研究了好长时间这个对称NAT穿越的问题了,目前已经能穿越一边是对称型另一边是全克隆( Full Cone) 型的穿越。就是由对称型的先发探测数据包给克隆型的,克隆型收到后就回响应就能穿越。 两边都是对称型的我想了有两种办法还没测试过, 一,就是Joesn_Y说的这种,两边同时向对方的外网地址上从1000-65535所有端口都发探测包,撞上就能穿越,但是这种方法对于那种,连出口IP都经常换的对称型NAT是不管用的。 二,公司发出去的在网终端很多,总服务器会收集所有终端的NAT类型,在线状态,如果遇到两边都是对称NAT,就在服务器上搜索其中一个在线的能够担任类似TRUN服务器转发角色的终端。让其替我们转发,我觉得skype这样的大型P2P软件应该是这样实现的。
Joesn_Y 2013-09-01
  • 打赏
  • 举报
回复
我也在搞类似的东西,关于symmetric nat穿越我看到过有人提出这样的想法: 两方都是对称型nat的时候,首先获取对方的公网ip地址,然后A向B某几个端口发送UDP数据,然后B向A的0-65535端口发送UDP数据,A收到之后就回复B,道路就通了。。。但是这种方法从哪个方面来看都是下策。 最好能保证两方某一方是完全锥型或者限制锥型吧,我用手机做热点电脑跑stun客户端,连上去免费STUN服务器得到的结果是symmetric nat,貌似手机GPRS网络都是对称型的,所以两台手机之间貌似是不能进行p2p连接的。。。 stun服务器有免费的,turn服务器就不知到了,貌似google有个叫做numb的免费TURN服务器,要注册账户的,没用过。 如果是异步通讯的话公网服务器可以胜任吧,楼主看下能不能做成异步的吧。 楼主有好方法的话记住回复啊!
CyberLogix 2013-05-12
  • 打赏
  • 举报
回复
打洞UDP打洞
rotus 2013-05-11
  • 打赏
  • 举报
回复
有结论么,这种对称NAT 穿透 真没法解决(除了服务器转发)? Skype, QQLive之类是咋整的?
ITailor 2013-04-22
  • 打赏
  • 举报
回复
引用 29 楼 loskill 的回复:
好像可以使用ip欺骗技术过对称NAT,具体原理是,a,b两台内网的电脑,s是外网的服务器,a主动连接s,nat会产生一个洞,这个洞的信息包括了a的内外网地址和端口,已经s的地址和端口,如果从网络上过来的数据包包含了s的地址和端口(比如s发一个数据包给a),就可以从这个洞经过到达a,所以我们把b电脑发出的数据 包伪装成s发出的数据包,然后从这个洞经过到达a. ……
这样可以实现b对a发数据,但是a想给b发不是发给s了吗
loskill 2012-05-28
  • 打赏
  • 举报
回复
好像可以使用ip欺骗技术过对称NAT,具体原理是,a,b两台内网的电脑,s是外网的服务器,a主动连接s,nat会产生一个洞,这个洞的信息包括了a的内外网地址和端口,已经s的地址和端口,如果从网络上过来的数据包包含了s的地址和端口(比如s发一个数据包给a),就可以从这个洞经过到达a,所以我们把b电脑发出的数据 包伪装成s发出的数据包,然后从这个洞经过到达a.
huziwu 2011-05-07
  • 打赏
  • 举报
回复
怎么没下文了,难道没有做过对“对称NAT”猜测端口穿越的吗?各位大大快来支招。
huziwu 2011-05-05
  • 打赏
  • 举报
回复
哪位大大给介绍一下“对称NAT”通过猜测端口,穿越的方法流程。
下面是我自己的理解,请指正:
客户端A、客户端B、服务器S(两个监控线程,端口号分别为4000,8000)

假设先启动A:
1.A连接S 4000端口
2.S获取A的外网IPA与端口PA1,记录并传回给A
3.A bind(PA1),并启动对PA1监听,并马上让A再连接S 8000端口。//此处用不用Bind(PA1)?
4.S再次记录A的外网端口PA2。
5.从S端知道B登录了,执行B的2~3步聚

启动B:
1.先执行与A一样的1~4,S记录外网IPB与端口为PB1、PB2
2.从S获得IPA、PA1、PA2
3.当PA2>PA1时//否则就不知怎么整了
for(int i=PA1+1;i<=PA2;i++)
if(connect(IPA,i))
{
IsConnect=true; break;//连接成功
}
huziwu 2011-05-03
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 luchao002 的回复:]
非对称的好像使用端口重用可以实现打洞穿越,对称的国外好像有篇论提及了几种打洞方式,记不得太清了,好像是利用TCP三次握手过程伪造“合法”连接。
[/Quote]
利用TCP三次握手过程伪造“合法”连接,是什么样的一个过程,有没有相关资料可以参考呢?
huziwu 2011-05-03
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 wulala789 的回复:]
利用在公网上的"视频接收端R:"转发,不一定要服务器转发.
另:http://blog.csdn.net/renzhaoqiang/archive/2009/04/23/4103620.aspx
中国知网搜索 "nat 穿越",优秀硕士论文
verycd low2low
[/Quote]
文章看不太懂,有看懂的给简单总结一下吗?
走走刀口 2011-05-01
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 xpdavis 的回复:]
非对称NAT当然可以穿透,楼主的问题是对称NAT的穿透,楼上是看错还是码错字了?
[/Quote]
我前面在说非对称,后面一句说的是对称的!
huziwu 2011-04-30
  • 打赏
  • 举报
回复
To 满衣兄:
公网IP的服务器,我这边有。

To SuperDay:
是不是说两对称NAT之间的客户端不能穿越,那么也就是说他们之间不能实现P2P呢?
wulala789 2011-04-30
  • 打赏
  • 举报
回复
利用在公网上的"视频接收端R:"转发,不一定要服务器转发.
另:http://blog.csdn.net/renzhaoqiang/archive/2009/04/23/4103620.aspx
中国知网搜索 "nat 穿越",优秀硕士论文
verycd low2low
铖邑 2011-04-30
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 luchao002 的回复:]
非对称的好像使用端口重用可以实现打洞穿越,对称的国外好像有篇论提及了几种打洞方式,记不得太清了,好像是利用TCP三次握手过程伪造“合法”连接。
[/Quote]

非对称NAT当然可以穿透,楼主的问题是对称NAT的穿透,楼上是看错还是码错字了?
走走刀口 2011-04-30
  • 打赏
  • 举报
回复
非对称的好像使用端口重用可以实现打洞穿越,对称的国外好像有篇论提及了几种打洞方式,记不得太清了,好像是利用TCP三次握手过程伪造“合法”连接。
铖邑 2011-04-30
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 huziwu 的回复:]
To 满衣兄:
公网IP的服务器,我这边有。

To SuperDay:
是不是说两对称NAT之间的客户端不能穿越,那么也就是说他们之间不能实现P2P呢?
[/Quote]


这是肯定一定以及确定的,不要在这上面白费时间了。
huziwu 2011-04-29
  • 打赏
  • 举报
回复
现在对NAT类型的测试也没有现成工具,网上给出检测NAT类型的代码,但是需要一个具有两个公网IP的服务器来协助检测,具有两个公网IP的服务器我是找不到了,不知谁有现成的测试工具没有?或者通过网页测试也行。

我猜测我的两个客户端所在NAT为对称NAT,是经过多种情况进行测试的。
测试情况:
在服务器端运行:一个服务软件S+一个客户端A
在一条电信宽带两台机子上分别运行:一个客户端B1、B2
在另一条电信宽带两台机子上分别运行:一个客户端C1、C2(我所用的宽带线)
在通过3G无线上网卡上网的机子上运行:一个客户端D
测试结果:
A、B1、B2能所有客户端进行点对点连接,即能与C1、C2、D之间进行点对点
C1、C2、D之间不能进行点对点连接
所以我猜想我所用的宽带(C1、C2)与3G无线上网卡(D)所经过的NAT为对称NAT,

说明:所有测试有用机子的防火墙都是在关闭状态下进行的。
铖邑 2011-04-29
  • 打赏
  • 举报
回复
对称NAT是不能穿透的,不要再做无用功啦。如果只有一个客户端是对称NAT,可由该客户端来主动连接非对称NAT之后的客户端;如果两个客户端都处于对称NAT之后,就无法之间通信,必须通过服务器来中转
CppCoder 2011-04-29
  • 打赏
  • 举报
回复
学习
========
加载更多回复(12)
NAT穿越服务器概要设计 编写目的 多媒体会话信令协议是在准备建立媒体流传输的代理之间交换信息的协议,例如SIP、RTSP、H.323等。媒体流与信令流截然不同,它们所采用的网络通道也不一致。由于协议自身设计上的原因,使得媒体流无法直接穿透网络地址转换/防火墙(NAT/FW)。因为它们生存期的目标只是为了建立一个在信息中携带IP地址的分组流,这在遇到NAT/FW 时会带来许多问题。而且这些协议的目标是通过建立P2P(Peer to Peer)媒体流以减小时延,而协议本身很多方面却与NAT存在兼容性问题,这也是穿透 NAT/FW的困难所在。 而NAT仍是解决当前公用IP地址紧缺和网络安全问题的最有力手段,它主要有四种类型:完全锥型NAT(Full Cone NAT),地址限制锥型NAT (Address Restricted Cone NAT),端口限制锥型NAT (Port Restricted Cone NAT),对称NAT (Symmetric NAT)。前三种NAT,映射与目的地址无关,只要源地址相同,映射就相同,而对称NAT的映射则同时关联源地址和目的地址,所以穿透问题最为复杂。 不少方案已经被应用于解决穿越NAT问题,例如:ALGs(Application Layer Gateways)、Middlebox Control Protocol、STUN (Simple Traversal of UDP through NAT)、TURN(Traversal Using Relay NAT)、ICE(Interactive Connectivity Establishment)、RSIP(Realm Specific IP)、symmetric RTP等。 本文档描述基于STUN/TURN协议解决穿越NATNAT穿越服务器(Nat Traversal Server)的概要设计说明书。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧