一、前言

之前一篇文章中,提出了一个判断NAT类型的方案。该方案是自己研究设计的,比较粗糙。近期研读了关于STUN的一些协议标准,其中RFC3489中就包含了判断NAT类型的标准方案。

与自己设计的方案相比,标准方案有以下优点:

1,利用了STUN协议中定义的一些属性,如CHANGE-REQUEST/MAPPED-ADDRESS/RESPONSE-ADDRESS/CHANGED-ADDRESS等;

2,使用单台服务器就可以完成(需要服务器上至少配置2个IP地址);

3,步骤更精简;

注意:RFC3489已被RFC5389废弃,且RFC5389也已被RFC8489废弃。在最新的STUN协议标准中,上面提到的属性都已被废弃。

下面介绍一下RFC3489中的NAT类型发现方案。

二、名词解释

首先介绍一下方案中用到的STUN协议中的一些属性。

CHANGE-REQUEST

此属性被客户端使用,请求服务器在发送响应时,使用不同的源IP地址或端口(与客户端请求的目的IP地址和端口不同)。此属性包含2个标志位:

“change IP”:指示服务器更换源IP

“change port”:指示服务器更换源端口

MAPPED-ADDRESS

此属性被包含在服务器的响应中,内容是服务器看到的客户端的源IP和端口信息(经过NAT映射后的)。

RESPONSE-ADDRESS

此属性由客户端使用,指示服务器应该将响应发往哪里。其内容包含地址和端口。

CHANGED-ADDRESS

此属性被包含在服务器的响应中,内容是IP地址和端口。其含义是若客户端在CHANGE-REQUEST中指定了任意的标志位后,服务器的响应将要使用的源IP和端口。

无论客户端是否设置了这些标志位,此属性总是被包含在响应中。

三、NAT类型发现流程

客户端执行3种测试来发现NAT类型。

测试I:

客户端发送一个请求给服务器。此请求中不设置CHANGE-REQUEST中的任何标志位,也不携带RESPONSE-ADDRESS属性。

测试II:

客户端发送一个请求给服务器。此请求中同时设置CHANGE-REQUEST中的两个标志位。

测试III:

客户端发送一个请求给服务器。此请求中设置CHANGE-REQUEST中的“change port”标志位。

客户端首先执行测试I

有以下几种情况:

1,没有收到响应;则客户端会立即知道它无法发起UDP连接;

2,收到响应,客户端检查MAPPED-ADDRESS属性;

  (1) 若属性中的地址和端口与发送请求时使用的一致,则客户端知道自己不在NAT之后。继续执行测试II

    ① 若收到响应,则客户端知道它可以访问互联网(或者,至少客户端位于行为类似完全锥形NAT的防火墙之后,且没有地址转换)。

    ② 若未收到响应,则客户端知道它位于对称UDP防火墙之后。

    上述2种情况,都可以认定客户端位于公网上。

  (2) 若不一致,则客户端知道它位于NAT之后。继续执行测试II。

    ① 若收到响应,则客户端知道它位于完全锥形NAT之后。------测试II中,服务器使用不同的源IP地址和端口进行响应,若能收到,则表面是完全锥形NAT,这种NAT不检查下行报文的源IP和端口。

    ② 若未收到响应,则客户端重复执行测试I,但使用不同的目的IP地址和端口(这些信息可以从首次执行测试I的响应中获取,包含在CHANGED-ADDRESS属性中)

      1) 若此次响应中包含的MAPPED-ADDRESS属性中的IP地址和端口和第一次时不一致,则客户端知道它位于对称NAT之后。

      2) 若两次结果一致,则客户端位于限制锥形NAT或端口限制锥形NAT之后。为了确定是哪一种NAT,需要执行测试III。

        执行测试III后,若收到响应,则客户端位于限制锥形NAT之后。

        执行测试III后,若未收到响应,则客户端位于端口限制锥形NAT之后。

上述过程的流程图总结如下:

