现在的位置: 首页 > 综合 > 正文

关于STUN的一些基本概念

2013年09月19日 ⁄ 综合 ⁄ 共 1952字 ⁄ 字号 评论关闭

STUN

协议的全称是
Simple Traversal of User Datagram Protocol Through Network Address Translators

,主要功能是检测是否位于
NAT

后面,如果位于
NAT

后面,经过
NAT

转换后的地址和端口是什么,另外可以检测
NAT

的类型。

基本思想

在私网内部安装一个
STUN client

,在公网上安装一个
STUN Server


STUN

协议定义了一些消息格式,大体上分成
Request/Response


client


server

发送
request


server

发送
response


client

。如何检测
STUN client

是否在
NAT

后面呢?原理很简单,
Server

在收到
client


UDP

包以后,
Server

将接收到该包的地址和端口利用
udp

传回来给
client


client

把这些地址和端口与本机的
ip

地址和端口进行比较,如果不同,说明在
NAT

后面,否则就位于
NAT

后面。为了检测不同类型的
NAT


STUN

协议定义了一些消息属性,要求
Server

有不同的动作,比如发送响应的时候使用不同的
IP

地址和端口,或者改变端口等等。
STUN

协议对
NAT

可能有效,但是对防火墙就无能为力了,因为防火墙可能不会打开
UDP

端口。

NAT


分类

STUN

协议将
NAT

粗略分为
4

种类型,即
Full Cone


Restricted Cone


Port Restricted Cone


Symmetric

。举个实际例子来说明这四种
NAT

的区别:

A

机器在私网(
192.168.0.4


NAT

服务器(
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

可以使用任何端口与
A

通信。如:
210.15.27.166:2001 -> 210.21.12.140:8000


NAT

会送到
A


5000

端口上。


Port Restricted Cone


C

无法与
A

通信,因为
A

从来没有和
C

通信过。而
B

也只能用它的
210.15.27.166:2000


A


192.168.0.4:5000

通信,因为
A

也从来没有和
B

的其他端口通信过。该类型
NAT

是端口受限的。

Symmetric NAT

:上面
3

种类型,统称为
Cone NAT

,有一个共同点:只要是从同一个内部地址和端口出来的包,
NAT

都将它转换成同一个外部地址和端口。但是
Symmetric

有点不同,具体表现在:只要是从同一个内部地址和端口出来,且到同一个外部目标地址和端口,则
NAT

也都将它转换成同一个外部地址和端口。但如果从同一个内部地址和端口出来,是到另一个外部目标地址和端口,则
NAT

将使用不同的映射,转换成不同的端口(外部地址只有一个,故不变)。而且和
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

的其他端口则均不能和
A


192.168.0.4:5000

通信。



抱歉!评论已关闭.