`
hetaohappy1
  • 浏览: 17365 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

stun 协议

阅读更多
STUN协议的全称是Simple Traversal of User Datagram Protocol Through Network Address Translators,主要功能是检测是否位于NAT后面,如果位于NAT后面,经过NAT转换后的地址和端口是什么,另外可以检测NAT的类型。



基本思想



在私网内部安装一个STUN client,在公网上安装一个STUN Server,STUN协议定义了一些消息格式,大体上分成Request/Response,client向server发送request,server发送response给client。如何检测STUN client是否在NAT后面呢?原理很简单,Server在收到client的UDP包以后,Server将接收到该包的地址和端口利用udp传回来给client,client把这些地址和端口与本机的ip地址和端口进行比较,如果不同,说明在NAT后面,否则就位于NAT后面。为了检测不同类型的NAT,STUN协议定义了一些消息属性,要求Server有不同的动作,比如发送响应的时候使用不同的IP地址和端口,或者改变端口等等。STUN协议对NAT可能有效,但是对防火墙就无能为力了,因为防火墙可能不会打开UDP端口。



NAT分类



STUN协议将NAT粗略分为4种类型,即Full Cone、Restricted Cone、Port Restricted Cone和Symmetric。举个实际例子来说明这四种NAT的区别:



A机器在私网(192.168.0.4)



NAT服务器(210.21.12.140)



B机器在公网(210.15.27.166)



C机器在公网(210.15.27.140)



现在,A机器连接过B机器,假设是 A(192.168.0.4:5000)-> NAT(转换后210.21.12.140:8000)-> B(210.15.27.166:2000)。



同时A从来没有和C通信过。



则对于不同类型的NAT,有下列不同的结果:



Full Cone NAT:C发数据到210.21.12.140:8000,NAT会将数据包送到A(192.168.0.4:5000)。因为NAT上已经有了192.168.0.4:5000到210.21.12.140:8000的映射。



Restricted Cone:C无法和A通信,因为A从来没有和C通信过,NAT将拒绝C试图与A连接的动作。但B可以通过210.21.12.140:8000与A的 192.168.0.4:5000通信,且这里B可以使用任何端口与A通信。如:210.15.27.166:2001 -> 210.21.12.140:8000,NAT会送到A的5000端口上。

Port Restricted Cone:C无法与A通信,因为A从来没有和C通信过。而B也只能用它的210.15.27.166:2000与A的192.168.0.4:5000通信,因为A也从来没有和B的其他端口通信过。该类型NAT是端口受限的。

Symmetric NAT:上面3种类型,统称为Cone NAT,有一个共同点:只要是从同一个内部地址和端口出来的包,NAT都将它转换成同一个外部地址和端口。但是Symmetric有点不同,具体表现在:只要是从同一个内部地址和端口出来,且到同一个外部目标地址和端口,则NAT也都将它转换成同一个外部地址和端口。但如果从同一个内部地址和端口出来,是到另一个外部目标地址和端口,则NAT将使用不同的映射,转换成不同的端口(外部地址只有一个,故不变)。而且和Port Restricted Cone一样,只有曾经收到过内部地址发来包的外部地址,才能通过NAT映射后的地址向该内部地址发包。



现针对Symmetric NAT举例说明:



A机器连接过B机器,假使是 A(192.168.0.4:5000)-> NAT(转换后210.21.12.140:8000)-> B(210.15.27.166:2000)



如果此时A机器(192.168.0.4:5000)还想连接C机器(210.15.27.140:2000),则NAT上产生一个新的映射,对应的转换可能为A(192.168.0.4:5000)-> NAT(转换后210.21.12.140:8001)-> C(210.15.27.140:2000)。此时,B只能用它的210.15.27.166:2000通过NAT的210.21.12.140: 8000与A的192.168.0.4:5000通信, C也只能用它的210.15.27.140:2000通过NAT的210.21.12.140:8001与A的192.168.0.4:5000通信,而 B或者C的其他端口则均不能和A的192.168.0.4:5000通信。



A101:10映射202:20发送请求到Server,Server找到所要请求的404:40映射出来的IP303:30,给404:40一个通知(包括101:10的映射IP202:20),此时A打开自己的洞{映射成立},服务器将404:40的映射Ip返回给101:10;此时101要和303:30连接,但404:40没有主动向101:10发送请求,所以101:10的请求在303:30处被阻断,发送请求的同时404:40开始打洞,404:40从服务器得知202:20对他发起请求,他可以和202:20建立连接,刚好202:20的请求在303:30处等待,此时两者建立了连接.
分享到:
评论

相关推荐

    STUN 协议实现源码

    STUN协议就是为了解决这一难题而设计的,它允许被NAT设备隐藏的主机发现自己的公网IP和端口,以及测试NAT的行为和类型。 STUN协议的核心在于交换UDP报文,客户端和服务器之间通过发送和接收STUN消息来探测NAT行为。...

    STUN协议的java实现,stun4j

    STUN协议通过向公共互联网上的STUN服务器发送请求,然后接收响应来工作。请求包含了源IP和端口信息,服务器会将这些信息原封不动地返回到响应中。客户端解析响应,从而得知自己在NAT后的公网映射。这个过程称为...

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

    STUN协议是IETF(Internet Engineering Task Force)定义的一种标准,用于帮助内网客户端发现其公共IP地址和端口,以及NAT的行为。它的工作原理是,客户端向STUN服务器发送请求,服务器接收到请求后,将包含请求来源...

    stun协议抓包.rar

    在P2P(Peer-to-Peer,对等网络)通信中,NAT会阻止两个处于不同网络环境的设备直接通信,STUN协议通过让客户端向公共互联网上的STUN服务器发送请求,帮助客户端发现其在网络NAT后的公共IP地址和端口,从而实现P2P...

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

    在P2P(peer-to-peer)网络、VoIP(Voice over Internet Protocol,互联网语音电话)和在线游戏等应用中,STUN协议扮演了关键角色,帮助内网中的设备发现其公网映射地址。 NAT是一种网络技术,用于将一个或多个内部...

    Stun协议RFC5389

    ### STUN协议(Session Traversal Utilities for NAT)——RFC5389 #### 一、简介 《Session Traversal Utilities for NAT (STUN)》即为会话穿越实用工具(STUN),它是一项用于帮助其他协议处理网络地址转换器...

    stun协议深入解剖

    ### STUN协议深入解剖 #### 一、NAT类型及其特性 STUN协议(Simple Traversal of UDP through NATs)是一种用于穿越网络地址转换器(NAT)的技术,其核心在于帮助网络设备识别自身是否位于NAT后,并确定经过NAT...

    简析STUN协议-好东西分享

    STUN(Simple Traversal of UDP over NATs,NAT 的UDP简单穿越)是一种网络协议,它允许位于NAT(或多重NAT)后的客户端找出自己的公网地址,查出自己位于哪种类型的NAT之后以及NAT为某一 个本地端口所绑定的...

    STUN 协议RFC3489中文版 只要5积分

    RFC3489是STUN协议的原始定义,尽管后来更新为RFC5389,但RFC3489仍然是理解STUN工作原理的基础文档。NAT是一种普遍采用的技术,它允许多个内部网络设备共享一个公共的IP地址来访问互联网,但同时也给点对点通信带来...

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

    ### 基于STUN协议的NAT穿透技术通讯效率优化研究 #### 一、引言 随着互联网的快速发展,用户对于高速、稳定的P2P通信需求日益增长。然而,NAT(Network Address Translation,网络地址转换)技术作为解决IP地址...

    STUN协议RFC5389.pdf

    STUN协议RFC5389

    基于STUN协议的NAT路由器穿越算法设计与实现.pdf

    整体而言,本文档为多媒体传输技术中的NAT穿越问题提供了一种基于STUN协议的解决方案,详细分析了NAT技术的原理与挑战,并提出了一种有效的识别和穿越算法,为相关领域的研究和应用提供了理论指导和实践参考。

    p2p 服务器,支持stun 协议

    源码,p2p 服务器,支持stun 协议。亲测在linux 下编译,运行。要部署在公网上才有效果。媒体服务器在公网,内网的voip话机需要stun服务公开自已的地址才能和外网的其它话机通话。 安装: ./configure make sudo...

    rfc3489(STUN).txt

    ### STUN协议(简单UDP穿越网络地址转换器) #### 概述 STUN(Simple Traversal of UDP Through NATs)是一种轻量级协议,旨在帮助应用程序发现其与公网之间存在的NAT(网络地址转换器)及其类型。通过STUN协议,...

    集成超精简版XMPP客户端和STUN协议,可实现P2P

    集成超精简版XMPP客户端和STUN协议,可实现P2P,具体所实现的功能可查看源码README.txt,希望能帮到有需要的人,随便也可以提点意见和建议哈! 至于P2P的实现,在我的测试环境下,是使用移动的3G网络,只要一台设备...

    STUN-iOS:适用于iOS的STUN协议实现

    适用于iOS的STUN协议实现这是iOS的NAT会话遍历实用程序(STUN)协议实现。 原始规格: : 这个怎么运作导入STUNClient和GCDAsyncUdpSocket类: #import "GCDAsyncUdpSocket.h"#import "STUNClient.h" 将...

    stun-c_stun_

    在这个名为"stun-c_stun_"的项目中,显然重点是实现STUN协议的客户端功能。 首先,STUN协议的工作原理可以分为以下几个步骤: 1. **请求与响应**:客户端向STUN服务器发送一个请求报文,这个报文包含了客户端的...

    stun_stunclient_taxcu4_stun_

    **STUN协议简介** STUN是一种基于UDP的简单协议,它允许位于NAT后的设备(如家庭或公司网络中的计算机)发现自己的公网IP地址和端口,以及NAT的行为模式。这对于实现P2P(点对点)通信,尤其是音视频通话、在线游戏...

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

    Python中的pystun.py文件很可能是一个实现STUN协议的库,它可以帮助开发者测试和识别NAT类型,或者在需要时建立穿越NAT的连接。使用这个库,开发者可以通过编写代码来实现自定义的网络穿透解决方案。 在实际应用中...

Global site tag (gtag.js) - Google Analytics