王朝百科
分享
 
 
 

stun

王朝百科·作者佚名  2010-02-05  
宽屏版  字体: |||超大  

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是两个公网地址,而不是两台机器。

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
如何用java替换看不见的字符比如零宽空格​十六进制U+200B
 干货   2023-09-10
网页字号不能单数吗,网页字体大小为什么一般都是偶数
 干货   2023-09-06
java.lang.ArrayIndexOutOfBoundsException: 4096
 干货   2023-09-06
Noto Sans CJK SC字体下载地址
 干货   2023-08-30
window.navigator和navigator的区别是什么?
 干货   2023-08-23
js获取referer、useragent、浏览器语言
 干货   2023-08-23
oscache遇到404时会不会缓存?
 干货   2023-08-23
linux下用rm -rf *删除大量文件太慢怎么解决?
 干货   2023-08-08
刀郎新歌破世界纪录!
 娱乐   2023-08-01
js实现放大缩小页面
 干货   2023-07-31
生成式人工智能服务管理暂行办法
 百态   2023-07-31
英语学习:过去完成时The Past Perfect Tense举例说明
 干货   2023-07-31
Mysql常用sql命令语句整理
 干货   2023-07-30
科学家复活了46000年前的虫子
 探索   2023-07-29
英语学习:过去进行时The Past Continuous Tense举例说明
 干货   2023-07-28
meta name="applicable-device"告知页面适合哪种终端设备:PC端、移动端还是自适应
 干货   2023-07-28
只用css如何实现打字机特效?
 百态   2023-07-15
css怎么实现上下滚动
 干货   2023-06-28
canvas怎么画一个三角形?
 干货   2023-06-28
canvas怎么画一个椭圆形?
 干货   2023-06-28
canvas怎么画一个圆形?
 干货   2023-06-28
canvas怎么画一个正方形?
 干货   2023-06-28
中国河南省郑州市金水区蜘蛛爬虫ip大全
 干货   2023-06-22
javascript简易动态时间代码
 干货   2023-06-20
感谢员工的付出和激励的话怎么说?
 干货   2023-06-18
 
>>返回首页<<
 
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有