STUN
:简介
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
Simple Traversal of User Datagram Protocol (UDP) Through Network
Address Translators (NATs) (STUN)
STUN
为什么需要 STUN
因为 NAT
为了解决这个问题,有人将 Application Layer Gateways (ALGs)
. ALGs
跟不上应用的发展。
为了克服 ALGS
中间合协议。可是 MIDBOX
把应用协议和 NAT
所有的 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(
application entity and the public Internet.
要想穿透 NAT
NAT
1.
从相同内部主机 (IN IPX) +
并且从另一个服务器 (Y)
//
2
从相同内部主机 IN IPX) +
和完全 NAT
也就是说进内部网的数据包的, SPORT
3
和受限 NAT
4
如果发送的包的目的 IP AND PORT
内部网同一台机器,同一个端口如果目的地址不同,那么 MAPPING
所以只有他主动连的服务器才可能知道他的 MAPPING
连他只能靠猜测端口
总结:
前面 3
如果数据的内网 IP
这个功能为我们的穿越提供了很好条件。
第 4
注意 SERVERA
STUN
发送请求。请求分为两种
1
用来发现是否 NAT
2.Binding Response,
服务器产生 Binding Response
判断 NAT
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 message type Short int
Length Short int
transaction ID octet[16]
和 Response
STUN
SHUN
STUN
MAPPED-ADDRESS
RESPONSEADDRESS
如果没有指定, Response
CHANGE-REQUEST
CHANGED-ADDRESS
SOURCE-ADDRESS
USERNAME
PASSWORD,
ESSAGEINTEGRITY
ERROR-CODE Binding Error Response and Shared Secret Error Response.
UNKNOWN-ATTRIBUTES
REFLECTED-FROM Binding Responses.