STUN简要

STUN(Simple Traversal of UDP over NATs,NAT 的UDP简单穿越)是一种网络协议。它同意位于NAT(或多重NAT)后的client找出自己的公网地址。查出自己位于哪种类型的NAT之后以及NAT为某一个本地port所绑定的Internet端port。这些信息被用来在两个同一时候处于NAT 路由器之后的主机之间建立UDP通信。该协议由RFC 3489定义。

一旦client得知了Internet端的UDPport。通信就能够開始了。假设NAT是全然圆锥型的,那么两方中的不论什么一方都能够发起通信。假设NAT是受限圆锥型或port受限圆锥型,两方必须一起開始传输。

须要注意的是。要使用STUN RFC中描写叙述的技术并不一定须要使用STUN协议——还能够另外设计一个协议并把同样的功能集成到执行该协议的server上。

SIP之类的协议是使用UDP分组在Internet上传输音频和/或视频数据的。

不幸的是,因为通信的两个末端往往位于NAT之后,因此用传统的方法是无法建立连接的。这也就是STUN发挥作用的地方。

STUN是一个客户机-server协议。一个VoIP电话或软件包可能会包含一个STUNclient。这个client会向STUNserver发送请求,之后。server就会向STUNclient报告NAT路由器的公网IP地址以及NAT为同意传入流量传回内网而开通的port。

以上的响应同一时候还使得STUNclient可以确定正在使用的NAT类型——由于不同的NAT类型处理传入的UDP分组的方式是不同的。

四种主要类型中有三种是可以使用的:全然圆锥型NAT、受限圆锥型NAT和port受限圆锥型NAT——但大型公司网络中常常採用的对称型NAT(又称为双向NAT)则不能使用。

Simple Traversal of User Datagram Protocol (UDP) Through Network

Address Translators (NATs) (STUN)

STUN,是为了实现透明的穿透NAT,而定义的一套协议。它使本地的内网的机器。具有取得,可以得知它的NAT网关的IP,NAT类型的能力。

为什么须要STUN:

由于NAT尽管攻克了IP地址稀少的问题,可是也带来了非常多的问题。比方全部P2P应用,像文件SHARE。多媒体,和在线游戏等等.

要想穿透NAT,首先知道NAT的一些特性:

NAT分为4种(加上防火墙的话,多几种情况):

1.全然透明NAT(Full Cone NAT):

从同样内部主机(IN IPX) +port(IN PORTX)发送的数据MAPING为同样的IP(OUT IP X)和port(OUT PORT X)发送带外网.而且从还有一个server(Y)。假设直连到MAPING的IP(OUT IP X)和port(OUT PORT X )上,数据将会被转发到内部主机上. (IN IPX), (IN PORTX).

也就是说进内部网的数据包的SPORT,SPORT不受限制

2.受限NAT(Restricted Cone),

从同样内部主机(IN IPX) +port(IN PORTX)发送的数据MAPING为同样的IP(X)和port发送带外网.和全然NAT不同的是。仅仅有当为X时,外部机器的的请求就被转发到主机(IN IPX) +port(IN PORTX)。

也就是说进内部网的数据包的,SPORT不受限制,SIP受限制,仅仅能为NAT MAP数据的IP

3,port受限NAT(Port Restricted Cone)

和受限NAT不同的是。仅仅有当外部主动请求的的源IP和port,等于内部网发送的请求的目的IP和port。

4.对称NAT

假设发送的包的目的IP AND PORT,那么MAPPING IP AND PORT,将同样。

内部网同一台机器,同一个port假设目的地址不同,那么MAPPING的port也不同。所以仅仅有他主动连的server才可能知道他的MAPPING后port。别的server假设想连他仅仅能靠推測port。

总结:前面3重NAT。MAPING PORT 和 IP,是依据发送包的的内部网的IP和port决定的。假设数据的内网IP和port同样,那么MAPPING后的port和地址是固定。这个功能为我们的穿越提供了非常好条件。

第4种NAT,打洞后的MAPPING 地址和port将变地不可靠。非常难穿越。

注意SERVERA,和SERVERB是两个公网地址。而不是两台机器.

STUN协议(浅析样例分析)

主要功能是检測是否位于NAT后面。假设位于NAT后面。经过NAT转换后的地址和port是什么,另外能够检測NAT的类型。

基本思想

