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. CSS: 解决Div float后,父Div无法高度自适应的问题

    在用CSS+DIV的布局中,常常会发现,当一个DIV float之后,假设他的高度超过了其父DIV的高度时,其父DIV的高度并不会对应的进行调整.要解决问题(也叫做闭合(清除)浮动),我们有四种办法: ...

  2. 深入解析_Android的自定义布局

    前言: 这篇文章是前Firefox Android工程师(现在跳槽去Facebook了) Lucas Rocha所写,文中对Android中常用的四种自定义布局方案进行了很好地分析,并结合这四种And ...

  3. UI 纯代码实现计算器

    //  MHTAppDelegate.h //  TestCa //  Copyright (c) 2014年 Summer. All rights reserved. #import <UIK ...

  4. hdu 2767 Proving Equivalences 强连通缩点

    给出n个命题,m个推导,问最少添加多少条推导,能够使全部命题都能等价(两两都能互推) 既给出有向图,最少加多少边,使得原图变成强连通. 首先强连通缩点,对于新图,每一个点都至少要有一条出去的边和一条进 ...

  5. java nio 网络框架实现(转)

    maven项目https://github.com/solq360/common 链式编/解码 链路层链式处理 管道管理socket 多协议处理非常方便 仿netty NioEventLoop 单线程 ...

  6. codeforces #550E Brackets in Implications 结构体

    标题效果:定义集合中{0,1}\{0,1\}上的运算符"→\rightarrow",定义例如以下: 0→0=10\rightarrow 0=1 0→1=10\rightarrow ...

  7. java提高篇(十三)-----字符串

          可以证明,字符串操作是计算机程序设计中最常见的行为. 一.String 首先我们要明确,String并不是基本数据类型,而是一个对象,并且是不可变的对象.查看源码就会发现String类为f ...

  8. Oracle之Check约束实例具体解释

    Oracle | PL/SQL Check约束使用方法具体解释 1. 目标 实例解说在Oracle中怎样使用CHECK约束(创建.启用.禁用和删除) 2. 什么是Check约束? CHECK约束指在表 ...

  9. 系列三VisualSvn Server

    原文:系列三VisualSvn Server VisualSvn Server介绍 1 .VisualSvn Server  VisualSvn Server是免费的,而VisualSvn是收费的.V ...

  10. 设置状态栏样式Demo

    达到的效果: 色有黑色变为了白色 //设置状态条的样式 - (UIStatusBarStyle)preferredStatusBarStyle { returnUIStatusBarStyleLigh ...