nat(Session Traversal Utilities for NAT)会话穿越应用程序,可以让位于nat后的客户端找出自己的公网地址以及对应的Internet端口,最重要的是可以判断自己处于哪种nat类型之后,它是通过udp进行通信的。

下面重点讲怎么判断nat的类型。

一般将nat类型可以分为四种:全锥形,受限锥形,端口受限锥形,对称形。之所以是叫锥,可以想象一下圆锥,一个圆集中映射到一个点,也就是本地ip端口映射到nat服务器上面的公网ip和端口,其他任何远端ip和端口的网络都可以连接进来,这种就是全锥形,如果只有接收过连接的远端ip才能反向连接到本地ip,那这种就是受限形,其实就是ip受限形,如果再进行限制,只有接受过连接的远端ip和端口才能反连到本地ip,那这种就叫端口受限形。一般来说,本地服务器发起一个连接到任何远端ip,它对应的nat的端口都是不变的,如果发到不同的远端ip,它对应的nat的端口也不一样(公网ip也就是出口ip肯定是不变的),那这种就是对称形了,不同的远端ip对应不同的nat端口,形成一个对应关系,这种nat类型是不太好进行穿透的。

知道了上面的原理,检测nat的类型也就变得方便了。

  1. 首先本地程序发起一个udp连接到stun服务器,这个服务器你自己开发一个就行,stun接受的udp请求后,可以根据from记录下该请求的ip和端口,这个就是nat服务器是的出口ip了,然后根据这个ip和端口回复一条信息,把获取到的ip和端口作为信息回复回去,如果本地能接收到,说明网络是没有问题的,如果接收不了,说明block了。

这里获取到了出口ip后,可以和本地ip做对比,如果一样,那说明压根就没有nat了,可以直接bind一下,能绑定成功就说明没有nat。

  1. 本地重新发起一个请求到另外的stun服务器,通过同样的方法获取到出口ip和端口,将该端口和第一次的出口端口对比,如果变了,说明是对称形。

  2. 本地程序再发起一个请求给stun, stun服务器接收到该请求后,换一个出口ip给回复回去(重新发起一次请求),如果本地能收到回复,说明是全锥形的,换了一个ip也能接收到请求。如果接收不到请求了,对于非nat模式,那说明本地可能存在防火墙,nat下那还得继续探测。

  3. 本地发起一个请求到stun服务器,让stun换一个端口进行回复,如果本地能接收到,那说明是ip受限形,否则就是端口受限形。

至此,nat类型检测完成,这是udp通信下测试的结果,对于全锥形,需要使用tcp进行反连接探测,如果连接不上,可能服务器对tcp做了限制。如果能连接上,说明可以正常穿透使用,可以将nat改为0,注意,本地要有保活的措施,定期对外发起tcp连接,以获取公网ip和端口,反连就是对公网ip和端口重新发起连接的。

  • 本文作者: nephen
  • 本文链接: stun检查nat类型 | Nephen's Blog
  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!

stun检查nat类型相关推荐

  1. 标准STUN判断NAT类型的过程及改进

    这里基于stund的实现,来研究标准STUN协议,判断NatType的过程. stund用于判断NatType的接口的用法 首先来看stund中用于判断NatType的接口的用法.这里主要来看stun ...

  2. openwrt上用stun实现NAT类型检测

    一.安装stun: 相关组件下载参照:https://github.com/awe1p/stun cd到openwrt源代码路径 git glone https://github.com/awe1p/ ...

  3. STUN协议和常用NAT类型

    文章目录 Nat的基本原理 Nat的优缺点 Nat的3种形态 1.静态NAT (一对一) 2.动态NAT (多对多) 3.端口多路复用(多对一,目前使用最多的) NATP类型的分类 (1)全锥型(Fu ...

  4. Linux怎么检测nat类型,STUN(RFC3489)的NAT类型检测方法

    在现实Internet网络环境中,大多数计算机主机都位于防火墙或NAT之后,只有少部分主机能够直接接入Internet.很多时候,我们希望网络中的两台主机能够直接进行通信(即所谓的P2P通信),而不需 ...

  5. 穿透NAT类型以及STUN、TURN简单介绍

    穿透NAT类型以及STUN.TURN简单介绍 概述 NAT的副作用以及解决方案 NAT有4种不同的类型 锥形和对称形NAT的区别 STUN和TURN的简单介绍 STUN 基本思想 STUN Serve ...

  6. P2P网络节点间如何互访——详解STUN方式NAT穿透

    P2P网络节点间如何互访--详解STUN方式NAT穿透 转载请注明出处:https://www.jzgwind.com/?p=973  by joey 一.背景 P2P网络的核心原理,是将分布在网络上 ...

  7. stun 协议 NAT穿透方式 简介

    STUN是RFC3489规定的一种NAT穿透方式,它采用辅助的方法探测NAT的IP和端口.毫无疑问的,它对穿越早期的NAT起了巨大的作用,并且还将继续在NAT穿透中占有一席之地. STUN的探测过程需 ...

  8. [转]NAT类型与检测

    NAT类型与检测 一.NAT分类 Full Cone NAT(完全圆锥型) Address Restricted Cone NAT(地址限制圆锥型) Port Restricted Cone NA ...

  9. NAT 类型及检测方法

    NAT 类型及检测方法 STUN协议是一个客户机/服务器协议,在公网上存在着大量的STUN服务器,用户可以通过在自己主机上运行STUN客户端远程连接STUN服务器来确认自身的网络状况. 客户端主机所在 ...

最新文章

  1. Linux下通过v4l2获取视频设备名、支持的编解码及视频size列表实现
  2. Curator selector
  3. Hello,PyQt5!
  4. mysql把一行保存到另一个表_MYSQL:如何复制整个行从一个表到另一个在MySQL与第二个表有一个额外的列?...
  5. ubuntu挂起唤醒后十几秒钟就自动熄屏一次
  6. ORACLE字符集基础知识
  7. 【云图】如何制作全国×××查询系统?
  8. [luogu1373]小a和uim之大逃离_动态规划
  9. [NHFrog]发布第三个版本_NHibernate嵌入式代码生成器
  10. 修改表结构的执行效率
  11. html如何让图片边缘模糊化,CSS3对图片照片进行边缘模糊处理
  12. matlab中方差分析的自由度,多因素方差分析的自由度
  13. Android中常用计时器,延时,定时
  14. selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable: eleme
  15. iOS关于APP唤醒和在后台做的事
  16. 手把手教你用vue+JavaScript+openlayers+iview制作实时天气预报图
  17. HINSTANCE初了解
  18. 永久实现jupyter notebook多行输出
  19. Animator 播放多片段动画
  20. 用python画M2和GDP走势图

热门文章

  1. STM32F103ZET6串口调试与语音播报
  2. loginshell nologinshell
  3. idea 出现[nbsp]字符
  4. 支付宝页面第三方登录开发
  5. 【大模型】—AI大模型总体概述
  6. USACO 2019 JANUARY SILVER
  7. hosts文件修改后不生效
  8. Android加载动画
  9. 投资博弈(协调博弈)
  10. Access数据库的Like查询