关于STUN的一些基本概念

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 通信。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值