NAT类型发现的更多相关文章

  1. NAT类型与穿透 及 STUN TURN 协议

    STUN : Simple Traversal of User Datagram Protocol [UDP] Through Network Address Translators [NATs] S ...

  2. 【转帖】NAT类型及转换原理深入剖析

    NAT类型及转换原理深入剖析 http://www.m6000.cn/other/459.html  2018年8月4日16:40:14发表评论 297 views 大家都知道.NAT是位于内.外网之 ...

  3. STUN: NAT 类型检测方法

    STUN(Simple Transversal of UDP through NATs)[21]是RFC3489 规定的一种NAT 穿透方式,它采用辅助的方法探测NAT 的IP 和端口. STUN 的 ...

  4. nat 类型及打洞原理

    nat 类型分4种 1.全锥形 full cone A 与 主机B交互,nat转换 A的内部地址及端口为  ip1 port1,ip1和port1为对外地址,任何机器能访问. 2.ip 受限制(对B而 ...

  5. Nat类型测试

    这是一个测试NAT类型的小工具,一般也没太多用处,只有游戏玩家可能需要用来测试你的网络NAT类型是什么.NAT类型一般分为以下4种: 1. Full Cone NAT (完全圆锥型)2. Restri ...

  6. 在Windows 10中禁用自动文件夹类型发现

    点击下载注册表文件:https://files.cnblogs.com/files/Music/win10_automatic_folder_type_discovery.zip 已知Windows ...

  7. NAT穿越(一) NAT类型

    NAT分为四种类型: (1)完全透明NAT(Full Cone NAT): 从内部主机  (IN IP ipa) +端口(IN PORT porta) 发送的数据映射为  IP(OUT IP IPA) ...

  8. NAT穿越

    1.NAT类型 目前主要的NAT类型有如下几种: 1)Full-cone NAT, also known as one-to-one NAT 一旦一个内网地址 (iAddr:iPort) 被映射到一个 ...

  9. 转发 通过NAT和防火墙特性和TCP穿透的测评(翻译)

    转自 http://blog.csdn.net/sjin_1314/article/details/18178329 原文:Characterization and Measurement of TC ...

  10. NAT穿透解决方案介绍

    最近公司要实现在各种网络环境下面的多屏互动(机顶盒.android phone.iphone及PC端)的需求:由于IP地址资源有限的原因,目前我们使用的各种终端设备都位于局域网后面也就是多台设备共享同 ...

随机推荐

  1. webapi授权认证

    webapi授权认证 一.需要类包 Microsoft.AspNetCore.Authentication.JwtBearer 二.相关名词 Authentication(认证):标识用户的身份,一般 ...

  2. 前端使用 Konva 实现可视化设计器(8)- 预览框

    请大家动动小手,给我一个免费的 Star 吧~ 大家如果发现了明显的 Bug,可以提 Issue 哟~ 这一章我们实现一个预览框,实时.可交互定位的. github源码 gitee源码 示例地址 预览 ...

  3. Linux(四):Linux的打包和压缩详解

    关于Linux的文件操作,这里汇总一下打包和压缩的一些命令,以及命令使用的详情. 打包(归档)和压缩 归档,也称为打包,指的是一个文件或目录的集合,而这个集合被存储在一个文件中.归档文件没有经过压缩, ...

  4. 荒岛野人Savage

    题目描述 样例 3 1 3 4 2 7 3 3 2 1 6 分析 首先,我们先设4个变量,初始坐标 \(d[i]\),每年步数 \(p[i]\),寿命 \(l[i]\),根据题目很容易得到一个不等式 ...

  5. IceRPC之服务器地址与TLS的安全性->快乐的RPC

    作者引言 很高兴啊,我们来到了IceRPC之服务器地址与TLS的安全性->快乐的RPC, 基础引导,让自已不在迷茫,快乐的畅游世界. 服务器地址 ServerAddress 了解服务器地址的概念 ...

  6. 两个List合并,List集合中的对象根据某个相同的属性,合并另外属性

    简介 (Introduction): 背景 需要对数据进行拼接,拼接的数据是存在两个不同的表中,但是,拼接后要作为一个对象显示,但是,这样的对象又是多个的. 结构图数据库模型 id name 1008 ...

  7. MindSpore梯度进阶操作

    技术背景 在MindSpore深度学习框架中,我们可以使用mindspore.grad对函数式编程的函数直接计算自动微分,也可以使用mindspore.ops.GradOperation求解Cell类 ...

  8. NumPy 随机数据分布与 Seaborn 可视化详解

    随机数据分布 什么是数据分布? 数据分布是指数据集中所有可能值出现的频率,并用概率来表示.它描述了数据取值的可能性. 在统计学和数据科学中,数据分布是分析数据的重要基础. NumPy 中的随机分布 N ...

  9. SASS 运算 (Operations)符的基本使用

    ​ sass 运算符虽然没有像那些编程语言那么强大,但为了更灵活的输出css,也增强了一些运算符的功能,例如赋值运算符.等号操作符.比较运算符.逻辑运算符.字符串运算符...等等,接下来就来详细介绍下 ...

  10. Istio(十):istio多集群部署模式

    目录 一.模块概览 二.多集群部署 2.1 多集群部署 2.2 网络部署模式 2.3 控制平面部署模型 2.4 网格部署模型 2.5 租户模式 2.6 最佳多集群部署 一.模块概览 在本模块中,我们将 ...