在私网内部安装一个STUN client。在公网上安装一个STUN Server。STUN协议定义了一些消息格式,大体上分成Request/Response,client向server发送 request,server发送response给client。

怎样检測STUN client是否在NAT后面呢?原理非常easy,Server在收到client的UDP包以后,Server将接收到该包的地址和port利用udp传回来给 client。client把这些地址和port与本机的ip地址和port进行比較。假设不同,说明在NAT后面。否则就位于NAT前面。

为了检測不同类型的 NAT,STUN协议定义了一些消息属性。要求Server有不同的动作,比方发送响应的时候使用不同的IP地址和port,或者改变port等等。STUN协议 对NAT可能有效,可是对防火墙就无能为力了。由于防火墙可能不会打开UDPport。

NAT分类

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

A机器在私网(192.168.0.4)

NATserver(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能够使用不论什么port与A通信。如:210.15.27.166:2001 -> 210.21.12.140:8000,NAT会送到A的5000port上。

Port Restricted Cone:C无法与A通信,由于A从来没有和C通信过。而B也仅仅能用它的210.15.27.166:2000与A的192.168.0.4:5000通信。由于A也从来没有和B的其它port通信过。该类型NAT是port受限的。

Symmetric NAT:上面3种类型,统称为Cone NAT。有一个共同点:仅仅要是从同一个内部地址和port出来的包,NAT都将它转换成同一个外部地址和port。可是Symmetric有点不同,详细表如今: 仅仅要是从同一个内部地址和port出来,且到同一个外部目标地址和port,则NAT也都将它转换成同一个外部地址和port。但假设从同一个内部地址和port出来。是 到还有一个外部目标地址和port,则NAT将使用不同的映射。转换成不同的port(外部地址仅仅有一个,故不变)。并且和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的其它port则均不能和A的192.168.0.4:5000通信。

STUN 的简单操作过程:

发送请求。请求分为两种

1.Binding Requests, sent over UDP,

用来发现NAT的公网地址,和MAPPING后的port

2.  Binding Response,

server产生Binding Response。并把得到的MAPPINGIP 和port。返回到client, client比較MAPPING地址是否和本机地址同样。假设是说明是本机也是公网,否则推断NAT的类型(推断方法:client uses additional STUN Binding Requests)

3.Binding Error。

4.Shared Secret Requests, sent over TLS [2] over TCP.

这个请求要求server返回一暂时username和password。用来下一步的Binding Requests/ Response,用来验证信息的完整性

5.Shared Secret Response,

6 Shared Secret Error Response。

STUN 信息结构

STUN 由以后数据结构构成:STUN头+STUN有效载荷

STUN头结构例如以下: 存储的值都是以网络顺序存放

字段    类型

STUN message type    Short int    消息类型

Length    Short int    有效载荷长度,不包括头长度

transaction ID    octet[16]    连接的ID值,检查Request,和Response

STUN的有效载荷

SHUN的有效载荷是一些STUN的属性构成,属性的类型由信息的类型来决定。

STUN的属性是定义好了的,属性列表(attribute)例如以下:

MAPPED-ADDRESS    必选    用在Binding Response,(添入MAPING IP 和PORT)

RESPONSEADDRESS    可选    用在Binding Request,指定Response,发送到哪里

假设没有指定。Response发送到MAPING IP 和 PORT

CHANGE-REQUEST    可选    用在Binding Request。用来决定。CLIENT的NAT类型是

制NAT,还是port限制NAT,(命令server从不同的源port/IP,Response请求)

CHANGED-ADDRESS    可选    用在Binding Responses告诉Client改变的port和IP

SOURCE-ADDRESS    必选    仅仅用在Binding Responses。标记信息的源PORT HE IP

USERNAME    可选    Shared Secret Response/ Binding Requests

PASSWORD,    必选    SharedSecret Response

ESSAGEINTEGRITY    可选    用在Binding Responses, Binding Request记录信息的完整性

ERROR-CODE        Binding Error Response and Shared Secret Error Response.

UNKNOWN-ATTRIBUTES

REFLECTED-FROM        Binding Responses.可追溯性和预防DDOS

通过这些方法和过程

STUN协议简介的更多相关文章

  1. STUN协议简析

    http://blog.csdn.net/mazidao2008/article/details/4934257 ——————————————————————————————————————————— ...

  2. Fiddler--一、HTTP协议简介

    在学习Fiddler之前,最好先学习一下HTTP协议. HTTP协议简介 什么是HTTP协议 超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端 ...

  3. MODBUS-RTU通讯协议简介

    MODBUS-RTU通讯协议简介   什么是MODBUS? MODBUS 是MODICON公司最先倡导的一种软的通讯规约,经过大多数公司 的实际应用,逐渐被认可,成为一种标准的通讯规约,只要按照这种规 ...

  4. JavaWeb:Web与HTTP协议简介

    JavaWeb:Web与HTTP协议简介 Web的概念 什么是Web: Web是网络上使用最广泛的分布式应用架构. 旨在共享分布在网络上的各个Web服务器中的所有互相连接的信息. 三个特征: 用HTM ...

  5. CC2540开发板学习笔记(九)—— BLE协议简介

    一.BLE协议简介 1.协议是什么? 协议是一系列的通信标准,双方需要共同按照这进行正常数据 协议是一系列的通信标准,双方需要共同按照这进行正常数据发射和 接收.协议栈是的具体实现形式,通俗点来理解就 ...

  6. HTTP 协议简介

    HTTP 协议简介 博客分类: acl开发--HTTP协议篇 网络协议http协议  一.TCP/IP 协议介绍 在介绍 HTTP 协议之前,先简单说一下TCP/IP协议的相关内容.TCP/IP协议是 ...

  7. OAUTH协议简介

    OAUTH协议简介 原文来自:http://blog.csdn.net/hereweare2009/article/details/3968582 分类: Open API2009-03-08 12: ...

  8. GRE 协议简介

    1. 协议简介    gre(generic routing encapsulation,通用路由封装)协议是对某些网络层协议(如ip 和ipx)的数据报进行封装,使这些被封装的数据报能够在另一个网络 ...

  9. HTTP协议简介详解 HTTP协议发展 原理 请求方法 响应状态码 请求头 请求首部 java模拟浏览器客户端服务端

    协议简介 协议,自然语言里面就是契约,也是双方或者多方经过协商达成的一致意见; 契约也即类似于合同,自然有甲方123...,乙方123...,哪些能做,哪些不能做; 通信协议,也即是双方通过网络通信必 ...

随机推荐

  1. 在VC/MFC中嵌入Google地图——图文并茂

    近期须要实验室须要将在无人机地面站中嵌入地图,在网上找了非常多资料,最终有些眉目了, 首先.做这个须要用到的知识有.MFC控件.MFC类库.JavaScript脚本语言.Google API.Goog ...

  2. SharePoint 2010 BCS - 概要

    博客地址 http://blog.csdn.net/foxdave SharePoint 2010首次引入了BCS的概念 - Business Connectivity Service.即业务连接服务 ...

  3. C#实现远程机器管理

    原文:C#实现远程机器管理 目前处于待离职状态,原先所有的工作都在进行交接,过程当中不乏有很多先前整理的和动手尝试实现的功能:我的主页中已经列出来一部分内容,有兴趣的可以前往看一看. 接下来的内容主要 ...

  4. c#操作appsettiongs

    try { //指定要修改的配置文件的路径 Configuration config = System.Web.Configuration.WebConfigurationManager.OpenWe ...

  5. Windows下Git服务器搭建[转]

    Windows下Git服务器搭建   作为对前两天Git服务器搭建的一个整理,我想分别从服务端和客户端两个角度来记录下整个搭建过程,为了达到目标,我们需要哪些操作. (一)服务端软件和账号的安装配置 ...

  6. 密码 hdu

    Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submission(s) ...

  7. MONGO DB windows 设备

    1,下载安装包 https://fastdl.mongodb.org/win32/mongodb-win32-x86_64-2008plus-ssl-3.0.0-signed.msi?_ga=1.22 ...

  8. 最简单的视音频播放演示样例8:DirectSound播放PCM

    ===================================================== 最简单的视音频播放演示样例系列文章列表: 最简单的视音频播放演示样例1:总述 最简单的视音频 ...

  9. zoj 3696 Alien's Organ(泊松分布)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3696 Alien's Organ Time Limit: 2 S ...

  10. Apple Watch开发了一些细节和总结

    本文旨在总结最近Watch在发展中遇到的问题和细节 1.左右Watch真机调试问题 一般的情况下,你为IOS主应用创建了一个extention,比方说Today Extension .Xcode都会自 ...