STUN简介

STUN Simple Traversal of UDP over NATs ,NAT 的UDP简单穿越)是一种网络协议,它允许位于NAT(或多重NAT)后的客户端找出自己的公网地址,查出自己位于哪种类型的NAT之后以及NAT为某一 个本地端口所绑定的Internet端端口。这些信息被用来在两个同时处于NAT 路由器之后的主机之间建立UDP通信。该协议由RFC 3489定义。
一旦客户端得知了Internet端的UDP端口,通信就可以开始了。如果NAT是完全圆锥型的,那么双方中的任何一方都可以发起通信。如果NAT是受限圆锥型或端口受限圆锥型,双方必须一起开始传输。
需要注意的是,要使用STUN RFC中描述的技术并不一定需要使用STUN协议——还可以另外设计一个协议并把相同的功能集成到运行该协议的服务器上。
SIP之类的协议是使用UDP分组在Internet上传输音频和/或视频数据的。不幸的是,由于通信的两个末端往往位于NAT之后,因此用传统的方法是无法建立连接的。这也就是STUN发挥作用的地方。
STUN是一个客户机-服务器协议。一个VoIP电话或软件包可能会包括一个STUN客户端。这个客户端会向STUN服务器发送请求,之后,服务器就会向STUN客户端报告NAT路由器的公网IP地址以及NAT为允许传入流量传回内网而开通的端口。
以 上的响应同时还使得STUN客户端能够确定正在使用的NAT类型——因为不同的NAT类型处理传入的UDP分组的方式是不同的。四种主要类型中有三种是可 以使用的:完全圆锥型NAT、受限圆锥型NAT和端口受限圆锥型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,多媒体,和在线游戏等等.
为了解决这个问题,有人将 Application Layer Gateways (ALGs) 放到了NAT中,
. ALGs 也有严重的问题,比如跟不上速度太块的CLIENT,每一个应用都需要单独的实现。
跟不上应用的发展。
为了克服ALGS的问题,又提出了the Middlebox Communications (MIDCOM) protocol
中间合协议。可是MIDBOX协议使,一些CLIENT可以控制NAT/防火墙的行为,通过这个
把应用协议和NAT部分分开,把ALGS从基本NAT里面处理开。不过因为要处理MIDBOX,那么
所有的NAT或者防火墙都要升级,

因为上面种种原因:
The protocol described here, Simple Traversal of UDP Through NAT
(STUN), allows entities behind a NAT to first discover the presence
of a NAT and the type of NAT, and then to learn the addresses
bindings allocated by the NAT. STUN requires no changes to NATs, and
works with an arbitrary(任意) number of NATs in tandem between the
application entity and the public Internet.

要想穿透NAT,首先知道NAT的一些特性:
NAT分为4种(加上防火墙的话,多几种情况):
1.完全透明NAT(Full Cone NAT):
   从相同内部主机(IN IPX) +端口(IN PORTX)发送的数据MAPING为相同的IP(OUT IP X)和端口(OUT PORT X)发送带外网.
并且 从另一个服务器(Y),如果直连到MAPING的IP(OUT IP X)和端口(OUT PORT X )上,数据将会被转发到内部主机上. (IN IPX), (IN PORTX).
//也就是说进内部网的数据包的SPORT,SPORT不受限制
2.受限NAT(Restricted Cone),
    从相同内部主机IN IPX) +端口((IN PORTX))发送的数据MAPING为相同的IP(X)和端口发送带外网.
和完全NAT不同的是,只有当为X时,外部机器的的请求就被转发到主机IN IPX) +端口((IN PORTX)。
也就是说进内部网的数据包的,SPORT不受限制,SIP受限制,只能为NAT MAP数据的IP
3,端口受限NAT(Port Restricted Cone
和受限NAT不同的是,只有当外部主动请求的的源IP和端口,等于内部网发送的请求的目的IP和端口。
4.对称NAT(Symmetric?
如果发送的包的目的IP AND PORT,那么MAPPING IP AND PORT,将相同。
内部网同一台机器,同一个端口如果目的地址不同,那么MAPPING的端口也不同,
所以只有他主动连的服务器才可能知道他的MAPPING后端口,别的服务器如果想
连他只能靠猜测端口。
总结:
前面3重NAT,MAPING PORT 和 IP,是根据发送包的的内部网的IP和端口决定的。
如果数据的内网IP和端口相同,那么MAPPING后的端口和地址是固定。
这个功能为我们的穿越提供了很好条件。
第4种NAT,打洞后的MAPPING 地址和端口将变地不可靠。很难穿越。
注意SERVERA,和SERVERB是两个公网地址,而不是两台机器,

STUN 的简单操作过程:
发送请求。请求分为两种
1.    Binding Requests, sent over UDP,
用来发现是否NAT,用来发现NAT的公网地址,和MAPPING后的端口
2.Binding Response,
服务器产生Binding Response,并把得到的MAPPINGIP 和端口,返回到客户端, 客户端比较MAPPING地址是否和本机地址相同,如果是说明是本机也是公网,否则
判断NAT的类型(判断方法:client uses additional STUN Binding Requests)
3.Binding Error,
4.Shared Secret Requests, sent over TLS [2] over TCP.
这个请求要求服务器返回一临时用户名和密码,用来下一步的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,还是端口限制NAT,(命令服务器从不同的源端口/IP,Response请求)
CHANGED-ADDRESS    可选    用在Binding Responses告诉Client改变的端口和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
       
穿透的方法和过程
注意SERVER1,和SERVER2是两个公网地址,而不是两台机器。

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值