`
bluky999
  • 浏览: 720281 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

网络穿透 与 NAT类型 及 STUN TURN 协议

阅读更多

 

 

网络穿透 与 NAT类型 及 STUN TURN 协议

 

网络上已经有很多很多关于NAT类型与穿透的文章了,所以就不重复写了,稍作整理然后加一些自己的评注与总结。

 

同时笔者也提供了一个小工具用于检测你所在网络的NAT类型,源文件是有c程序版本和python脚本两种,可以从  https://github.com/node/turn-client 获取,如果你是windows,那么还可以本文末尾的附件下载预编译打包好的.exe文件。  

 

 

NAT话题,主要涉及:

- NAT 与 防火墙

- NAT 基本类型 与 原理

- NAT 穿透方式及原理

- 基于NAT穿透的网络应用

- NAT穿透相关的工具和开源项目

 

焦点集中在NAT类型以及对应的穿透方式,下面分别收录几篇文章做进一步了解。

 

 

1 网络 与 NAT 和 防火墙 

 

 

公网/内网IP分配及NAT地址转换协议  

2007-12-04 20:32:48

http://yanshiwen2007.blog.163.com/blog/static/38688705200711483248456/ 

 

 

防火墙和NAT

From: 百度文库

http://wenku.baidu.com/view/1c5ccba10029bd64783e2c94.html

 

 

NAT的四种类型及类型检测   

Posted on 2010-12-16 19:30 bw_0927 

http://www.cnblogs.com/my_life/articles/1908552.html

 

 

多媒体通讯中防火墙和NAT问题的解决

2002-12-26 9:57:00  信息源:赛迪网 作者:袁帅

http://it.rising.com.cn/newSite/Channels/Safety/SafeDefend/Defender/200212/26-095709141.htm

 

Linux下的NAT及防火墙的混合应用

时间:2003-12-29 08:00 来源:BitsCN.com 

http://www.bitscn.com/os/linux/200604/7934.html

 

 

2 NAT 穿透

 

NAT穿透

From: wikipedia 维基百科

http://zh.wikipedia.org/wiki/NAT%E7%A9%BF%E8%B6%8A

 

 

NAT的完全分析及其UDP穿透的完全解决方案

2006-07-18

http://zongtongyi.blogbus.com/logs/2857757.html

 

相关的其他文章:http://zongtongyi.blogbus.com/tag/%E7%A9%BF%E9%80%8FNAT/

 

 

 

NAT穿透

2010-05-09 12:15 

http://blog.csdn.net/feiren127/article/details/5571636

 

 

 

NAT穿透之NAT类型检测

发布时间:2011-01-01 12:07文章来源:黑客防线文章作者:张东辉 

http://www.yunsec.net/a/special/wlgf/wlrq/2011/0101/7820.html

 

 

P2P网络“自由”穿越NAT的“秘密”

Posted on 2008-10-12 14:05 chen eric 

http://www.cnblogs.com/lovko/archive/2008/10/12/1309094.html

 

 

 

Symmetric NAT Traversal

http://www.dialogic.com/webhelp/bordernet2020/1.0.0/webhelp/nat_traversal.htm

 

 

3 STUN 和 TURN 协议 

 

旧版本STUN http://www.ietf.org/rfc/rfc3489.txt

 

新版本STUN http://www.ietf.org/rfc/rfc5389.txt

TURN       http://www.ietf.org/rfc/rfc5766.txt

 

 

Symmetric NAT Traversal using STUN

http://tools.ietf.org/id/draft-takeda-symmetric-nat-traversal-00.txt

 

PS: 此协议是草稿,主要是关于基于 STUN 来做 Symmetric 类型的NAT穿透;但这不是100%可以成功的,有一定的概率。

 

PS: 新旧STUN协议及TURN协议在实现和使用上的差异?

    久版的STUN主要是基于判断NAT类型的,而新版本的STUN以及其扩展的TURN协议,摒弃了原来的思路,以获得一个可靠可用的通信地址和端口为目标;

    新版的STUN重在获得改地址,而TURN则提供了基于已知地址的数据传递协议规范。所以实践中,如果STUN告诉我们地址后,可以P2P,则优先P2P,否则TURN中转。

    新旧版本的STUN协议完全不同,协议设计也不同,无法兼容;新版的STUN则和TURN关系密切,后者是基于前者扩展设计的,大多数服务端也兼容二者。

 

    

4 工具与开源项目

 

NAT 类型检测

 

NAT Check:Check Your Network Address Translator for Compatibility with Peer-to-Peer Protocols

http://midcom-p2p.sourceforge.net/

 

 

 

VC++实现NAT穿透之NAT类型检测

http://blog.csdn.net/yincheng01/article/details/4486359

 

 

 

- STUN 

 

stund 

http://sourceforge.net/projects/stun 

 

 

pystun

http://code.google.com/p/pystun/

 

stunclient

http://code.google.com/p/stunclient/source/browse/#svn%2Ftrunk%2Fstun

 

 

- STUN & TURN

 

turnserver

http://turnserver.sourceforge.net/  (http://www.turnserver.org/)

 

 

turn-client

https://github.com/node/turn-client

 

 

PS: 下载按时时请注意,以上工具和项目中大多使用标准C和python(cpython) .

 

 

 

STUNMAN 

http://www.stunprotocol.org/   ,  https://github.com/jselbie/stunserver 

 

Features:

  Compliant with the latest RFCs including 5389, 5769, and 5780. Also includes backwards compatibility for RFC 3489.

 

  Supports both UDP and TCP on both IPv4 and IPv6.

 

  Client test app provided.

 

STUNMAN 使用C++开发,实现了新版的STUN和TURN协议,同时兼容处理旧版的STUN协议请求。

 

 

 

Java STUN/TURN 相关:

 

jstun 

http://jstun.javawi.de/

 

stung4j

https://stun4j.dev.java.net/

 

 

5 总结 

 

- Q: 是否所有NAT都可以穿透? 

  A: 不是!简单说, 只要是cone类型的NAT,则可以穿透,100%地穿透,

     即 full cone NAT, address restricted cone NAT 和 port restricted cone NAT 都可以穿透;

     而 symmetric NAT则不能保证100%穿透,也就是说不可靠无法依赖穿透symmetric NAT来通信,必须提供备选方式如代理中转等。

 

- Q: 对于无法穿透的NAT该怎么办? 

  A: 既然有STUN和TURN甚至SOCK5等协议,那么在确定无法穿透或者不能确定穿透时,选择服务器中转是上策。

 

- Q: 实践中哪种类型的NAT更多一些?

  A: 有时候应用只需要面对大多数用户即可,无需严格考虑所有情况,则需要参考实践中的NAT类型比例;

     这个数据我没有实际调查过,但结合网络上提供的资料,目前大多数NAT都属于cone的,不是symmetric的;但典型的sysmmetric仍然存在,比如可能有:

     - 安全要求较高的内部专属网/局域网

     - 互联网与EGDE网络之间,互联网与3G网之间

 

 

 

- Q: Symmetric NAT 的穿透状况到底如何?

  A: 可以穿透,但不是100%成功;那么如何提高成功率呢? http://www.goto.info.waseda.ac.jp/~wei/file/wei-apan-v10.pdf 

     这篇很早的文章显示他们的办法可以达到99%的NAT穿透率,高于当时SKYPE的46% 。其中的难点,主要在于不断变化的端口映射,导致mapping address无法稳定下来用于两个peer的通信。

 

 

6 辅助工具

 

在线NAT类型检测

nattest.net.in.tum.de

 

 

从外部测试本地端口是否可访问

http://canyouseeme.org/ 

 

 

 

注: 附件里上传了pystun的脚本文件。

0
0
分享到:
评论
3 楼 bluky999 2013-05-08  
bluky999 写道
文章:  STUN和TURN技术浅析

http://www.h3c.com.cn/MiniSite/Technology_Circle/Net_Reptile/The_Five/Home/Catalog/201206/747038_97665_0.htm 


NAT专题
http://www.h3c.com.cn/MiniSite/Technology_Circle/Net_Reptile/The_Five/
2 楼 bluky999 2013-05-08  
文章:  STUN和TURN技术浅析

http://www.h3c.com.cn/MiniSite/Technology_Circle/Net_Reptile/The_Five/Home/Catalog/201206/747038_97665_0.htm 
1 楼 bluky999 2013-05-08  
另一个 TURNSERVER 的开源项目

https://code.google.com/p/rfc5766-turn-server/ 


The TURN Server is a VoIP media traffic NAT traversal server and gateway. It can be used as a general-purpose network traffic TURN server/gateway, too.

This implementation also includes some extra features. Supported RFCs:

TURN specs:

RFC 5766 - base TURN specs
RFC 6062 - TCP relaying TURN extension
RFC 6156 - IPv6 extension for TURN
Experimental DTLS support as client protocol.
STUN specs:

RFC 5389 - base "new" STUN specs
RFC 5769 - test vectors for STUN protocol testing
RFC 5780 - NAT behavior discovery support

相关推荐

    NAT探测 使用stun协议 java和python版本

    在开发P2P应用时,NAT探测和STUN协议是必不可少的组成部分,它们使得内部网络的设备能够有效地与其他网络节点进行通信,促进了互联网上各种分布式应用的发展,如在线游戏、视频会议和文件共享等。理解并掌握这些技术...

    stun/turn 客户端测试

    STUN (Session Traversal Utilities for NAT) 和 TURN (Traversal Using Relays around NAT) 是网络通信中的两种协议,主要用于解决NAT(网络地址转换)环境下的音视频通信问题。它们是实时通信(如VoIP、视频会议)...

    基于STUN协议的NAT穿透技术通讯效率优化研究

    本文提出了一种基于STUN协议的NAT穿透优化策略,通过对NAT类型的重新分类、改进NAT类型检测方法、引入网络状态检测算法以及优化通信流程等措施,有效解决了传统NAT穿透技术中存在的问题。未来的研究方向可以进一步...

    NAT类型检测相关协议

    STUN(Session Traversal Utilities for NAT)是一种用于检测和解决NAT穿越问题的协议,它允许内网中的设备通过NAT与外部网络进行通信。本篇文章将详细介绍NAT类型检测的相关协议,特别是STUN协议及其发展历程。 ...

    STUN和TURN简介

    TURN(Traversal Using Relays around NAT,NAT穿越使用中继)是在STUN基础上的扩展,当两个内网设备无法直接通信(例如,因为他们的NAT类型不兼容)时,TURN服务器作为中继,转发数据包以确保通信成功。 ICE...

    免费STUN服务器,NAT穿越

    NAT穿透的另一种方法是TURN(Traversal Using Relays around NAT,NAT穿越中继),它在STUN失败时提供更强大的解决方案,允许设备通过服务器作为中继进行通信。虽然TURN服务器比STUN服务器更资源密集,但可以处理更...

    stun协议抓包.rar

    Turn(Traversal Using Relays around NAT,NAT穿越中继)协议则是在STUN无法解决NAT穿透问题时的一种备用方案。当两台设备之间的直接通信因为NAT规则过于严格而无法建立时,TURN服务器可以作为中继,接收并转发两端...

    STUN Server.zip_C# STUN_nat 类型 判断_stun p2p_stun server

    STUN(Session Traversal Utilities for NAT,NAT穿透服务)服务器在现代网络中扮演着重要的角色,尤其是在P2P通信中。NAT(Network Address Translation,网络地址转换)是一种广泛应用于家庭和企业网络的技术,它...

    stun 学习资料,voip在NAT穿透

    **STUN技术详解** STUN(Session Traversal Utilities ...理解STUN的工作原理以及与其他NAT穿透方法的区别,对于优化网络通信性能和提升用户体验至关重要。学习和掌握这些技术,有助于在实际网络工程中解决类似问题。

    用UDP协议实现NAT穿透

    3. **ICE(Interactive Connectivity Establishment)**:这是一种综合性的NAT穿透方案,结合了STUN和 TURN(Traversal Using Relays around NAT)服务器。TURN服务器作为中继,当直接的UDP Hole Punching失败时,...

    基于STUN协议得到NAT转换后的IP和端口源代码

    STUN(Session Traversal Utilities for NAT,NAT穿越服务)协议是一种用于网络应用程序通过NAT(Network Address Translation,网络地址转换)设备进行通信的技术。在P2P(peer-to-peer)网络、VoIP(Voice over ...

    XMPP协议及NAT穿透介绍文档

    综上所述,"XMPP协议及NAT穿透介绍文档"可能是阐述如何在XMPP系统中实现NAT穿透,以便用户在不同网络环境下顺畅地进行即时通信。文档可能包含对NAT工作原理的解释、XMPP协议的详细描述,以及如何利用Jingle和NAT穿透...

    UDP穿透NAT的原理与实现

    UDP(User Datagram Protocol)是一种无连接的、不可靠的传输层协议,广泛应用于实时通信、在线游戏、视频会议等对速度要求较高的...在实际应用中,通常会结合使用STUN、TURN和ICE等技术,以适应不同类型的NAT环境。

    UDP协议P2P NAT穿透技术实例

    在实际应用中,开发P2P NAT穿透技术需要深入理解网络协议、NAT工作原理以及对等体之间的交互逻辑。同时,为了提高通信的稳定性和效率,通常还需要配合拥塞控制、错误检测和恢复等机制。通过以上知识点的实践和优化,...

    基于TCP协议的NAT穿透技术在P2P中的研究与实现

    现有的NAT穿透方法有多种,例如STUN(简单NAT穿透技术),TURN(通过中继穿透NAT)以及MidCom(中间盒通信)。STUN是一种基于UDP协议的穿透技术,其不足是不支持TCP连接穿透和对称NAT。TURN需要通过第三方服务器进行...

    p2p网络穿越中nat类型检测的原理与实现.pdf

    1. ALGs(Application Layer Gateways):在应用层处理NAT穿透,通常针对特定协议如FTP、SIP等。 2. Middlebox Control Protocol:用于控制中间设备的行为,以支持穿越。 3. STUN(Simple Traversal of UDP ...

    NAT穿透解决方案

    NAT穿透是解决在私有网络(局域网)中的计算机与外部网络进行通信时,由于网络地址转换(NAT)设备的存在,使得外部网络无法直接访问内部网络设备的问题。这个问题在对等网络(P2P)通信模式中尤为突出,尤其是在...

    P2P之UDP穿透NAT的原理与实现

    本文将深入探讨P2P网络中如何通过UDP(用户数据报协议)穿透NAT的原理及其实现方法。 首先,我们了解NAT的工作原理。NAT会将内部网络中的私有IP地址映射为公共IP地址,并记录这些映射关系。当内部设备发送数据时,...

    P2P之UDP穿透NAT的原理与C#实现(C#源码) 已调试成功

    本篇将详细介绍UDP穿透NAT的原理,并探讨C#实现这一功能的方法。 1. UDP与NAT的基本概念: - UDP:是一种无连接的传输层协议,不保证数据包的顺序、完整性和可靠性,但提供了更快的数据传输速度。 - NAT:在网络...

Global site tag (gtag.js) - Google Analytics